프로젝트

일반

사용자정보

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

markus / KCOM / Controls / AdornerFinal.xaml.cs @ 32e95118

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

1
using KCOM.Common;
2
using MarkupToPDF.Common;
3
using MarkupToPDF.Controls.Common;
4
using MarkupToPDF.Controls.Etc;
5
using MarkupToPDF.Controls.Line;
6
using MarkupToPDF.Controls.Polygon;
7
using MarkupToPDF.Controls.Shape;
8
using MarkupToPDF.Controls.Text;
9
using System;
10
using System.Collections.Generic;
11
using System.Linq;
12
using System.Reactive.Linq;
13
using System.Text;
14
using System.Windows;
15
using System.Windows.Controls;
16
using System.Windows.Controls.Primitives;
17
using System.Windows.Input;
18
using System.Windows.Media;
19
using Telerik.Windows.Controls;
20

    
21
namespace KCOM.Controls
22
{
23
    /// <summary>
24
    /// Interaction logic for AdornerFinal.xaml
25
    /// </summary>
26
    public class AdornerMember
27
    {
28
        public UIElement DrawingData { get; set; }
29
        public ControlType Drawingtype { get; set; }
30
        public double DrawingAngle { get; set; }
31
        public List<Thumb> ThumbList { get; set; }
32

    
33
    }
34
    public partial class AdornerFinal : UserControl
35
    {
36
        public TextBox editTextBox { get; set; }
37
        #region 공용 인스턴스
38
        public List<AdornerMember> MemberSet { get; set; }
39
        public Dictionary<Thumb, DragData> _dragData = new Dictionary<Thumb, DragData>();
40
        public double AngleValue = 0;
41
        public bool IsTextAngle = false;
42
        public Rect BorderSize { get; set; }
43
        public bool TextCompensation = false;
44
        public bool isDragging { get; set; }
45
        public Thumb DraggerThumb { get; set; }
46
        public RadDropDownButton dropData;
47
        public RadCalendar dropCalendar;
48
        public Thumb mainDragThumb { get; set; }
49

    
50
        public Point reSizePoint { get; set; }
51
        private Point rotatePoint { get; set; } /// 2018.05.09 added by humkyung
52
        #endregion
53
        #region 생성자
54
        private void RadDropDownButton_Loaded(object sender, RoutedEventArgs e)
55
        {
56
            dropData = sender as RadDropDownButton;
57
        }
58
        private void Date_Calendar_Loaded(object sender, RoutedEventArgs e)
59
        {
60
            dropCalendar = sender as RadCalendar;
61
            dropCalendar.SelectionChanged += (sen, ea) =>
62
            {
63
                dropData.IsOpen = false;
64
                if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "DateControl")
65
                {
66
                    DateControl data = (MemberSet.First() as AdornerMember).DrawingData as DateControl;
67
                    data.Text = dropCalendar.SelectedDate.Value.ToShortDateString();
68
                }
69
            };
70
        }
71
        public AdornerFinal()
72
        {
73
            InitializeComponent();
74
            MemberSet = new List<AdornerMember>();
75
            BorderSize = new Rect();
76
            _dragData.Add(rotateTop, new DragData() { CursorAngle = 0, DragType = DragType.Rotate, RotateIsLeft = true, RotateIsTop = true });
77
            //_dragData.Add(rotateCenter, new DragData() { CursorAngle = 0, DragType = DragType.Rotate, RotateIsLeft = true, RotateIsTop = true });
78
        }
79

    
80
        void DragThumb_Loaded(object sender, RoutedEventArgs e)
81
        {
82
            mainDragThumb = DragThumb;
83
        }
84

    
85
        public AdornerFinal(CommentUserInfo objectData) : this()
86
        {
87
            InitializeComponent();
88
            objectData.IsHitTestVisible = false;
89
            if ((objectData as ArrowTextControl) != null)
90
            {
91
                (objectData as ArrowTextControl).Base_TextBox.Focusable = true;
92
            }
93
            Canvas.SetZIndex(objectData, 84);
94
            try
95
            {
96
                this.ContainerContent.Children.Add(objectData);
97
            }
98
            catch (Exception ex)
99
            {
100

    
101
            }
102
            SetAdornerMember(objectData as CommentUserInfo);
103
            this.Focus();
104
        }
105
        public AdornerFinal(List<CommentUserInfo> objectData)  : this()
106
        {
107
            InitializeComponent();
108
            foreach (var item in objectData)
109
            {
110
                //item.IsHitTestVisible = false;
111
                if ((item as ArrowTextControl) != null)
112
                {
113
                    (item as ArrowTextControl).Base_TextBox.Focusable = true;
114
                }
115
                try
116
                {
117
                    Canvas.SetZIndex(item, 80);
118
                    this.ContainerContent.Children.Add(item);
119
                }
120
                catch (Exception ex)
121
                {
122

    
123
                }
124
            }
125
            SetAdornerMember(objectData);
126
            this.Focus();
127
        }
128

    
129
        #endregion
130
        #region 메서드
131
        public Rect getAdornerSize()
132
        {
133
            return BorderSize;
134
        }
135
        public void addMemberControl(UIElement objectData)
136
        {
137
            this.ContainerContent.Children.Add(objectData);
138
            SetAdornerMember(objectData as CommentUserInfo);
139
            this.Focus();
140
        }
141
        /// <summary>
142
        /// UIElement를 종류에 맞게 등록시킴
143
        /// </summary>
144
        /// <param name="member">UIElement 타입으로 BaseLayer에 있는 것들이 들어옵니다.</param>
145
        public void SetAdornerMember(MarkupToPDF.Common.CommentUserInfo member)
146
        {
147

    
148
            switch (member.GetType().Name)
149
            {
150
                #region 컨트롤 조건
151
                case "LineControl": //Angle추가 안했음
152
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.SingleLine, ThumbList = new List<Thumb>() });
153
                    break;
154
                case "ImgControl": //Angle추가 안했음
155
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ImgControl, ThumbList = new List<Thumb>() });
156
                    //AdornerBorder.RenderTransformOrigin = new Point(0.5, 0.5);            
157
                    //DragThumb.RenderTransformOrigin = new Point(0.5, 0.5);
158
                    AngleValue = (member as ImgControl).Angle;
159
                    break;
160
                //case "SymControl": //Angle추가 안했음
161
                //    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = MarkupType.Viewbox, ThumbList = new List<Thumb>() });
162
                //    AngleValue = (member as SymControl).Angle;
163
                //    //ViewBoxRotate(member);
164
                //    break;
165
                //case "SymControlN": //Angle추가 안했음
166
                //    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = MarkupType.Viewbox, ThumbList = new List<Thumb>() });
167
                //    AngleValue = (member as SymControlN).Angle;
168
                //    //ViewBoxRotate(member);
169
                //    break;
170
                case "PolygonControl": //Angle추가 안했음
171
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.PolygonControl, ThumbList = new List<Thumb>() });
172
                    break;
173
                case "ArrowControl":
174
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowLine, ThumbList = new List<Thumb>() });
175
                    break;
176
                case "ArrowTextControl":
177
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowTextControl, ThumbList = new List<Thumb>() });
178
                    (member as ArrowTextControl).Base_TextBox.IsHitTestVisible = false;
179

    
180
                    Observable.FromEventPattern(((ArrowTextControl)member).Base_TextBox, "LostFocus").Subscribe(a =>
181
                    {
182
                        TextCompensation = false;
183
                        BorderUpdate();
184
                        if ((a.Sender as TextBox).Text == "") //보류
185
                        {
186
                            this.ContainerContent.Children.Remove(member);
187
                            this.Visibility = Visibility.Collapsed;
188
                        }
189
                    });
190
                    break;
191
                case "ArcControl":
192
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArcLine, ThumbList = new List<Thumb>() });
193
                    break;
194
                case "ArrowControl_Multi":
195
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowMultiLine, ThumbList = new List<Thumb>() });
196
                    break;
197
                case "RectangleControl":
198
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Rectangle, ThumbList = new List<Thumb>() });
199
                    break;
200
                case "DateControl":
201
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Date, ThumbList = new List<Thumb>() });
202
                    AngleValue = (member as DateControl).Angle;
203
                    break;
204
                case "TriControl":
205
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Triangle, ThumbList = new List<Thumb>() });
206
                        break;
207
                case "CircleControl":
208
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Circle, ThumbList = new List<Thumb>() });
209
                    break;
210
                case "CloudControl":
211
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.PolygonCloud, ThumbList = new List<Thumb>() });
212
                    break;
213
                case "RectCloudControl":
214
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.RectCloud, ThumbList = new List<Thumb>() });
215
                    break;
216
                //강인구 추가
217
                case "SignControl":
218
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Sign, ThumbList = new List<Thumb>() });
219
                    AngleValue = (member as SignControl).Angle;
220
                    break;
221
                //강인구 추가
222
                case "SymControl":
223
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Symbol, ThumbList = new List<Thumb>() });
224
                    AngleValue = (member as SymControl).Angle;
225
                    break;
226
                //강인구 추가
227
                case "SymControlN":
228
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Stamp, ThumbList = new List<Thumb>() });
229
                    AngleValue = (member as SymControlN).Angle;
230
                    break;
231
                case "InkControl": //Angle추가 안했음
232
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Ink, ThumbList = new List<Thumb>() });
233
                    break;
234
                case "TextControl":
235
                    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.TextControl, ThumbList = new List<Thumb>() });
236
                    RectangleGeometry Data = new RectangleGeometry
237
                    {
238
                        Rect = new Rect()
239
                        {
240
                            X = Canvas.GetLeft((member as TextControl)),
241
                            Y = Canvas.GetTop((member as TextControl)),
242
                            Width = (member as TextControl).Base_TextBlock.ActualWidth / 2,
243
                            Height = (member as TextControl).Base_TextBlock.ActualHeight / 2,
244
                            //Width = (member as TextControl).BoxWidth / 2,
245
                            //Height = (member as TextControl).BoxHeight / 2,
246
                        }
247
                    };
248
                    Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
249
                    Point middle = MathSet.getMiddlePoint((member as TextControl).StartPoint, endPointV);
250

    
251

    
252
                    DragThumb.RenderTransformOrigin = new Point(0.0, 0.0);
253
                    DragThumb.RenderTransform = new RotateTransform()
254
                    {
255
                        Angle = (member as TextControl).Angle,
256
                    };
257

    
258
                    AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0);
259
                    AdornerBorder.RenderTransform = new RotateTransform()
260
                    {
261
                        Angle = (member as TextControl).Angle,
262
                    };
263
                    Observable.FromEventPattern(((TextControl)member), "PropertyChanged").Subscribe(a =>
264
                    {
265
                        TextCompensation = true;
266
                        BorderUpdate();
267
                        ((TextControl)member).Base_TextBlock.TextDecorations = ((TextControl)member).UnderLine;
268
                    });
269
                    Observable.FromEventPattern(((TextControl)member).Base_TextBox, "LostFocus").Subscribe(a =>
270
                    {
271
                        TextCompensation = false;
272
                        BorderUpdate();
273
                        if ((a.Sender as TextBox).Text == "") //보류
274
                        {
275
                            this.ContainerContent.Children.Remove(member);
276
                            this.Visibility = Visibility.Collapsed;
277
                        }
278
                    });
279
                    break;
280
                default:
281
                    break;
282
                    #endregion
283
            }
284
            if (member.GetType().Name == "TextControl")
285
            {
286
                TextControl content = ((TextControl)member);
287
                content.StartPoint = new Point(Canvas.GetLeft(content), Canvas.GetTop(content));
288
                content.EndPoint = content.StartPoint;
289

    
290
                //RegistryPoint(AllControl.PointSet);
291
            }
292
            else
293
            {
294
                RegistryPoint(member);
295
            }
296
            BorderUpdate();
297
        }
298

    
299
        private void ViewBoxRotate(UIElement member)
300
        {
301
            AdornerBorder.RenderTransformOrigin = new Point(0.5, 0.5);
302
            DragThumb.RenderTransformOrigin = new Point(0.5, 0.5);
303
            AdornerBorder.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).Angle };
304
            DragThumb.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).Angle };
305
        }
306
        public void SetAdornerMember(List<CommentUserInfo> members)
307
        {
308
            foreach (var member in members)
309
            {
310
                switch (member.GetType().Name)
311
                {
312
                    #region 컨트롤 조건
313
                    case "LineControl": //Angle추가 안했음
314
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.SingleLine, ThumbList = new List<Thumb>() });
315
                        break;
316
                    case "ImgControl": //Angle추가 안했음
317
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ImgControl, ThumbList = new List<Thumb>() });
318
                        break;
319
                    //case "SymControl": //Angle추가 안했음
320
                    //    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = MarkupType.Viewbox, ThumbList = new List<Thumb>() });
321
                    //    break;
322
                    //case "SymControlN": //Angle추가 안했음
323
                    //    MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = MarkupType.Viewbox, ThumbList = new List<Thumb>() });
324
                    //    ViewBoxRotate(member);
325
                    //    break;
326
                    case "ArrowControl":
327
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowLine, ThumbList = new List<Thumb>() });
328
                        break;
329
                    case "PolygonControl": //Angle추가 안했음
330
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.PolygonControl, ThumbList = new List<Thumb>() });
331
                        break;
332
                    case "ArrowTextControl":
333
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowTextControl, ThumbList = new List<Thumb>() });
334
                        (member as ArrowTextControl).Base_TextBox.IsHitTestVisible = false;
335
                        break;
336
                    case "ArcControl":
337
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArcLine, ThumbList = new List<Thumb>() });
338
                        break;
339
                    case "DateControl":
340
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Date, ThumbList = new List<Thumb>() });
341
                        break;
342
                    case "ArrowControl_Multi":
343
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowMultiLine, ThumbList = new List<Thumb>() });
344
                        break;
345
                    case "RectangleControl":
346
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Rectangle, ThumbList = new List<Thumb>() });
347
                        break;
348
                    case "TriControl":
349
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Triangle, ThumbList = new List<Thumb>() });
350
                        break;
351
                    case "CircleControl":
352
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Circle, ThumbList = new List<Thumb>() });
353
                        break;
354
                    case "CloudControl":
355
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.PolygonCloud, ThumbList = new List<Thumb>() });
356
                        break;
357
                    case "RectCloudControl":
358
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.RectCloud, ThumbList = new List<Thumb>() });
359
                        break;
360
                        //강인구 추가
361
                    case "SignControl":
362
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Sign, ThumbList = new List<Thumb>() });
363
                        break;
364
                    case "SymControl":
365
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Symbol, ThumbList = new List<Thumb>() });
366
                        break;
367
                    case "SymControlN":
368
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Stamp, ThumbList = new List<Thumb>() });
369
                        break;
370
                    case "InkControl": //Angle추가 안했음
371
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Ink, ThumbList = new List<Thumb>() });
372
                        break;
373
                    case "TextControl":
374
                        MemberSet.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.TextControl, ThumbList = new List<Thumb>() });
375
                        Observable.FromEventPattern(((TextControl)member), "PropertyChanged").Subscribe(a =>
376
                        {
377
                            BorderUpdate();
378
                            try
379
                            {
380
                                ((TextControl)member).Base_TextBlock.TextDecorations = ((TextControl)member).UnderLine; //확인 0403
381
                            }
382
                            catch (Exception)
383
                            {
384

    
385
                            }
386

    
387
                        });
388
                        Observable.FromEventPattern(((TextControl)member).Base_TextBox, "SelectionChanged").Subscribe(a =>
389
                        {
390
                            BorderUpdate();
391
                        });
392
                        break;
393
                    default:
394
                        break;
395
                        #endregion
396
                }
397
                if (member.GetType().Name == "TextControl")
398
                {
399
                    //강인구 추가
400
                    TextControl content = ((TextControl)member);
401
                    content.StartPoint = new Point(Canvas.GetLeft(content), Canvas.GetTop(content));
402
                    content.EndPoint = content.StartPoint;
403
                    //RegistryPoint(AllControl.PointSet);
404
                }
405
                else
406
                {
407
                    RegistryPoint(member, members.Count);
408
                }
409
            }
410

    
411
            BorderUpdate();
412
        }
413

    
414
        /// <summary>
415
        /// Border 를 갱신
416
        /// </summary>
417
        public void BorderUpdate()
418
        {
419
            AdornerBorder.MinWidth = 10;
420
            AdornerBorder.MinHeight = 10;
421

    
422
            double minX = double.MaxValue;
423
            double minY = double.MaxValue;
424
            double maxX = double.MinValue;
425
            double maxY = double.MinValue;
426

    
427
            if (MemberSet.Count == 1)
428
            {
429
                if (MemberSet.First().DrawingData.GetType().Name == "TextControl")
430
                {
431
                    if ((MemberSet.First().DrawingData as TextControl).Angle != 0)
432
                    {
433
                        ///TODO: 원점 설정
434
                        trRotate.Angle = (MemberSet.First().DrawingData as TextControl).Angle;
435
                        trRotateThumb.Angle = (MemberSet.First().DrawingData as TextControl).Angle;
436
                    }
437
                    else
438
                    {
439
                        trRotate.Angle = 0;
440
                        trRotateThumb.Angle = 0;
441
                    }
442
                }
443
            }
444
            foreach (var item in MemberSet)
445
            {
446
                UIElement currentControl = (item as AdornerMember).DrawingData;
447
                if (item.DrawingData.GetType().Name == "TextControl")
448
                {
449
                    double textControlWidth;
450
                    double textControlHeight;
451
                    if (((currentControl as TextControl).Base_TextBox.ActualWidth) == 0)
452
                    {
453
                        textControlWidth = ((currentControl as TextControl).Base_TextBlock.ActualWidth);
454
                        textControlHeight = ((currentControl as TextControl).Base_TextBlock.ActualHeight);
455
                    }
456
                    else
457
                    {
458
                        textControlWidth = ((currentControl as TextControl).Base_TextBox.ActualWidth);
459
                        textControlHeight = ((currentControl as TextControl).Base_TextBox.ActualHeight);
460
                    }
461
                    //Border 사이즈 불필요
462

    
463
                    //if ((currentControl as TextControl).LineSize.Left == 0)
464
                    //{
465
                    //    if (TextCompensation)
466
                    //    {
467

    
468
                    //        textControlWidth += 1;
469
                    //        textControlHeight += 1;
470
                    //    }
471
                    //    else
472
                    //    {
473
                    //        textControlWidth += 3;
474
                    //        textControlHeight += 3;
475
                    //    }
476
                    //}
477
                    //else
478
                    //{
479
                    //    if (TextCompensation)
480
                    //    {
481

    
482
                    //        textControlWidth += 1;
483
                    //        textControlHeight += 1;
484
                    //    }
485
                    //    else
486
                    //    {
487
                    //        textControlWidth += 8;
488
                    //        textControlHeight += 8;
489
                    //    }
490
                    //}
491
                    if ((currentControl as TextControl).EndPoint.X < minX)
492
                    {
493
                        minX = (currentControl as TextControl).EndPoint.X;
494
                    }
495
                    if ((currentControl as TextControl).EndPoint.Y < minY)
496
                    {
497
                        minY = (currentControl as TextControl).EndPoint.Y;
498
                    }
499
                    if (textControlWidth + (currentControl as TextControl).EndPoint.X > maxX)
500
                    {
501
                        maxX = textControlWidth + (currentControl as TextControl).EndPoint.X;
502
                    }
503
                    if (textControlHeight + (currentControl as TextControl).EndPoint.Y > maxY)
504
                    {
505
                        maxY = textControlHeight + (currentControl as TextControl).EndPoint.Y;
506
                    }
507
                }
508
                else if ((currentControl as IViewBox) != null)
509
                {
510
                    IViewBox instance = currentControl as IViewBox;
511
                    List<Point> am = (currentControl as IPath).PointSet;
512
                    List<double> xSet = am.Select(p => p.X).ToList();
513
                    List<double> ySet = am.Select(p => p.Y).ToList();
514
                    if (xSet.Min() < minX) minX = xSet.Min();
515
                    if (ySet.Min() < minY) minY = ySet.Min();
516
                    if (xSet.Max() > maxX) maxX = xSet.Max();
517
                    if (ySet.Max() > maxY) maxY = ySet.Max();
518
                }
519
                else if ((currentControl as IPath).PathData == null)
520
                {
521
                    Rect rt = new Rect
522
                    {
523
                        X = (currentControl as IPath).StartPoint.X,
524
                        Y = (currentControl as IPath).StartPoint.Y,
525
                        //Width = (currentControl as IPath).EndPoint.X - (currentControl as IPath).StartPoint.X,
526
                        //Height = (currentControl as IPath).EndPoint.Y - (currentControl as IPath).StartPoint.Y
527
                        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),
528
                        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),
529
                    };
530
                    if (rt.Left < minX) minX = rt.Left;
531
                    if (rt.Top < minY) minY = rt.Top;
532
                    if (rt.Right > maxX) maxX = rt.Right;
533
                    if (rt.Bottom > maxY) maxY = rt.Bottom;
534
                }
535
                else if ((currentControl as IPath) == null)
536
                {
537
                    Rect rt = new Rect
538
                    {
539
                        X = (currentControl as IPath).StartPoint.X,
540
                        Y = (currentControl as IPath).StartPoint.Y,
541
                        Width = (currentControl as IPath).EndPoint.X - (currentControl as IPath).StartPoint.X,
542
                        Height = (currentControl as IPath).EndPoint.Y - (currentControl as IPath).StartPoint.Y
543
                    };
544
                    if (rt.Left < minX) minX = rt.Left;
545
                    if (rt.Top < minY) minY = rt.Top;
546
                    if (rt.Right > maxX) maxX = rt.Right;
547
                    if (rt.Bottom > maxY) maxY = rt.Bottom;
548
                }
549
                else if ((currentControl as CircleControl) != null)
550
                {
551
                    //Rect rt = new Rect
552
                    //{
553
                    //    X = (currentControl as IPath).StartPoint.X,
554
                    //    Y = (currentControl as IPath).StartPoint.Y,
555
                    //    Width = (currentControl as IPath).EndPoint.X - (currentControl as IPath).StartPoint.X,
556
                    //    Height = (currentControl as IPath).EndPoint.Y - (currentControl as IPath).StartPoint.Y
557
                    //};
558

    
559
                    //Rect rt = new Rect((currentControl as IPath).StartPoint, (currentControl as IPath).EndPoint);
560
                    //if (rt.Left < minX) minX = rt.Left;
561
                    //if (rt.Top < minY) minY = rt.Top;
562
                    //if (rt.Right > maxX) maxX = rt.Right;
563
                    //if (rt.Bottom > maxY) maxY = rt.Bottom;
564

    
565
                    List<Point> am = (currentControl as IPath).PointSet;
566
                    List<double> xSet = am.Select(p => p.X).ToList();
567
                    List<double> ySet = am.Select(p => p.Y).ToList();
568
                    if (xSet.Min() < minX) minX = xSet.Min();
569
                    if (ySet.Min() < minY) minY = ySet.Min();
570
                    if (xSet.Max() > maxX) maxX = xSet.Max();
571
                    if (ySet.Max() > maxY) maxY = ySet.Max();
572
                }
573
                else
574
                {
575
                    if ((currentControl as IPath).PathData.Bounds.Left < minX) minX = (currentControl as IPath).PathData.Bounds.Left;
576
                    if ((currentControl as IPath).PathData.Bounds.Top < minY) minY = (currentControl as IPath).PathData.Bounds.Top;
577
                    if ((currentControl as IPath).PathData.Bounds.Right > maxX) maxX = (currentControl as IPath).PathData.Bounds.Right;
578
                    if ((currentControl as IPath).PathData.Bounds.Bottom > maxY) maxY = (currentControl as IPath).PathData.Bounds.Bottom;
579
                }
580
            }
581

    
582
            Rect ac = new Rect(minX, minY, maxX - minX, maxY - minY);
583
            bool addWidthSize = false;
584
            bool addHeightSize = false;
585
            if (ac.Width <= 10)
586
            {
587
                ac.Width += 10;
588
                addWidthSize = true;
589
            }
590
            if (ac.Height <= 10)
591
            {
592
                ac.Height += 10;
593
                addHeightSize = true;
594
            }
595
            BorderSize = ac;
596
            AdornerBorder.MinWidth = 10;
597
            AdornerBorder.MinHeight = 10;
598
            AdornerBorder.Width = ac.Width;
599
            AdornerBorder.Height = ac.Height;
600
            Canvas.SetLeft(AdornerBorder, minX);
601
            Canvas.SetTop(AdornerBorder, minY);
602

    
603
            DragThumb.Width = ac.Width;
604
            DragThumb.Height = ac.Height;
605

    
606
            DragThumb.MinWidth = 10;
607
            DragThumb.MinHeight = 10;
608
            if (addWidthSize)
609
            {
610
                Canvas.SetLeft(DragThumb, minX - 5);
611
            }
612
            else
613
            {
614
                Canvas.SetLeft(DragThumb, minX);
615
            }
616

    
617
            if (addHeightSize)
618
            {
619
                Canvas.SetTop(DragThumb, minY - 5);
620
            }
621
            else
622
            {
623
                Canvas.SetTop(DragThumb, minY);
624
            }
625
        }
626
        /// <summary>
627
        /// UIElement 해제
628
        /// </summary>
629
        public void unRegister()
630
        {
631
            foreach (var item in this.ContainerContent.Children)
632
            {
633
                if (item is MarkupToPDF.Common.CommentUserInfo)
634
                {
635
                    (item as MarkupToPDF.Common.CommentUserInfo).IsHitTestVisible = true;
636
                }
637
            }
638
            this.ContainerContent.Children.Clear();
639
        }
640
        /// <summary>
641
        /// 각 포인트들을 등록합니다.
642
        /// </summary>
643
        /// <param name="pointset">Drawing Point</param>
644
        public void RegistryPoint(CommentUserInfo member, int cnt = 1)
645
        {
646
            int count = 0;
647
            double Minx = 100000000;
648
            double Miny = 100000000;
649
            List<Point> list = (member as IPath).PointSet;
650
            if (member.GetType().Name == "InkControl")
651
            {
652
                list.Clear();
653
                list.Add(new Point((member as IPath).PathData.Bounds.X, (member as IPath).PathData.Bounds.Y));
654
                list.Add(new Point((member as IPath).PathData.Bounds.Left, (member as IPath).PathData.Bounds.Bottom));
655
                list.Add(new Point((member as IPath).PathData.Bounds.Right, (member as IPath).PathData.Bounds.Bottom));
656
                list.Add(new Point((member as IPath).PathData.Bounds.Right, (member as IPath).PathData.Bounds.Top));
657
            }
658
            ControlType markT = MemberSet.Where(p => p.DrawingData == member).First().Drawingtype;
659
            foreach (var ax in list)
660
            {
661
                Minx = (ax.X < Minx) ? ax.X : Minx;
662
                Miny = (ax.Y < Miny) ? ax.Y : Miny;
663
            }
664
            for (int i = 0; i < list.Count(); i++)
665
            {
666
                Thumb tm = new Thumb
667
                {
668
                    //Name = String.Format("thumb{0}_{1}", count, member.GetType().Name.ToString()),
669
                    Style = (Style)this.LayoutRoot.Resources["ThumbResizeStyle"],
670
                };
671

    
672
                MemberSet.Last().ThumbList.Add(tm);
673

    
674
                if (markT == ControlType.ArcLine && list[i] == (member as ArcControl).MidPoint)
675
                {
676
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbArcControlStyle"];
677
                }
678
                if (member.GetType().Name == "ArrowTextControl" && i == 1)
679
                {
680
                    //if (MemberSet.Count()<=1)
681
                    //{
682
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbArcControlStyle"];
683
                    List<Point> ps = new List<Point>();
684

    
685
                    if ((MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl != null)
686
                    {
687
                        var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
688

    
689
                      
690
                        switch (Math.Abs(temp.Angle).ToString())
691
                        {
692
                            case "90":
693
                                {
694
                                    ps.Clear();
695
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
696
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); // 위 중간
697
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); // 위 오른쪽
698

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

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

    
705
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 중간
706
                                }
707
                                break;
708
                            case "270":
709
                                {
710
                                    ps.Clear();
711
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
712
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); // 위 중간
713
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); // 위 오른쪽
714

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

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

    
721
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 중간
722
                                }
723
                                break;
724
                            default:
725
                                {
726
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
727
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
728
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
729
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
730
                                }
731
                                break;
732
                        }
733

    
734
                        ArrowTextControl instance = (member as ArrowTextControl);
735
                        if (instance.isTrans)
736
                        {
737
                            //var endP = MathSet.getNearPoint(ps, temp.MidPoint);
738
                            //var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
739
                            //list[count] = tempP;
740
                            list[count] = temp.MidPoint;
741
                        }
742
                        else
743
                        {
744
                            if (temp.isFixed)
745
                            {
746
                                var endP = MathSet.getNearPoint(ps, temp.MidPoint);
747
                                var testP = endP;
748
                                if (ps[0] == endP) //상단
749
                                {
750
                                    testP = new Point(endP.X, endP.Y - 50);
751
                                }
752
                                else if (ps[1] == endP) //하단
753
                                {
754
                                    testP = new Point(endP.X, endP.Y + 50);
755
                                }
756
                                else if (ps[2] == endP) //좌단
757
                                {
758
                                    testP = new Point(endP.X - 50, endP.Y);
759
                                }
760
                                else if (ps[3] == endP) //우단
761
                                {
762
                                    testP = new Point(endP.X + 50, endP.Y);
763
                                }
764
                                list[count] = testP;
765
                            }
766
                            else
767
                            {
768
                                var endP = MathSet.getNearPoint(ps, instance.MidPoint);
769
                                list[count] = MathSet.getMiddlePoint(instance.StartPoint, endP);
770
                            }
771
                        }
772
                    }
773
                }
774
                if (member.GetType().Name == "ArrowTextControl" && list[i] == list.Last())
775
                {
776
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbTextStyle"];
777
                    tm.Width = (member as ArrowTextControl).BoxWidth;
778
                    tm.Height = (member as ArrowTextControl).BoxHeight;
779
                    var angle = (member as ArrowTextControl).Angle;
780
                    if (Math.Abs(angle).ToString() == "90")
781
                    {
782
                        tm.RenderTransformOrigin = new Point(0, 0);
783
                        tm.RenderTransform = new RotateTransform { Angle = 270 };
784
                    }
785
                    else if (Math.Abs(angle).ToString() == "270")
786
                    {
787
                        tm.RenderTransformOrigin = new Point(0, 0);
788
                        tm.RenderTransform = new RotateTransform { Angle = 90 };
789

    
790
                    }
791
                    else
792
                    {
793
                        tm.RenderTransformOrigin = new Point(0.5, 0.5);
794
                        tm.RenderTransform = new RotateTransform()
795
                        {
796
                            Angle = angle,
797
                        };
798
                    }
799
                }
800
                //if (markT == MarkupType.Polygon || markT == MarkupType.Cloud)
801
                //{
802
                //    tm.MouseMove += new MouseEventHandler(resize_MouseMove);
803
                //    tm.DragStarted += new DragStartedEventHandler(tm_DragStarted);
804
                //    tm.DragCompleted += new DragCompletedEventHandler(tm_DragCompleted);
805
                //}
806
                //else
807
                //{
808
                //    tm.MouseMove += new MouseEventHandler(resize_MouseMove);
809
                //    tm.DragStarted += new DragStartedEventHandler(tm_DragStarted);
810
                //    tm.DragCompleted += new DragCompletedEventHandler(tm_DragCompleted);
811
                //}
812

    
813
                if (member.GetType().Name == "CloudControl")
814
                {
815
                    if (i == list.Count() - 1)
816
                    {
817
                        tm.Visibility = System.Windows.Visibility.Collapsed;
818
                    }
819
                }
820
                if (member.GetType().Name == "PolygonControl")
821
                {
822
                    if (i == list.Count() - 1)
823
                    {
824
                        if ((member as PolygonControl).ControlType == ControlType.ChainLine)
825
                        {
826

    
827
                        }
828
                        else
829
                        {
830
                            tm.Visibility = System.Windows.Visibility.Collapsed;
831
                        }
832
                    }
833
                    if ((member as PolygonControl).ControlType == ControlType.Ink)
834
                    {
835
                        tm.Visibility = System.Windows.Visibility.Collapsed;
836
                    }
837
                }
838

    
839
                //강인구 텀브 없애기 보류
840
                //if(cnt > 1)
841
                //{
842
                //    tm.Visibility = System.Windows.Visibility.Collapsed;
843
                //}
844

    
845

    
846

    
847
                //if (member.GetType().Name == "InkControl")
848
                //{
849
                //    tm.Visibility = System.Windows.Visibility.Collapsed;
850
                //}
851

    
852
                this.ContainerContent.Children.Add(tm);
853
                Canvas.SetLeft(tm, list[count].X);
854
                Canvas.SetTop(tm, list[count].Y);
855
                if (member.GetType().Name == "ArrowTextControl" && list[i] == (member as ArrowTextControl).MidPoint)
856
                {
857
                    Canvas.SetZIndex(tm, 95);
858
                }
859
                else
860
                {
861
                    Canvas.SetZIndex(tm, 99);
862
                }
863

    
864
                tm.DragStarted += new DragStartedEventHandler(tm_DragStarted);
865
                tm.DragCompleted += new DragCompletedEventHandler(tm_DragCompleted);
866
                tm.DragDelta += ResizeTm_DragDelta;
867
                tm.MouseMove += new MouseEventHandler(resize_MouseMove);
868
                count++;
869
            }
870
        }
871

    
872
        private void ResizeTm_DragDelta(object sender, DragDeltaEventArgs e)
873
        {
874
            //한개 이상 선택 시 Resize 금지
875
            if (MemberSet.Count > 1)
876
                return;
877
            if (reSizePoint != new Point(0, 0))
878
            {
879
                Thumb thumb = sender as Thumb;
880

    
881
                Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) +
882
                              e.HorizontalChange);
883
                Canvas.SetTop(thumb, Canvas.GetTop(thumb) +
884
                                        e.VerticalChange);
885

    
886
                Point setPoint = new Point(Canvas.GetLeft(thumb), Canvas.GetTop(thumb));
887

    
888

    
889
                //if (this.isDragging && MemberSet.Count <= 1)
890
                //if (thumb.IsDragging && MemberSet.Count <= 1 && DraggerThumb == thumb)
891
                //if (DraggerThumb == thumb)
892
                //{
893
                //Point setPoint = reSizePoint;
894
                //Canvas.SetLeft(thumb, setPoint.X);
895
                //Canvas.SetTop(thumb, setPoint.Y);
896
                AdornerMember control = (from userThumb in MemberSet
897
                                         where userThumb.ThumbList.Contains(thumb)
898
                                         select userThumb).FirstOrDefault();
899
                Point nearPoint = new Point(0, 0);
900
                IPath AllControl = control.DrawingData as IPath;
901
                if (ControlType.TextControl != control.Drawingtype)
902
                {
903

    
904
                    var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
905
                    List<Point> ps = new List<Point>();
906

    
907
                    nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
908
                    //switch (Math.Abs(temp.Angle).ToString())
909
                    //{
910

    
911
                    //    case "90":
912
                    //        {
913
                    //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
914
                    //        }
915
                    //        break;
916
                    //    case "270":
917
                    //        {
918
                    //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
919
                    //        }
920
                    //        break;
921
                    //    default:
922
                    //        {
923
                    //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
924
                    //        }
925
                    //        break;
926
                    //}
927

    
928
                }
929
                for (int i = 0; i < (control.DrawingData as IPath).PointSet.Count; i++)
930
                {
931
                    switch (control.Drawingtype)
932
                    {
933
                        #region Arc + Line
934
                        case ControlType.ArrowMultiLine:
935
                        case ControlType.ArcLine:
936
                        case ControlType.SingleLine:
937
                        case ControlType.Triangle:
938
                            if (nearPoint.Equals(AllControl.PointSet[i]))
939
                            {
940
                                AllControl.PointSet[i] = setPoint;
941
                                AllControl.updateControl();
942
                                DynamicThumbUpdate(control);
943
                                BorderUpdate();
944

    
945
                                //if (control.DrawingData.GetType().Name == "ArrowTextControl")
946
                                //{
947
                                //    Thumb tm = control.ThumbList.Last();
948
                                //    //Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width / 2));
949
                                //    //Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height / 2));
950
                                //    Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width));
951
                                //    Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height));
952
                                //}
953
                            }
954
                            break;
955
                        #endregion
956
                        #region Shape
957
                        //case ControlType.PolygonCloud:
958
                        case ControlType.RectCloud:
959
                        case ControlType.Rectangle:
960
                            if (nearPoint.Equals(AllControl.PointSet[i]))
961
                            {
962
                                AllControl.PointSet[i] = setPoint;
963
                                var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
964
                                var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
965
                                var NextP = (i + 1) % AllControl.PointSet.Count();
966

    
967
                                var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
968

    
969
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
970
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
971
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
972
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
973
                                    [ReverseP].Y
974
                                    + PreviousV.Y * l);
975

    
976
                                var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
977
                                l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
978
                                    [i].Y - AllControl.PointSet[ReverseP].Y);
979
                                AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
980
                                    NextV.Y * l);
981
                                AllControl.updateControl();
982
                                DynamicThumbUpdate(control);
983
                                BorderUpdate();
984
                            }
985
                            break;
986
                        #endregion
987
                        #region Polygon
988
                        case ControlType.PolygonControl:
989
                            if (nearPoint.Equals(AllControl.PointSet[i]))
990
                            {
991
                                AllControl.PointSet[i] = setPoint;
992
                                AllControl.updateControl();
993
                                BorderUpdate();
994
                            }
995
                            break;
996
                        #endregion
997
                        #region Cicle
998
                        case ControlType.Circle:
999
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1000
                            {
1001
                                AllControl.PointSet[i] = setPoint;
1002
                                List<Point> newPointSet = new List<Point> { };
1003
                                Point middle = new Point(AllControl.PathData.Bounds.X + AllControl.PathData.Bounds.Width * 0.5,
1004
                                    AllControl.PathData.Bounds.Y +
1005
                                    AllControl.PathData.Bounds.Height * 0.5);
1006
                                foreach (Point pt in AllControl.PointSet)
1007
                                {
1008
                                    newPointSet.Add(pt);
1009
                                }
1010
                                var ReverseP = (i + newPointSet.Count() / 2) % newPointSet.Count();
1011
                                var PreviousP = (i + (newPointSet.Count() - 1)) % newPointSet.Count();
1012
                                var NextP = (i + 1) % newPointSet.Count();
1013
                                var distance = MathSet.DistanceTo(newPointSet[ReverseP], newPointSet[i]);
1014
                                var PreviousV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[PreviousP]);
1015
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, newPointSet[i].X - newPointSet[ReverseP].X,
1016
                                    newPointSet[i].Y - newPointSet[ReverseP].Y);
1017
                                newPointSet[PreviousP] = new Point(newPointSet[ReverseP].X + PreviousV.X * l, newPointSet[ReverseP].Y
1018
                                    + PreviousV.Y * l);
1019

    
1020
                                var NextV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[NextP]);
1021
                                l = MathSet.DotProduct(NextV.X, NextV.Y, newPointSet[i].X - newPointSet[ReverseP].X, newPointSet[i].Y
1022
                                    - newPointSet[ReverseP].Y);
1023
                                newPointSet[NextP] = new Point(newPointSet[ReverseP].X + NextV.X * l, newPointSet[ReverseP].Y + NextV.Y * l);
1024

    
1025
                                AllControl.PointSet = newPointSet;
1026
                                DynamicThumbUpdate(control);
1027
                                AllControl.updateControl();
1028
                                BorderUpdate();
1029
                            }
1030
                            break;
1031
                        #endregion
1032
                        #region ArrowText
1033
                        case ControlType.ArrowTextControl:
1034
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1035
                            {
1036
                                AllControl.PointSet[i] = setPoint;
1037
                                AllControl.updateControl();
1038

    
1039
                                DynamicThumbUpdate(control);
1040
                                BorderUpdate();
1041
                                
1042
                                //if (control.DrawingData.GetType().Name == "ArrowTextControl")
1043
                                //{
1044
                                //    Thumb tm = control.ThumbList.Last();
1045
                                //    //Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width / 2));
1046
                                //    //Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height / 2));
1047
                                //    Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width));
1048
                                //    Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height));
1049
                                //}
1050
                            }
1051
                            break;
1052
                        #endregion
1053
                        #region Text
1054
                        case ControlType.TextControl:
1055
                            break;
1056
                        #endregion
1057
                        #region Image
1058
                        case ControlType.ImgControl:
1059
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1060
                            {
1061
                                AllControl.PointSet[i] = setPoint;
1062
                                var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
1063
                                var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
1064
                                var NextP = (i + 1) % AllControl.PointSet.Count();
1065

    
1066
                                var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
1067

    
1068
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1069
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1070
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1071
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1072
                                    [ReverseP].Y
1073
                                    + PreviousV.Y * l);
1074

    
1075
                                var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
1076
                                l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
1077
                                    [i].Y - AllControl.PointSet[ReverseP].Y);
1078
                                AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
1079
                                    NextV.Y * l);
1080
                                AllControl.updateControl();
1081
                                DynamicThumbUpdate(control);
1082
                                BorderUpdate();
1083
                            }
1084
                            break;
1085
                        #endregion
1086
						//강인구 추가
1087
                        #region Sign
1088
                        case ControlType.Sign:
1089
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1090
                            {
1091
                                AllControl.PointSet[i] = setPoint;
1092
                                var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
1093
                                var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
1094
                                var NextP = (i + 1) % AllControl.PointSet.Count();
1095

    
1096
                                var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
1097

    
1098
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1099
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1100
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1101
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1102
                                    [ReverseP].Y
1103
                                    + PreviousV.Y * l);
1104

    
1105
                                var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
1106
                                l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
1107
                                    [i].Y - AllControl.PointSet[ReverseP].Y);
1108
                                AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
1109
                                    NextV.Y * l);
1110
                                AllControl.updateControl();
1111
                                DynamicThumbUpdate(control);
1112
                                BorderUpdate();
1113
                            }
1114
                            break;
1115
                        #endregion
1116
                        #region Cloud
1117
                        case ControlType.PolygonCloud:
1118
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1119
                            {
1120
                                AllControl.PointSet[i] = setPoint;
1121
                                AllControl.updateControl();
1122
                                ((ICloudControl)AllControl).DrawingCloud();
1123
                                BorderUpdate();
1124
                            }
1125
                            break;
1126
                        #endregion
1127
                        #region SymBol
1128
                        case ControlType.Symbol:
1129
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1130
                            {
1131
                                AllControl.PointSet[i] = setPoint;
1132
                                var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
1133
                                var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
1134
                                var NextP = (i + 1) % AllControl.PointSet.Count();
1135

    
1136
                                var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
1137

    
1138
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1139
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1140
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1141
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1142
                                    [ReverseP].Y
1143
                                    + PreviousV.Y * l);
1144

    
1145
                                var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
1146
                                l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
1147
                                    [i].Y - AllControl.PointSet[ReverseP].Y);
1148
                                AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
1149
                                    NextV.Y * l);
1150
                                AllControl.updateControl();
1151
                                DynamicThumbUpdate(control);
1152
                                BorderUpdate();
1153
                            }
1154
                            break;
1155
                        case ControlType.Stamp:
1156
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1157
                            {
1158
                                AllControl.PointSet[i] = setPoint;
1159
                                var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
1160
                                var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
1161
                                var NextP = (i + 1) % AllControl.PointSet.Count();
1162

    
1163
                                var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
1164

    
1165
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1166
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1167
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1168
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1169
                                    [ReverseP].Y
1170
                                    + PreviousV.Y * l);
1171

    
1172
                                var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
1173
                                l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
1174
                                    [i].Y - AllControl.PointSet[ReverseP].Y);
1175
                                AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
1176
                                    NextV.Y * l);
1177
                                AllControl.updateControl();
1178
                                DynamicThumbUpdate(control);
1179
                                BorderUpdate();
1180
                            }
1181
                            break;
1182
                        case ControlType.Date:
1183
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1184
                            {
1185
                                AllControl.PointSet[i] = setPoint;
1186
                                var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
1187
                                var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
1188
                                var NextP = (i + 1) % AllControl.PointSet.Count();
1189

    
1190
                                var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
1191

    
1192
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1193
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1194
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1195
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1196
                                    [ReverseP].Y
1197
                                    + PreviousV.Y * l);
1198

    
1199
                                var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
1200
                                l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
1201
                                    [i].Y - AllControl.PointSet[ReverseP].Y);
1202
                                AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
1203
                                    NextV.Y * l);
1204
                                AllControl.updateControl();
1205
                                DynamicThumbUpdate(control);
1206
                                BorderUpdate();
1207
                            }
1208
                            break;
1209
                        //case MarkupType.Viewbox:
1210
                        //    if (nearPoint.Equals(AllControl.PointSet[i]))
1211
                        //    {
1212
                        //        AllControl.PointSet[i] = setPoint;
1213
                        //        var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
1214
                        //        var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
1215
                        //        var NextP = (i + 1) % AllControl.PointSet.Count();
1216

    
1217
                        //        var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
1218

    
1219
                        //        var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1220
                        //        var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1221
                        //            AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1222
                        //        AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1223
                        //            [ReverseP].Y
1224
                        //            + PreviousV.Y * l);
1225

    
1226
                        //        var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
1227
                        //        l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
1228
                        //            [i].Y - AllControl.PointSet[ReverseP].Y);
1229
                        //        AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
1230
                        //            NextV.Y * l);
1231
                        //        AllControl.updateControl();
1232
                        //        DynamicThumbUpdate(control);
1233
                        //        BorderUpdate();
1234
                        //    }
1235
                        //    break;
1236
                        #endregion
1237
                        #region Ink
1238
                        case ControlType.Ink:
1239
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1240
                            {
1241
                                AllControl.PointSet[i] = setPoint;
1242
                                AllControl.updateControl();
1243
                                BorderUpdate();
1244
                            }
1245
                            break;
1246
                        #endregion
1247
                        default:
1248
                            break;
1249
                    }
1250
                }
1251
            }
1252
            //}
1253
        }
1254

    
1255

    
1256

    
1257
        #endregion
1258
        #region 이벤트
1259

    
1260
        void tm_DragCompleted(object sender, DragCompletedEventArgs e)
1261
        {
1262
            this.isDragging = false;
1263
            DraggerThumb = null;
1264

    
1265
            Undo_Event();
1266
        }
1267

    
1268
        void tm_DragStarted(object sender, DragStartedEventArgs e)
1269
        {
1270
            this.DraggerThumb = sender as Thumb;
1271
            this.isDragging = true;
1272

    
1273
            if (ViewerDataModel.Instance.UndoDataList == null)
1274
            {
1275
                return;
1276
            }
1277

    
1278
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Event == Event_Type.Thumb)
1279
            {
1280
                return;
1281
            }
1282

    
1283
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List != null)
1284
            {
1285
                if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.Count > 0)
1286
                {
1287
                    if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.FirstOrDefault().PointSet != null)
1288
                    {
1289
                        return;
1290
                    }
1291
                }
1292
            }
1293

    
1294
            Undo_Event();
1295
        }
1296

    
1297
        private void rotate_MouseMove(object sender, MouseEventArgs e)
1298
        {
1299

    
1300
            //double LastRotateHorizontalValue = 0;
1301
            //double LastRotateVerticalValue = 0;
1302
            //double LastWidthValue = 0;
1303
            //double SetWidth = 0;
1304

    
1305

    
1306
            if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
1307
            {
1308
                if (LastRotateVerticalValue < e.GetPosition(this).X)
1309
                    IsTextAngle = true;
1310
                else
1311
                    IsTextAngle = false;
1312

    
1313
                System.Diagnostics.Debug.WriteLine("X축 : " + e.GetPosition(this).X + "LastRotateVerticalValue : " + LastRotateVerticalValue);
1314
                LastRotateVerticalValue = e.GetPosition(this).X;
1315
            }
1316
            else
1317
            {
1318
                System.Diagnostics.Debug.WriteLine("e.GetPosition(this).X : " + e.GetPosition(this).X);
1319
                System.Diagnostics.Debug.WriteLine("LastRotateHorizontalValue: " + LastRotateHorizontalValue);
1320

    
1321
                if (e.GetPosition(this).X > LastRotateHorizontalValue)
1322
                {
1323
                    RotateFlag = true;
1324
                }
1325
                else
1326
                {
1327
                    RotateFlag = false;
1328
                }
1329
                LastRotateHorizontalValue = e.GetPosition(this).X;
1330
            }
1331
        }
1332

    
1333
        private void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
1334
        {
1335
            DragThumb.Cursor = Cursors.SizeAll;
1336
            Thumb thumb = sender as Thumb;
1337
            MoveAdorner(e);
1338
        }
1339

    
1340
        public void MoveAdorner(DragDeltaEventArgs e)
1341
        {
1342
            Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
1343

    
1344
            Dispatcher.BeginInvoke((Action)(() =>
1345
            {
1346
                foreach (var item in MemberSet)
1347
                {
1348
                    #region 라인  & 아크
1349
                    if (item.Drawingtype == ControlType.SingleLine || item.Drawingtype == ControlType.ArcLine || item.Drawingtype == ControlType.ArrowMultiLine)
1350
                    {
1351
                        DynamicThumbUpdate(e, item);
1352
                    }
1353
                    #endregion
1354
                    #region 지시선화살표
1355
                    if (item.Drawingtype == ControlType.ArrowTextControl)
1356
                    {
1357
                        DynamicThumbUpdate(e, item);
1358
                    }
1359
                    #endregion
1360
                    //강인구 추가 Sign, check, Stamp
1361
                    #region 써클
1362
                    if (item.Drawingtype == ControlType.Circle || item.Drawingtype == ControlType.Sign || item.Drawingtype == ControlType.Symbol || item.Drawingtype == ControlType.Stamp)
1363
                    {
1364
                        DynamicThumbUpdate(e, item);
1365
                    }
1366
                    #endregion
1367
                    #region 쉐이프
1368
                    if (item.Drawingtype == ControlType.Rectangle || item.Drawingtype == ControlType.ImgControl || item.Drawingtype == ControlType.RectCloud || item.Drawingtype == ControlType.Triangle)
1369
                    {
1370
                        DynamicThumbUpdate(e, item);
1371
                    }
1372
                    #endregion
1373
                    #region 텍스트
1374
                    if (item.Drawingtype == ControlType.TextControl)
1375
                    {
1376
                        //Canvas.SetLeft((item.DrawingData as TextControl), Canvas.GetLeft((item.DrawingData as TextControl)) + e.HorizontalChange / 5);
1377
                        //Canvas.SetTop((item.DrawingData as TextControl), Canvas.GetTop((item.DrawingData as TextControl)) + e.VerticalChange / 5);
1378
                        //(item.DrawingData as TextControl).StartPoint = 
1379
                        //new Point(Canvas.GetLeft((item.DrawingData as TextControl)) + e.HorizontalChange / 5, Canvas.GetTop((item.DrawingData as TextControl)) + e.VerticalChange / 5);
1380
                        //(item.DrawingData as TextControl).EndPoint = (item.DrawingData as TextControl).StartPoint;
1381

    
1382
                        Point dx = MathSet.RotateAbout(new Point(0, 0), new Point(e.HorizontalChange, e.VerticalChange), trRotate.Angle);
1383
                        Canvas.SetLeft((item.DrawingData as TextControl), Canvas.GetLeft((item.DrawingData as TextControl)) + dx.X);
1384
                        Canvas.SetTop((item.DrawingData as TextControl), Canvas.GetTop((item.DrawingData as TextControl)) + dx.Y);
1385
                        (item.DrawingData as TextControl).StartPoint =
1386
                        new Point(Canvas.GetLeft((item.DrawingData as TextControl)) + e.HorizontalChange / 5, Canvas.GetTop((item.DrawingData as TextControl)) + e.VerticalChange / 5);
1387
                        (item.DrawingData as TextControl).EndPoint = (item.DrawingData as TextControl).StartPoint;
1388
                    }
1389
                    #endregion
1390
                    #region 날짜
1391
                    if (item.Drawingtype == ControlType.Date)
1392
                    {
1393
                        DynamicThumbUpdate(e, item);
1394
                        //Canvas.SetLeft((item.DrawingData as DateControl), Canvas.GetLeft((item.DrawingData as DateControl)) + e.HorizontalChange);
1395
                        //Canvas.SetTop((item.DrawingData as DateControl), Canvas.GetTop((item.DrawingData as DateControl)) + e.VerticalChange);
1396
                        //(item.DrawingData as DateControl).StartPoint = new Point(Canvas.GetLeft((item.DrawingData as DateControl))
1397
                        //                                         + e.HorizontalChange, Canvas.GetTop((item.DrawingData as DateControl)) + e.VerticalChange);
1398
                        //(item.DrawingData as DateControl).EndPoint = (item.DrawingData as DateControl).StartPoint;
1399
                        //MessageBox.Show("잠시 정확도를 위해 막아두었습니다!");
1400

    
1401

    
1402
                    }
1403
                    #endregion
1404
                    #region 클라우드
1405
                    if (item.Drawingtype == ControlType.PolygonCloud)
1406
                    {
1407
                        ICloudControl temp = ((ICloudControl)item.DrawingData);
1408
                        DynamicThumbUpdate(e, item);
1409
                        temp.DrawingCloud();
1410
                    }
1411
                    #endregion
1412
                    //#region 심볼
1413
                    //if (item.Drawingtype == MarkupType.Viewbox)
1414
                    //{
1415
                    //    DynamicThumbUpdate(e, item);
1416
                    //    BorderUpdate();
1417
                    //}
1418
                    //#endregion
1419
                    //#region 폴리곤확장
1420
                    //if (item.Drawingtype == MarkupType.PolygonEx)
1421
                    //{
1422
                    //    Point px = new Point(e.HorizontalChange, e.VerticalChange);
1423
                    //    List<StylusPointSet> StylusPointSet = (item.DrawingData as PolyControl).PointC;
1424
                    //    for (int i = 0; i < StylusPointSet.Count; i++)
1425
                    //    {
1426
                    //        List<Point> lstPoint = StylusPointSet[i].pointSet;
1427
                    //        for (int j = 0; j < lstPoint.Count; j++)
1428
                    //        {
1429
                    //            lstPoint[j] = new Point(lstPoint[j].X + px.X, lstPoint[j].Y + px.Y);
1430
                    //        }
1431
                    //    }
1432

    
1433
                    //    for (int i = 0; i < item.ThumbList.Count; i++)
1434
                    //    {
1435
                    //        Canvas.SetLeft(item.ThumbList[i], Canvas.GetLeft(item.ThumbList[i]) + px.X);
1436
                    //        Canvas.SetTop(item.ThumbList[i], Canvas.GetTop(item.ThumbList[i]) + px.Y);
1437
                    //    }
1438
                    //    (item.DrawingData as IPath).updateControl();
1439
                    //    BorderUpdate();
1440
                    //    //for (int i = 0; i < (item.DrawingData as PolyControl).PointC.Count(); i++)
1441
                    //    //{
1442
                    //    //    //(item.DrawingData as PolyControl).PointC[i] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as PolyControl).PointC[i]., dDeltaAngle);
1443
                    //    //    for (int j = 0; j < (item.DrawingData as PolyControl).PointC[i].pointSet.Count; j++)
1444
                    //    //    {
1445
                    //    //        (item.DrawingData as PolyControl).PointC[i].pointSet[j] = new Point { X = (item.DrawingData as PolyControl).PointC[i].pointSet[j].X + dx.X, Y = (item.DrawingData as PolyControl).PointC[i].pointSet[j].Y + dx.Y };
1446
                    //    //        Canvas.SetLeft(item.ThumbList[i], Canvas.GetLeft(item.ThumbList[i]) + dx.X);
1447
                    //    //        Canvas.SetTop(item.ThumbList[i], Canvas.GetTop(item.ThumbList[i]) + dx.Y);
1448
                    //    //    }
1449
                    //    //}
1450
                    //    //(item.DrawingData as IPath).updateControl();
1451
                    //}
1452
                    //#endregion
1453
                    #region 폴리곤
1454
                    if (item.Drawingtype == ControlType.PolygonControl)
1455
                    {
1456
                        DynamicThumbUpdate(e, item);
1457
                        BorderUpdate();
1458
                    }
1459
                    #endregion
1460
                    #region 잉크
1461
                    if (item.Drawingtype == ControlType.Ink)
1462
                    {
1463
                        //DynamicThumbUpdate(e, item);
1464
                        //BorderUpdate();
1465

    
1466
                        Point px = new Point(e.HorizontalChange, e.VerticalChange);
1467
                        List<StylusPointSet> StylusPointSet = (item.DrawingData as InkControl).PointC;
1468
                        for (int i = 0; i < StylusPointSet.Count; i++)
1469
                        {
1470
                            List<Point> lstPoint = StylusPointSet[i].pointSet;
1471
                            for (int j = 0; j < lstPoint.Count; j++)
1472
                            {
1473
                                lstPoint[j] = new Point(lstPoint[j].X + px.X, lstPoint[j].Y + px.Y);
1474
                            }
1475
                        }
1476

    
1477
                        for (int i = 0; i < item.ThumbList.Count; i++)
1478
                        {
1479
                            Canvas.SetLeft(item.ThumbList[i], Canvas.GetLeft(item.ThumbList[i]) + px.X);
1480
                            Canvas.SetTop(item.ThumbList[i], Canvas.GetTop(item.ThumbList[i]) + px.Y);
1481
                        }
1482
                        (item.DrawingData as IPath).updateControl();
1483
                        BorderUpdate();
1484

    
1485
                    }
1486
                    #endregion
1487
                    BorderUpdate();
1488
                }
1489
            }));
1490
        }
1491

    
1492
        public void DynamicThumbUpdate(DragDeltaEventArgs e, AdornerMember item)
1493
        {
1494
            var AllControl = item.DrawingData as IPath;
1495
            List<Point> point = AllControl.PointSet;
1496
            //for (int i = 0; i < AllControl.PointSet.Count(); i++)
1497
            for (int i = 0; i < item.ThumbList.Count(); i++)
1498
            {
1499

    
1500
                if (item.DrawingData.GetType().Name == "ArrowTextControl")
1501
                {
1502
                    Point dx = MathSet.RotateAbout(new Point(0, 0), new Point(e.HorizontalChange, e.VerticalChange), trRotate.Angle);
1503
                    AllControl.PointSet[i] = new Point { X = point[i].X + dx.X, Y = point[i].Y + dx.Y };
1504
                    AllControl.updateControl();
1505
                    Canvas.SetLeft(item.ThumbList[i], Canvas.GetLeft(item.ThumbList[i]) + dx.X);
1506
                    Canvas.SetTop(item.ThumbList[i], Canvas.GetTop(item.ThumbList[i]) + dx.Y);
1507

    
1508
                    Canvas.SetLeft(item.ThumbList.Last(), Canvas.GetLeft((item.DrawingData as ArrowTextControl).Base_TextBox));
1509
                    Canvas.SetTop(item.ThumbList.Last(), Canvas.GetTop((item.DrawingData as ArrowTextControl).Base_TextBox));
1510
                }
1511
                else
1512
                {
1513
                    Point dx = MathSet.RotateAbout(new Point(0, 0), new Point(e.HorizontalChange, e.VerticalChange), trRotate.Angle);
1514
                    AllControl.PointSet[i] = new Point { X = point[i].X + dx.X, Y = point[i].Y + dx.Y };
1515
                    AllControl.updateControl();
1516
                    Canvas.SetLeft(item.ThumbList[i], Canvas.GetLeft(item.ThumbList[i]) + dx.X);
1517
                    Canvas.SetTop(item.ThumbList[i], Canvas.GetTop(item.ThumbList[i]) + dx.Y);
1518
                }
1519
            }
1520
        }
1521

    
1522
        public void DynamicThumbUpdate(AdornerMember item)
1523
        {
1524
            var AllControl = item.DrawingData as IPath;
1525
            List<Point> point = AllControl.PointSet;
1526

    
1527
            //if (item.DrawingData as ArrowTextControl !=null)
1528
            //{
1529
            //    for (int i = 0; i < AllControl.PointSet.Count(); i++)
1530
            //    {
1531
            //        if ((MemberSet.First() as AdornerMember).ThumbList[1]d)
1532
            //        {
1533

    
1534
            //        }
1535
            //    }
1536
            //    List<Point> ps = new List<Point>();
1537
            //    var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
1538
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
1539
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
1540
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
1541
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
1542

    
1543
            //    var endP = MathSet.getNearPoint(ps, temp.MidPoint);
1544
            //    var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
1545
            //    Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
1546
            //    Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);    
1547
            //}
1548
            //else
1549
            //{
1550
            for (int i = 0; i < AllControl.PointSet.Count(); i++)
1551
            {
1552

    
1553
                Canvas.SetLeft(item.ThumbList[i], AllControl.PointSet[i].X);
1554
                Canvas.SetTop(item.ThumbList[i], AllControl.PointSet[i].Y);
1555
            }
1556

    
1557

    
1558
            if (item.DrawingData as ArrowTextControl != null)
1559
            {
1560
                if (!(item.DrawingData as ArrowTextControl).isTrans) //trans가 True인경우
1561
                {
1562
                    List<Point> ps = new List<Point>();
1563
                    //강인구 수정
1564
                    //var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
1565
                    var temp = item.DrawingData as ArrowTextControl;
1566
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
1567
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
1568
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
1569
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
1570

    
1571

    
1572

    
1573
                    if (temp.isFixed)
1574
                    {
1575
                        var endP = MathSet.getNearPoint(ps, temp.MidPoint);
1576
                        var testP = endP;
1577
                        if (ps[0] == endP) //상단
1578
                        {
1579
                            testP = new Point(endP.X, endP.Y - 50);
1580
                            System.Diagnostics.Debug.WriteLine("상단");
1581
                        }
1582
                        else if (ps[1] == endP) //하단
1583
                        {
1584
                            testP = new Point(endP.X, endP.Y + 50);
1585
                            System.Diagnostics.Debug.WriteLine("하단");
1586
                        }
1587
                        else if (ps[2] == endP) //좌단
1588
                        {
1589
                            testP = new Point(endP.X - 50, endP.Y);
1590
                            System.Diagnostics.Debug.WriteLine("좌단");
1591
                        }
1592
                        else if (ps[3] == endP) //우단
1593
                        {
1594
                            testP = new Point(endP.X + 50, endP.Y);
1595
                            System.Diagnostics.Debug.WriteLine("우단");
1596
                        }
1597
                        Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], testP.X);
1598
                        Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], testP.Y);
1599
                    }
1600
                    else
1601
                    {
1602
                        var endP = MathSet.getNearPoint(ps, temp.MidPoint);
1603
                        var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
1604
                        Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
1605
                        Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);
1606
                    }
1607
                }
1608
            }
1609
            //}
1610
        }
1611

    
1612
        public void Set_Rotate()
1613
        {
1614

    
1615
            double dDeltaAngle = 0;
1616
            List<Point> AllPointSet = new List<Point>();
1617
            Point CenterPoint = new Point();
1618

    
1619

    
1620
            if (AngleValue >= 360)
1621
            {
1622
                AngleValue -= 360;
1623
            }
1624
            else if (AngleValue <= -360)
1625
            {
1626
                AngleValue += 360;
1627
            }
1628

    
1629
            #region 센터 포인트 구하기 (그룹핑)
1630
            foreach (var item in MemberSet)
1631
            {
1632
                if (item.DrawingData.GetType().Name == "TextControl")
1633
                {
1634
                }
1635
                else
1636
                {
1637
                    foreach (Point itemP in (item.DrawingData as IPath).PointSet)
1638
                    {
1639
                        AllPointSet.Add(itemP);
1640
                    }
1641
                }
1642
            }
1643
            #endregion
1644

    
1645
            CenterPoint = MathSet.FindCentroid(AllPointSet);
1646

    
1647
            Dispatcher.BeginInvoke((Action)(() =>
1648
            {
1649
                foreach (var item in MemberSet)
1650
                {
1651
                    foreach (var thumb in item.ThumbList)
1652
                    {
1653
                        double x = Canvas.GetLeft(thumb);
1654
                        double y = Canvas.GetTop(thumb);
1655

    
1656
                        Point value = MathSet.RotateAbout(CenterPoint, new Point(x, y), dDeltaAngle);
1657
                        Canvas.SetLeft(thumb, value.X);
1658
                        Canvas.SetTop(thumb, value.Y);
1659

    
1660
                        if (item.DrawingData.GetType().Name == "ArrowTextControl" && thumb == item.ThumbList.Last())
1661
                        {
1662

    
1663
                            Canvas.SetLeft(thumb, Canvas.GetLeft((item.DrawingData as ArrowTextControl).Base_TextBox));
1664
                            Canvas.SetTop(thumb, Canvas.GetTop((item.DrawingData as ArrowTextControl).Base_TextBox));
1665
                            if (!(item.DrawingData as ArrowTextControl).isTrans)
1666
                            {
1667
                                List<Point> ps = new List<Point>();
1668
                                var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
1669
                                switch (Math.Abs(temp.Angle).ToString())
1670
                                {
1671
                                    case "90":
1672
                                        {
1673
                                            ps.Clear();
1674
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
1675
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); // 위 중간
1676
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); // 위 오른쪽
1677

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

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

    
1684
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 중간
1685
                                        }
1686
                                        break;
1687
                                    case "270":
1688
                                        {
1689
                                            ps.Clear();
1690
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
1691
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); // 위 중간
1692
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); // 위 오른쪽
1693

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

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

    
1700
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 중간
1701
                                        }
1702
                                        break;
1703
                                    default:
1704
                                        {
1705
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
1706
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
1707
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
1708
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
1709
                                        }
1710
                                        break;
1711
                                }
1712

    
1713
                                var endP = MathSet.getNearPoint(ps, temp.MidPoint);
1714
                                var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
1715
                                Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
1716
                                Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);
1717
                            }
1718
                        }
1719
                    }
1720

    
1721
                    for (int i = 0; i < (item.DrawingData as IPath).PointSet.Count(); i++)
1722
                    {
1723
                        (item.DrawingData as IPath).PointSet[i] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as IPath).PointSet[i], dDeltaAngle);
1724
                    }
1725
                }
1726
                #region 컨트롤 업데이트
1727
                foreach (var item in MemberSet)
1728
                {
1729
                    switch (item.Drawingtype)
1730
                    {
1731
                        case ControlType.TextControl:
1732
                            ((TextControl)item.DrawingData).Angle = AngleValue;
1733
                            //trRotate.Angle = AngleValue;
1734

    
1735
                            RectangleGeometry Data = new RectangleGeometry
1736
                            {
1737
                                Rect = new Rect()
1738
                                {
1739
                                    X = Canvas.GetLeft((item.DrawingData as TextControl)),
1740
                                    Y = Canvas.GetTop((item.DrawingData as TextControl)),
1741
                                    Width = (item.DrawingData as TextControl).Base_TextBlock.ActualWidth / 2,
1742
                                    Height = (item.DrawingData as TextControl).Base_TextBlock.ActualHeight / 2,
1743
                                }
1744
                            };
1745
                            //if ((firstCondition as TextControl).Angle != 0)
1746
                            //{
1747
                            Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
1748
                            Point middle = MathSet.getMiddlePoint((item.DrawingData as TextControl).StartPoint, endPointV);
1749

    
1750

    
1751
                            //AdornerBorder.RenderTransformOrigin = new Point(1, 1);
1752
                            //AdornerBorder.RenderTransform = new RotateTransform()
1753
                            //{
1754
                            //    Angle = (member as TextControl).Angle * -1,
1755
                            //    CenterX = middle.X + ((member as TextControl) as FrameworkElement).ActualWidth /2,
1756
                            //    CenterY = middle.Y + ((member as TextControl) as FrameworkElement).ActualHeight /2,
1757
                            //};
1758

    
1759
                            DragThumb.RenderTransformOrigin = new Point(0.0, 0.0);
1760
                            DragThumb.RenderTransform = new RotateTransform()
1761
                            {
1762
                                Angle = (item.DrawingData as TextControl).Angle,
1763
                                //CenterX = middle.X,
1764
                                //CenterY = middle.Y,
1765
                            };
1766

    
1767
                            AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0);
1768
                            AdornerBorder.RenderTransform = new RotateTransform()
1769
                            {
1770
                                Angle = (item.DrawingData as TextControl).Angle,
1771
                                //CenterX = middle.X,
1772
                                //CenterY = middle.Y,
1773
                            };
1774

    
1775
                            (item.DrawingData as TextControl).Base_Grid.RenderTransform = new RotateTransform()
1776
                            {
1777
                                Angle = (item.DrawingData as TextControl).Angle,
1778
                            };
1779

    
1780
                            BorderUpdate();
1781
                            break;
1782
                        //case ControlType.Viewbox:
1783
                        //    (item.DrawingData as IPath).updateControl();
1784
                        //    ((IViewBox)item.DrawingData).Angle = AngleValue;
1785
                        //    BorderUpdate();
1786
                        //    break;
1787
                        case ControlType.Date:
1788
                            //강인구 추가(2018.02.22)
1789
                            ((DateControl)item.DrawingData).Angle = AngleValue;
1790
                            (item.DrawingData as IPath).updateControl();
1791
                            BorderUpdate();
1792
                            //MessageBox.Show("잠시 정확도를 위해 막아두었습니다!");
1793
                            break;
1794
                        case ControlType.ArrowMultiLine:
1795
                        case ControlType.ArcLine:
1796
                        case ControlType.SingleLine:
1797
                        case ControlType.Triangle:
1798
                            (item.DrawingData as IPath).updateControl();
1799
                            BorderUpdate();
1800
                            break;
1801
                        case ControlType.ArrowTextControl:
1802
                            (item.DrawingData as IPath).updateControl();
1803
                            BorderUpdate();
1804
                            break;
1805
                        case ControlType.RectCloud:
1806
                            ((RectCloudControl)item.DrawingData).Angle = AngleValue;
1807
                            (item.DrawingData as IPath).updateControl();
1808
                            BorderUpdate();
1809
                            break;
1810
                        case ControlType.Rectangle:
1811
                            ((RectangleControl)item.DrawingData).Angle = AngleValue;
1812
                            (item.DrawingData as IPath).updateControl();
1813
                            BorderUpdate();
1814
                            break;
1815
                        case ControlType.ImgControl:
1816
                            ((ImgControl)item.DrawingData).Angle = AngleValue;
1817
                            (item.DrawingData as IPath).updateControl();
1818
                            BorderUpdate();
1819
                            break;
1820
                        //강인구 추가
1821
                        case ControlType.Sign:
1822
                            ((SignControl)item.DrawingData).Angle = AngleValue;
1823
                            (item.DrawingData as IPath).updateControl();
1824
                            BorderUpdate();
1825
                            break;
1826
                        //강인구 추가
1827
                        case ControlType.Symbol:
1828
                            ((SymControl)item.DrawingData).Angle = AngleValue;
1829
                            (item.DrawingData as IPath).updateControl();
1830
                            BorderUpdate();
1831
                            break;
1832
                        //강인구 추가
1833
                        case ControlType.Stamp:
1834
                            ((SymControlN)item.DrawingData).Angle = AngleValue;
1835
                            (item.DrawingData as IPath).updateControl();
1836
                            BorderUpdate();
1837
                            break;
1838
                        case ControlType.PolygonControl:
1839
                            //((IShapeControl)AllControl).Angle = AngleValue;
1840
                            (item.DrawingData as IPath).updateControl();
1841
                            BorderUpdate();
1842
                            break;
1843
                        case ControlType.PolygonCloud:
1844
                            //((IShapeControl)AllControl).Angle = AngleValue;
1845
                            ((ICloudControl)item.DrawingData).DrawingCloud();
1846
                            (item.DrawingData as IPath).updateControl();
1847
                            BorderUpdate();
1848
                            break;
1849
                        case ControlType.Circle:
1850
                            ((IShapeControl)item.DrawingData).Angle = AngleValue;
1851
                            (item.DrawingData as IPath).updateControl();
1852
                            ((CircleControl)item.DrawingData).SetCenterXY();
1853
                            BorderUpdate();
1854
                            break;
1855
                        case ControlType.Ink:
1856
                            //((IShapeControl)AllControl).Angle = AngleValue;
1857
                            (item.DrawingData as IPath).updateControl();
1858
                            BorderUpdate();
1859
                            break;
1860
                        default:
1861
                            break;
1862
                    }
1863
                }
1864
                #endregion
1865
            }));
1866
            //BorderUpdate();
1867
        }
1868

    
1869
        private void resize_MouseMove(object sender, MouseEventArgs e)
1870
        {
1871
            reSizePoint = e.GetPosition(this);
1872
            //Thumb thumb = sender as Thumb;
1873
            //if (this.isDragging && MemberSet.Count <= 1 && DraggerThumb == thumb)
1874
            ////if (thumb.IsDragging && MemberSet.Count <= 1 && DraggerThumb == thumb)
1875
            ////if (DraggerThumb == thumb)
1876
            //{
1877
            //    Point setPoint = e.GetPosition(this);
1878
            //    Canvas.SetLeft(thumb, setPoint.X);
1879
            //    Canvas.SetTop(thumb, setPoint.Y);
1880
            //    AdornerMember control = (from userThumb in MemberSet
1881
            //                             where userThumb.ThumbList.Contains(thumb)
1882
            //                             select userThumb).FirstOrDefault();
1883
            //    Point nearPoint = new Point(0, 0);
1884
            //    IPath AllControl = control.DrawingData as IPath;
1885
            //    if (ControlType.TextControl != control.Drawingtype)
1886
            //    {
1887

    
1888
            //        var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
1889
            //        List<Point> ps = new List<Point>();
1890

    
1891
            //        nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1892
            //        //switch (Math.Abs(temp.Angle).ToString())
1893
            //        //{
1894

    
1895
            //        //    case "90":
1896
            //        //        {
1897
            //        //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1898
            //        //        }
1899
            //        //        break;
1900
            //        //    case "270":
1901
            //        //        {
1902
            //        //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1903
            //        //        }
1904
            //        //        break;
1905
            //        //    default:
1906
            //        //        {
1907
            //        //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1908
            //        //        }
1909
            //        //        break;
1910
            //        //}
1911

    
1912
            //    }
1913
            //    for (int i = 0; i < (control.DrawingData as IPath).PointSet.Count; i++)
1914
            //    {
1915
            //        switch (control.Drawingtype)
1916
            //        {
1917
            //            #region Arc + Line
1918
            //            case ControlType.ArcLine:
1919
            //            case ControlType.SingleLine:
1920
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
1921
            //                {
1922
            //                    AllControl.PointSet[i] = setPoint;
1923
            //                    AllControl.updateControl();
1924
            //                    DynamicThumbUpdate(control);
1925
            //                    BorderUpdate();
1926

    
1927
            //                    //if (control.DrawingData.GetType().Name == "ArrowTextControl")
1928
            //                    //{
1929
            //                    //    Thumb tm = control.ThumbList.Last();
1930
            //                    //    //Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width / 2));
1931
            //                    //    //Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height / 2));
1932
            //                    //    Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width));
1933
            //                    //    Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height));
1934
            //                    //}
1935
            //                }
1936
            //                break;
1937
            //            #endregion
1938
            //            #region Shape
1939
            //            case ControlType.Rectangle:
1940
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
1941
            //                {
1942
            //                    AllControl.PointSet[i] = setPoint;
1943
            //                    var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
1944
            //                    var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
1945
            //                    var NextP = (i + 1) % AllControl.PointSet.Count();
1946

    
1947
            //                    var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
1948

    
1949
            //                    var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1950
            //                    var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1951
            //                        AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1952
            //                    AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1953
            //                        [ReverseP].Y
1954
            //                        + PreviousV.Y * l);
1955

    
1956
            //                    var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
1957
            //                    l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
1958
            //                        [i].Y - AllControl.PointSet[ReverseP].Y);
1959
            //                    AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
1960
            //                        NextV.Y * l);
1961
            //                    AllControl.updateControl();
1962
            //                    DynamicThumbUpdate(control);
1963
            //                    BorderUpdate();
1964
            //                }
1965
            //                break;
1966
            //            #endregion
1967
            //            #region Polygon
1968
            //            case ControlType.PolygonControl:
1969
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
1970
            //                {
1971
            //                    AllControl.PointSet[i] = setPoint;
1972
            //                    AllControl.updateControl();
1973
            //                    BorderUpdate();
1974
            //                }
1975
            //                break;
1976
            //            #endregion
1977
            //            #region Cicle
1978
            //            case ControlType.Circle:
1979
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
1980
            //                {
1981
            //                    AllControl.PointSet[i] = setPoint;
1982
            //                    List<Point> newPointSet = new List<Point> { };
1983
            //                    Point middle = new Point(AllControl.PathData.Bounds.X + AllControl.PathData.Bounds.Width * 0.5,
1984
            //                        AllControl.PathData.Bounds.Y +
1985
            //                        AllControl.PathData.Bounds.Height * 0.5);
1986
            //                    foreach (Point pt in AllControl.PointSet)
1987
            //                    {
1988
            //                        newPointSet.Add(pt);
1989
            //                    }
1990
            //                    var ReverseP = (i + newPointSet.Count() / 2) % newPointSet.Count();
1991
            //                    var PreviousP = (i + (newPointSet.Count() - 1)) % newPointSet.Count();
1992
            //                    var NextP = (i + 1) % newPointSet.Count();
1993
            //                    var distance = MathSet.DistanceTo(newPointSet[ReverseP], newPointSet[i]);
1994
            //                    var PreviousV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[PreviousP]);
1995
            //                    var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, newPointSet[i].X - newPointSet[ReverseP].X,
1996
            //                        newPointSet[i].Y - newPointSet[ReverseP].Y);
1997
            //                    newPointSet[PreviousP] = new Point(newPointSet[ReverseP].X + PreviousV.X * l, newPointSet[ReverseP].Y
1998
            //                        + PreviousV.Y * l);
1999

    
2000
            //                    var NextV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[NextP]);
2001
            //                    l = MathSet.DotProduct(NextV.X, NextV.Y, newPointSet[i].X - newPointSet[ReverseP].X, newPointSet[i].Y
2002
            //                        - newPointSet[ReverseP].Y);
2003
            //                    newPointSet[NextP] = new Point(newPointSet[ReverseP].X + NextV.X * l, newPointSet[ReverseP].Y + NextV.Y * l);
2004

    
2005
            //                    AllControl.PointSet = newPointSet;
2006
            //                    DynamicThumbUpdate(control);
2007
            //                    AllControl.updateControl();
2008
            //                    BorderUpdate();
2009
            //                }
2010
            //                break;
2011
            //            #endregion
2012
            //            #region ArrowText
2013
            //            case ControlType.ArrowTextControl:
2014
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
2015
            //                {
2016
            //                    AllControl.PointSet[i] = setPoint;
2017
            //                    AllControl.updateControl();
2018

    
2019
            //                    DynamicThumbUpdate(control);
2020
            //                    BorderUpdate();
2021

    
2022
            //                    //if (control.DrawingData.GetType().Name == "ArrowTextControl")
2023
            //                    //{
2024
            //                    //    Thumb tm = control.ThumbList.Last();
2025
            //                    //    //Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width / 2));
2026
            //                    //    //Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height / 2));
2027
            //                    //    Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width));
2028
            //                    //    Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height));
2029
            //                    //}
2030
            //                }
2031
            //                break;
2032
            //            #endregion
2033
            //            #region Text
2034
            //            case ControlType.TextControl:
2035
            //                break;
2036
            //            #endregion
2037
            //            #region Image
2038
            //            case ControlType.ImgControl:
2039
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
2040
            //                {
2041
            //                    AllControl.PointSet[i] = setPoint;
2042
            //                    var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
2043
            //                    var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
2044
            //                    var NextP = (i + 1) % AllControl.PointSet.Count();
2045

    
2046
            //                    var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
2047

    
2048
            //                    var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
2049
            //                    var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
2050
            //                        AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
2051
            //                    AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
2052
            //                        [ReverseP].Y
2053
            //                        + PreviousV.Y * l);
2054

    
2055
            //                    var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
2056
            //                    l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
2057
            //                        [i].Y - AllControl.PointSet[ReverseP].Y);
2058
            //                    AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
2059
            //                        NextV.Y * l);
2060
            //                    AllControl.updateControl();
2061
            //                    DynamicThumbUpdate(control);
2062
            //                    BorderUpdate();
2063
            //                }
2064
            //                break;
2065
            //            #endregion
2066
            //            #region Cloud
2067
            //            case ControlType.PolygonCloud:
2068
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
2069
            //                {
2070
            //                    AllControl.PointSet[i] = setPoint;
2071
            //                    AllControl.updateControl();
2072
            //                    ((ICloudControl)AllControl).DrawingCloud();
2073
            //                    BorderUpdate();
2074
            //                }
2075
            //                break;
2076
            //            #endregion
2077
            //            #region SymBol
2078
            //            //case MarkupType.Viewbox:
2079
            //            //    if (nearPoint.Equals(AllControl.PointSet[i]))
2080
            //            //    {
2081
            //            //        AllControl.PointSet[i] = setPoint;
2082
            //            //        var ReverseP = (i + AllControl.PointSet.Count() / 2) % AllControl.PointSet.Count();
2083
            //            //        var PreviousP = (i + (AllControl.PointSet.Count() - 1)) % AllControl.PointSet.Count();
2084
            //            //        var NextP = (i + 1) % AllControl.PointSet.Count();
2085

    
2086
            //            //        var distance = MathSet.DistanceTo(AllControl.PointSet[ReverseP], AllControl.PointSet[i]);
2087

    
2088
            //            //        var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
2089
            //            //        var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
2090
            //            //            AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
2091
            //            //        AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
2092
            //            //            [ReverseP].Y
2093
            //            //            + PreviousV.Y * l);
2094

    
2095
            //            //        var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
2096
            //            //        l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
2097
            //            //            [i].Y - AllControl.PointSet[ReverseP].Y);
2098
            //            //        AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
2099
            //            //            NextV.Y * l);
2100
            //            //        AllControl.updateControl();
2101
            //            //        DynamicThumbUpdate(control);
2102
            //            //        BorderUpdate();
2103
            //            //    }
2104
            //            //    break;
2105
            //            #endregion
2106
            //            default:
2107
            //                break;
2108
            //        }
2109
            //    }
2110
            //}
2111
        }
2112

    
2113
        /// <summary>
2114
        /// 회전
2115
        /// </summary>
2116
        /// <param name="sender"></param>
2117
        /// <param name="e"></param>
2118
        public void rotate_DragDelta(object sender, DragDeltaEventArgs e)
2119
        {
2120
            MoveRotate(e);
2121
        }
2122

    
2123
        double LastRotateHorizontalValue = 0;
2124
        double LastRotateVerticalValue = 0;
2125
        double LastWidthValue = 0;
2126
        double SetWidth = 0;
2127
        bool RotateFlag = false;
2128

    
2129
        /// <summary>
2130
        /// <history>humkyung 2018.05.09 upgrade rotate shape peformance</history>
2131
        /// </summary>
2132
        /// <param name="e"></param>
2133
        public void MoveRotate(DragDeltaEventArgs e)
2134
        {
2135
            double dDeltaAngle = 0;
2136

    
2137
            List<Point> AllPointSet = new List<Point>();
2138
            Point CenterPoint = new Point();
2139
            #region 회전율에 따른 DragDelta 값
2140

    
2141
            #region 원본소스
2142
            ////if (Math.Abs(e.HorizontalChange) > Math.Abs(e.VerticalChange))
2143
            ////{
2144
            //    //dDeltaAngle = +2;
2145
            //    //dDeltaAngle = (e.HorizontalChange / 20);
2146
            //    AngleValue = AngleValue + dDeltaAngle;
2147
            //    if (Math.Abs(e.HorizontalChange) > Math.Abs(e.VerticalChange))
2148
            //    {
2149
            //        if (LastRotateHorizontalValue < e.HorizontalChange)
2150
            //        {
2151
            //            dDeltaAngle = 2;
2152
            //            AngleValue = AngleValue + dDeltaAngle;
2153
            //        }
2154
            //        else
2155
            //        {
2156
            //            dDeltaAngle = -2;
2157
            //            AngleValue = AngleValue + dDeltaAngle;
2158
            //        }
2159
            //    }
2160
            //    //else
2161
            //    //{
2162
            //    //    if (LastRotateVerticalValue < e.VerticalChange)
2163
            //    //    {
2164
            //    //        dDeltaAngle = -2;
2165
            //    //        AngleValue = AngleValue + dDeltaAngle;
2166

    
2167
            //    //    }
2168
            //    //    else
2169
            //    //    {
2170
            //    //        dDeltaAngle = 2;
2171
            //    //        AngleValue = AngleValue + dDeltaAngle;
2172
            //    //    }
2173
            //    //}
2174
            ////}
2175
            ////else if (Math.Abs(e.HorizontalChange) < Math.Abs(e.VerticalChange))
2176
            ////{
2177
            ////    //dDeltaAngle = (e.VerticalChange / 20);
2178
            ////    dDeltaAngle = -2;
2179
            ////    AngleValue = AngleValue + dDeltaAngle;
2180
            ////} 
2181
            #endregion
2182

    
2183
            //강인구 수정
2184
            //AngleValue = AngleValue + dDeltaAngle;
2185
            #endregion
2186

    
2187
            #region 센터 포인트 구하기 (그룹핑)
2188
            foreach (var item in MemberSet)
2189
            {
2190
                if (item.DrawingData.GetType().Name == "TextControl")
2191
                {
2192
                    //double X = Canvas.GetLeft((item.DrawingData as TextControl));
2193
                    //double Y = Canvas.GetTop((item.DrawingData as TextControl));
2194
                    //AllPointSet.Add(new Point(X, Y));
2195
                    AllPointSet.Add((item.DrawingData as TextControl).StartPoint);
2196
                }
2197
                else
2198
                {
2199
                    foreach (Point itemP in (item.DrawingData as IPath).PointSet)
2200
                    {
2201
                        AllPointSet.Add(itemP);
2202
                    }
2203
                }
2204
            }
2205
            #endregion
2206
            CenterPoint = MathSet.FindCentroid(AllPointSet);
2207
            Point pt = Mouse.GetPosition(this);
2208

    
2209
            Point vec1 = new Point(this.rotatePoint.X - CenterPoint.X, this.rotatePoint.Y - CenterPoint.Y);
2210
            Point vec2 = new Point(pt.X - CenterPoint.X, pt.Y - CenterPoint.Y);
2211
            dDeltaAngle = (MathSet.getAngleBetweenVectors(vec1, vec2));
2212

    
2213
            AngleValue += dDeltaAngle;
2214
            if (AngleValue > 360) AngleValue -= 360;
2215
            if (AngleValue < 0) AngleValue += 360;
2216
            this.rotatePoint = pt;  /// save rotatePoint
2217

    
2218
            Dispatcher.BeginInvoke((Action)(() =>
2219
            {
2220
                foreach (var item in MemberSet)
2221
                {
2222
                    foreach (var thumb in item.ThumbList)
2223
                    {
2224
                        double x = Canvas.GetLeft(thumb);
2225
                        double y = Canvas.GetTop(thumb);
2226

    
2227
                        Point value = MathSet.RotateAbout(CenterPoint, new Point(x, y), dDeltaAngle);
2228
                        Canvas.SetLeft(thumb, value.X);
2229
                        Canvas.SetTop(thumb, value.Y);
2230

    
2231
                        /*
2232
                        if (item.DrawingData.GetType().Name == "ArrowTextControl" && thumb == item.ThumbList.Last())
2233
                        {
2234
                            Canvas.SetLeft(thumb, Canvas.GetLeft((item.DrawingData as ArrowTextControl).Base_TextBox));
2235
                            Canvas.SetTop(thumb, Canvas.GetTop((item.DrawingData as ArrowTextControl).Base_TextBox));
2236
                            if (!(item.DrawingData as ArrowTextControl).isTrans)
2237
                            {
2238
                                List<Point> ps = new List<Point>();
2239
                                
2240
                                //강인구 추가
2241
                                //var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
2242
                                var temp = item.DrawingData as ArrowTextControl;
2243
                                switch (Math.Abs(temp.Angle).ToString())
2244
                                {
2245
                                    case "90":
2246
                                        {
2247
                                            ps.Clear();
2248
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
2249
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); // 위 중간
2250
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); // 위 오른쪽
2251

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

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

    
2258
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 중간
2259
                                        }
2260
                                        break;
2261
                                    case "270":
2262
                                        {
2263
                                            ps.Clear();
2264
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
2265
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); // 위 중간
2266
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); // 위 오른쪽
2267

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

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

    
2274
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 중간
2275
                                        }
2276
                                        break;
2277
                                    default:
2278
                                        {
2279
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
2280
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
2281
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
2282
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
2283
                                        }
2284
                                        break;
2285
                                }
2286

    
2287
                                var endP = MathSet.getNearPoint(ps, temp.MidPoint);
2288
                                var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
2289

    
2290
                                Canvas.SetLeft((MemberSet.Where(data => data.DrawingData.GetType().Name == "ArrowTextControl")).FirstOrDefault().ThumbList[1], tempP.X);
2291
                                Canvas.SetTop((MemberSet.Where(data => data.DrawingData.GetType().Name == "ArrowTextControl")).FirstOrDefault().ThumbList[1], tempP.Y);
2292
                                //Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
2293
                                //Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);
2294
                            }
2295
                        }
2296
                        */
2297
                    }
2298

    
2299
                    for (int i = 0; i < (item.DrawingData as IPath).PointSet.Count(); i++)
2300
                    {
2301
                        (item.DrawingData as IPath).PointSet[i] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as IPath).PointSet[i], dDeltaAngle);
2302
                    }
2303
                }
2304
                #region 보더 업데이트
2305
                foreach (var item in MemberSet)
2306
                {
2307
                    switch (item.Drawingtype)
2308
                    {
2309
                        case ControlType.TextControl:
2310
                            ((TextControl)item.DrawingData).Angle = AngleValue;
2311

    
2312
                            RectangleGeometry Data = new RectangleGeometry
2313
                            {
2314
                                Rect = new Rect()
2315
                                {
2316
                                    X = Canvas.GetLeft((item.DrawingData as TextControl)),
2317
                                    Y = Canvas.GetTop((item.DrawingData as TextControl)),
2318
                                    Width = (item.DrawingData as TextControl).Base_TextBlock.ActualWidth / 2,
2319
                                    Height = (item.DrawingData as TextControl).Base_TextBlock.ActualHeight / 2,
2320
                                }
2321
                            };
2322
                            //if ((firstCondition as TextControl).Angle != 0)
2323
                            //{
2324
                            Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
2325
                            Point middle = MathSet.getMiddlePoint((item.DrawingData as TextControl).StartPoint, endPointV);
2326

    
2327

    
2328
                            //AdornerBorder.RenderTransformOrigin = new Point(1, 1);
2329
                            //AdornerBorder.RenderTransform = new RotateTransform()
2330
                            //{
2331
                            //    Angle = (member as TextControl).Angle * -1,
2332
                            //    CenterX = middle.X + ((member as TextControl) as FrameworkElement).ActualWidth /2,
2333
                            //    CenterY = middle.Y + ((member as TextControl) as FrameworkElement).ActualHeight /2,
2334
                            //};
2335

    
2336
                            DragThumb.RenderTransformOrigin = new Point(0.0, 0.0);
2337
                            DragThumb.RenderTransform = new RotateTransform()
2338
                            {
2339
                                Angle = (item.DrawingData as TextControl).Angle,
2340
                                //CenterX = middle.X,
2341
                                //CenterY = middle.Y,
2342
                            };
2343

    
2344
                            AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0);
2345
                            AdornerBorder.RenderTransform = new RotateTransform()
2346
                            {
2347
                                Angle = (item.DrawingData as TextControl).Angle,
2348
                                //CenterX = middle.X,
2349
                                //CenterY = middle.Y,
2350
                            };
2351

    
2352
                            (item.DrawingData as TextControl).Base_Grid.RenderTransform = new RotateTransform()
2353
                            {
2354
                                Angle = (item.DrawingData as TextControl).Angle,
2355
                            };
2356

    
2357
                            BorderUpdate();
2358
                            break;
2359
                        //case ControlType.Viewbox:
2360
                        //    (item.DrawingData as IPath).updateControl();
2361
                        //    ((IViewBox)item.DrawingData).Angle = AngleValue;
2362
                        //    BorderUpdate();
2363
                        //    break;
2364
                        case ControlType.Date:
2365

    
2366
                            //강인구 추가(2018.02.22)
2367
                            ((DateControl)item.DrawingData).Angle = AngleValue;
2368
                            (item.DrawingData as IPath).updateControl();
2369

    
2370
                            BorderUpdate();
2371
                            //MessageBox.Show("잠시 정확도를 위해 막아두었습니다!");
2372
                            break;
2373
                        case ControlType.ArrowMultiLine:
2374
                        case ControlType.ArcLine:
2375
                        case ControlType.SingleLine:
2376
                        case ControlType.Triangle:
2377
                            (item.DrawingData as IPath).updateControl();
2378
                            BorderUpdate();
2379
                            break;
2380
                        case ControlType.ArrowTextControl:
2381
                            (item.DrawingData as IPath).updateControl();
2382
                            BorderUpdate();
2383
                            break;
2384
                        case ControlType.RectCloud:
2385
                            ((RectCloudControl)item.DrawingData).Angle = AngleValue;
2386
                            (item.DrawingData as IPath).updateControl();
2387
                            BorderUpdate();
2388
                            break;
2389
                        case ControlType.Rectangle:
2390
                            ((RectangleControl)item.DrawingData).Angle = AngleValue;
2391
                            (item.DrawingData as IPath).updateControl();
2392
                            BorderUpdate();
2393
                            break;
2394
                        case ControlType.ImgControl:
2395
                            ((ImgControl)item.DrawingData).Angle = AngleValue;
2396
                            (item.DrawingData as IPath).updateControl();
2397
                            BorderUpdate();
2398
                            break;
2399
                        //강인구 추가
2400
                        case ControlType.Sign:
2401
                            ((SignControl)item.DrawingData).Angle = AngleValue;
2402
                            (item.DrawingData as IPath).updateControl();
2403
                            BorderUpdate();
2404
                            break;
2405
                        //강인구 추가
2406
                        case ControlType.Symbol:
2407
                            ((SymControl)item.DrawingData).Angle = AngleValue;
2408
                            (item.DrawingData as IPath).updateControl();
2409
                            BorderUpdate();
2410
                            break;
2411
                        //강인구 추가
2412
                        case ControlType.Stamp:
2413
                            ((SymControlN)item.DrawingData).Angle = AngleValue;
2414
                            (item.DrawingData as IPath).updateControl();
2415
                            BorderUpdate();
2416
                            break;
2417
                        case ControlType.PolygonControl:
2418
                            //((IShapeControl)AllControl).Angle = AngleValue;
2419
                            (item.DrawingData as IPath).updateControl();
2420
                            BorderUpdate();
2421
                            break;
2422
                        case ControlType.PolygonCloud:
2423
                            //((IShapeControl)AllControl).Angle = AngleValue;
2424
                            ((ICloudControl)item.DrawingData).DrawingCloud();
2425
                            (item.DrawingData as IPath).updateControl();
2426
                            BorderUpdate();
2427
                            break;
2428
                        case ControlType.Circle:
2429
                            ((IShapeControl)item.DrawingData).Angle = AngleValue;
2430
                            (item.DrawingData as IPath).updateControl();
2431
                            ((CircleControl)item.DrawingData).SetCenterXY();
2432
                            BorderUpdate();
2433
                            break;
2434
                        case ControlType.Ink:
2435
                            for (int i = 0; i < (item.DrawingData as InkControl).PointC.Count(); i++)
2436
                            {
2437
                                for (int j = 0; j < (item.DrawingData as InkControl).PointC[i].pointSet.Count; j++)
2438
                                {
2439
                                    (item.DrawingData as InkControl).PointC[i].pointSet[j] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as InkControl).PointC[i].pointSet[j], dDeltaAngle);
2440
                                }
2441
                            }
2442
                            (item.DrawingData as IPath).updateControl();
2443
                            BorderUpdate();
2444
                            break;
2445
                        //case MarkupType.PolygonEx:
2446
                        //    //trRotate.Angle = AngleValue;
2447
                        //    for (int i = 0; i < (item.DrawingData as PolyControl).PointC.Count(); i++)
2448
                        //    {
2449
                        //        //(item.DrawingData as PolyControl).PointC[i] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as PolyControl).PointC[i]., dDeltaAngle);
2450
                        //        for (int j = 0; j < (item.DrawingData as PolyControl).PointC[i].pointSet.Count; j++)
2451
                        //        {
2452
                        //            (item.DrawingData as PolyControl).PointC[i].pointSet[j] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as PolyControl).PointC[i].pointSet[j], dDeltaAngle);
2453
                        //        }
2454
                        //    }
2455
                        //    (item.DrawingData as IPath).updateControl();
2456
                        //    BorderUpdate();
2457
                        //    break;
2458
                        default:
2459
                            break;
2460
                    }
2461
                }
2462
                #endregion
2463
            }));
2464
            BorderUpdate();
2465
        }
2466

    
2467
        /// <summary>
2468
        /// starting rotate
2469
        /// </summary>
2470
        /// <param name="sender"></param>
2471
        /// <param name="e"></param>
2472
        private void rotate_DragStarted(object sender, DragStartedEventArgs e)
2473
        {
2474
            this.rotatePoint = Mouse.GetPosition(this); /// 2018.05.09 added by humkyung
2475
            rotateTop.Cursor = Cursors.SizeAll;
2476

    
2477
            /// get angle from text controls' angle if only text control exists - 2018.05.10 added by humkyung
2478
            if ((1 == MemberSet.Count) && (MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
2479
            {
2480
                this.AngleValue = ((MemberSet.First() as AdornerMember).DrawingData as TextControl).Angle;
2481
            }
2482
            /// up to here
2483

    
2484
            if (ViewerDataModel.Instance.UndoDataList == null)
2485
            {
2486
                return;
2487
            }
2488

    
2489
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Event == Event_Type.Thumb)
2490
            {
2491
                return;
2492
            }
2493
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List != null)
2494
            {
2495
                if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.Count > 0)
2496
                {
2497
                    if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.FirstOrDefault().PointSet != null)
2498
                    {
2499
                        return;
2500
                    }
2501
                }
2502
            }
2503

    
2504
            Undo_Event();
2505
        }
2506

    
2507
        private void rotate_DragCompleted(object sender, DragCompletedEventArgs e)
2508
        {
2509
            //CustomCursor.SetCursorTemplate(rotateTop, null);
2510
            rotateTop.Cursor = Cursors.Arrow;
2511

    
2512
            Undo_Event();
2513
        }
2514

    
2515
        private void drag_DragStarted(object sender, DragStartedEventArgs e)
2516
        {
2517
            //CustomCursor.SetCursorTemplate(DragThumb, this.Resources["MoveCursor"] as DataTemplate);
2518
            //DragThumb.Cursor = Cursors.None;
2519
            //DragThumb.Cursor = Cursors.SizeAll;
2520

    
2521
            if (ViewerDataModel.Instance.UndoDataList == null)
2522
            {
2523
                return;
2524
            }
2525
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Event == Event_Type.Thumb)
2526
            {
2527
                return;
2528
            }
2529
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List != null)
2530
            {
2531
                if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.Count > 0)
2532
                {
2533
                    if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.FirstOrDefault().PointSet != null)
2534
                    {
2535
                        return;
2536
                    }
2537
                }
2538
            }
2539

    
2540
            Undo_Event();
2541
        }
2542

    
2543
        private void Undo_Event()
2544
        {
2545
            List<Point> p_set = new List<Point>();
2546

    
2547
            Undo_data UndoData = new Undo_data()
2548
            {
2549
                IsUndo = false,
2550
                Event = Event_Type.Thumb,
2551
                EventTime = DateTime.Now,
2552
                Markup_List = new List<Multi_Undo_data>(),
2553
            };
2554

    
2555
            Multi_Undo_data multi_Undo_Data = new Multi_Undo_data();
2556

    
2557
            foreach (var control in MemberSet)
2558
            {
2559
                multi_Undo_Data.PointSet = new List<Point>();
2560
                p_set = new List<Point>();
2561

    
2562
                if(control.DrawingData as TextControl != null)
2563
                {
2564
                    multi_Undo_Data.PointSet.Add((control.DrawingData as TextControl).StartPoint);
2565
                    multi_Undo_Data.PointSet.Add((control.DrawingData as TextControl).EndPoint);
2566
                }
2567

    
2568
                foreach (var point in ((control.DrawingData as CommentUserInfo) as IPath).PointSet)
2569
                {
2570
                    multi_Undo_Data.PointSet.Add(point);
2571
                }
2572

    
2573
                multi_Undo_Data.Angle = AngleValue;
2574

    
2575
                multi_Undo_Data.Markup = control.DrawingData as CommentUserInfo;
2576
                UndoData.Markup_List.Add(multi_Undo_Data);
2577
                multi_Undo_Data = new Multi_Undo_data();
2578
            }
2579
            ViewerDataModel.Instance.UndoDataList.Where(data => data.IsUndo == true).ToList().ForEach(i =>
2580
            {
2581
                ViewerDataModel.Instance.UndoDataList.Remove(i);
2582
            });
2583

    
2584
            ViewerDataModel.Instance.UndoDataList.Add(UndoData);
2585

    
2586
        }
2587

    
2588
        private void drag_DragCompleted(object sender, DragCompletedEventArgs e)
2589
        {
2590
            //CustomCursor.SetCursorTemplate(DragThumb, null);
2591
            DragThumb.Cursor = Cursors.Arrow;
2592

    
2593
            Undo_Event();
2594
        }
2595

    
2596
        public void ControlPointMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
2597
        {
2598
            AdornerMember control = MemberSet.FirstOrDefault();
2599

    
2600
            if ((control.DrawingData as ArrowTextControl) != null && DraggerThumb == null)
2601
            {
2602
                if ((control.DrawingData as ArrowTextControl).isTrans == false && (control.DrawingData as ArrowTextControl).isFixed == false)
2603
                {
2604
                    (control.DrawingData as ArrowTextControl).isTrans = true;
2605
                }
2606
            }
2607

    
2608
        }
2609

    
2610
        public void TextControlChanger()
2611
        {
2612
            if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
2613
            {
2614
                TextControl AllControl = (MemberSet.First() as AdornerMember).DrawingData as TextControl;
2615
                AllControl.Base_TextBox.Focus();
2616
                AllControl.Base_TextBox.Visibility = Visibility.Visible;
2617
                AllControl.Base_TextBlock.Visibility = Visibility.Collapsed;
2618
                AllControl.Base_TextBox.Focus();
2619
                AllControl.SizeChanged += (sen, ea) =>
2620
                {
2621
                    if (AllControl.Base_TextBox != null)
2622
                    {
2623
                        RectangleGeometry Data = new RectangleGeometry
2624
                        {
2625
                            Rect = new Rect()
2626
                            {
2627
                                X = AllControl.StartPoint.X,
2628
                                Y = AllControl.StartPoint.Y,
2629
                                Width = AllControl.Base_TextBox.Width,
2630
                                Height = AllControl.Base_TextBox.Height,
2631
                            }
2632
                        };
2633

    
2634
                        Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
2635
                        Point middle = MathSet.getMiddlePoint(AllControl.StartPoint, endPointV);
2636
                        AllControl.Base_Grid.RenderTransform = new RotateTransform()
2637
                        {
2638
                            Angle = AllControl.Angle,
2639
                            CenterX = middle.X,
2640
                            CenterY = middle.Y,
2641
                        };
2642
                    }
2643
                    BorderUpdate();
2644
                };
2645
            }
2646
        }
2647

    
2648
        private void RectThumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) //더블클릭
2649
        {
2650
            if (e.ClickCount == 2 && MemberSet.Count == 1)
2651
            {
2652

    
2653
                if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
2654
                {
2655
                    TextControlChanger();
2656
                    //    TextControl AllControl = (MemberSet.First() as AdornerMember).DrawingData as TextControl;
2657
                    //    AllControl.Base_TextBox.Focus();
2658
                    //    AllControl.Base_TextBox.Visibility = Visibility.Visible;
2659
                    //    AllControl.Base_TextBlock.Visibility = Visibility.Collapsed;
2660
                    //    AllControl.Base_TextBox.Focus();
2661
                    //    AllControl.SizeChanged += (sen, ea) =>
2662
                    //    {
2663
                    //        if (AllControl.Base_TextBox != null)
2664
                    //        {   
2665
                    //            RectangleGeometry Data = new RectangleGeometry
2666
                    //            {
2667
                    //                Rect = new Rect()
2668
                    //                {
2669
                    //                    X = AllControl.StartPoint.X,
2670
                    //                    Y = AllControl.StartPoint.Y,
2671
                    //                    Width = AllControl.Base_TextBox.Width,
2672
                    //                    Height = AllControl.Base_TextBox.Height,
2673
                    //                }
2674
                    //            };
2675

    
2676
                    //            Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
2677
                    //            Point middle = MathSet.getMiddlePoint(AllControl.StartPoint, endPointV);
2678
                    //            AllControl.Base_Grid.RenderTransform = new RotateTransform()
2679
                    //            {
2680
                    //                Angle = AllControl.Angle,
2681
                    //                CenterX = middle.X,
2682
                    //                CenterY = middle.Y,
2683
                    //            };
2684
                    //        }
2685
                    //        BorderUpdate();
2686
                    //    };
2687
                }
2688

    
2689
                else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "ArrowTextControl")
2690
                {
2691
                    ArrowTextControl AllControl = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
2692
                    Thumb tm = (MemberSet.First() as AdornerMember).ThumbList.Last();
2693
                    ((ArrowTextControl)AllControl).Base_TextBox.Focus();
2694

    
2695
                    //강인구 추가(ArrowControl TextBox Thumb없애기
2696
                    tm.Visibility = Visibility.Collapsed;
2697

    
2698
                    ((MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl).Base_TextBox.IsHitTestVisible = true;
2699

    
2700
                    //(sender as System.Windows.Shapes.Rectangle).IsHitTestVisible = false;
2701
                    //(sender as System.Windows.Shapes.Rectangle).Visibility = Visibility.Hidden;
2702
                    //Canvas.SetZIndex(((ArrowTextControl)AllControl).Base_TextBox,9999);
2703
                    //editTextBox = ((ArrowTextControl)AllControl).Base_TextBox;
2704
                    //editTextBox.Style = ((ArrowTextControl)AllControl).Base_TextBox.Style;
2705
                    //editTextBox.Text = (AllControl as ArrowTextControl).ArrowText;
2706
                    //editTextBox.FontSize = (AllControl as ArrowTextControl).FontSize;
2707
                    //editTextBox.Foreground = (AllControl as ArrowTextControl).Foreground;
2708
                    //editTextBox.FontWeight = (AllControl as ArrowTextControl).FontWeight;
2709

    
2710
                    //(AllControl as ArrowTextControl).Base_TextBox.Visibility = Visibility.Collapsed;
2711
                    //editTextBox = (AllControl as ArrowTextControl).Base_TextBox;
2712
                    //editTextBox.TextChanged += (sen, ea) =>
2713
                    //  {
2714
                    //      ((ArrowTextControl)AllControl).ArrowText = editTextBox.Text;
2715
                    //  };
2716

    
2717

    
2718
                    //(sender as System.Windows.Shapes.Rectangle).Visibility = Visibility.Hidden;
2719
                    //((ArrowTextControl)AllControl).Base_TextBox.Background = new SolidColorBrush(Colors.Blue);
2720
                    //((ArrowTextControl)AllControl).Base_TextBox.Opacity = 1;
2721
                    //((ArrowTextControl)AllControl).Base_TextBox.Focus();
2722

    
2723
                    ((ArrowTextControl)AllControl).Base_TextBox.SizeChanged += (sen, ea) =>
2724

    
2725
                    {
2726
                        tm.Width = (AllControl as ArrowTextControl).BoxWidth;
2727
                        tm.Height = (AllControl as ArrowTextControl).BoxHeight;
2728

    
2729
                        List<Point> ps = new List<Point>();
2730
                        //RotateTransform myRotateTransform = new RotateTransform();
2731

    
2732

    
2733
                        //if (control.Angle == -270)
2734
                        //{
2735
                        //    myRotateTransform.Angle = 90;
2736
                        //    myRotateTransform.CenterX = Canvas.GetLeft(control.Base_TextBox);
2737
                        //    myRotateTransform.CenterY = Canvas.GetTop(control.Base_TextBox);
2738
                        //}
2739
                        //else if (control.Angle == -90)
2740
                        //{
2741
                        //    myRotateTransform.Angle = 270;
2742
                        //    myRotateTransform.CenterX = Canvas.GetLeft(control.Base_TextBox);
2743
                        //    myRotateTransform.CenterY = Canvas.GetTop(control.Base_TextBox);
2744
                        //}
2745
                        //TransformGroup myTransformGroup = new TransformGroup();
2746
                        //myTransformGroup.Children.Add(myRotateTransform);
2747

    
2748
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth / 2, Canvas.GetTop(AllControl.Base_TextBox))); //상단
2749
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth / 2, Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight)); // 하단
2750
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox), Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight / 2)); //좌단
2751
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth, Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight / 2));  //우단
2752

    
2753

    
2754

    
2755

    
2756
                        var endP = MathSet.getNearPoint(ps, AllControl.MidPoint);
2757
                        var tempP = MathSet.getMiddlePoint(AllControl.StartPoint, endP);
2758
                        if (AllControl.isTrans)
2759
                        {
2760
                            Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], AllControl.MidPoint.X);
2761
                            Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], AllControl.MidPoint.Y);
2762
                        }
2763
                        else
2764
                        {
2765
                            Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
2766
                            Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);
2767
                        }
2768

    
2769
                        
2770
                        BorderUpdate();
2771
                        
2772
                    };
2773
                }
2774
                else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "DateControl")
2775
                {
2776
                    DateControl data = (MemberSet.First() as AdornerMember).DrawingData as DateControl;
2777
                    CalendarControl instanceCal = new CalendarControl(data.Text);
2778
                    //dropData.IsOpen = true;
2779
                    RadWindow rc = new RadWindow();
2780
                    rc.Width = 300;
2781
                    rc.Height = 300;
2782
                    rc.Header = "Change Date";
2783
                    rc.Content = instanceCal;
2784
                    rc.BorderThickness = new Thickness(3);
2785
                    rc.ResizeMode = ResizeMode.NoResize;
2786
                    rc.WindowStartupLocation = WindowStartupLocation.CenterScreen;
2787
                    rc.ModalBackground = new SolidColorBrush(Colors.Black);
2788
                    rc.ModalBackground.Opacity = 0.6;
2789
                    Telerik.Windows.Controls.StyleManager.SetTheme(rc, new Telerik.Windows.Controls.Windows8Theme());
2790
                    instanceCal.changeDateCal.SelectionChanged += (sen, ea) =>
2791
                    {
2792
                        data.Text = instanceCal.changeDateCal.SelectedDate.Value.ToShortDateString();
2793
                        rc.Close();
2794
                    };
2795
                    rc.ShowDialog();
2796
                    //CalendarControl.xaml
2797
                }
2798
                else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "ArcControl")
2799
                {
2800
                    ArcControl instance = ((MemberSet.First() as AdornerMember).DrawingData as ArcControl);
2801
                    if (instance.isTransOn)
2802
                    {
2803
                        instance.isTransOn = false;
2804
                    }
2805
                    else
2806
                    {
2807
                        instance.isTransOn = true;
2808
                    }
2809
                    instance.SetArcPath();
2810
                    BorderUpdate();
2811
                }
2812
                //else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "CloudControl")
2813
                //{
2814
                //    CloudControl instance = ((MemberSet.First() as AdornerMember).DrawingData as CloudControl);
2815
                //    if (!instance.isChain)
2816
                //    {
2817
                //        if (instance.isTransOn)
2818
                //        {
2819
                //            instance.isTransOn = false;
2820
                //        }
2821
                //        else
2822
                //        {
2823
                //            instance.isTransOn = true;
2824
                //        }
2825

    
2826
                //        instance.SetCloud();
2827
                //        BorderUpdate();
2828
                //    }
2829
                //}
2830
                //else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "LineControl")
2831
                //{
2832
                //    LineControl instance = ((MemberSet.First() as AdornerMember).DrawingData as LineControl);
2833
                //    if (instance.LineStyle == LineControl.LineStyleSet.MultiLine)
2834
                //    {
2835
                //        instance.Interval += 1;
2836
                //        instance.SetLinePath();
2837
                //        BorderUpdate();
2838
                //    }
2839

    
2840
                //    //instance.SetCloud();
2841
                //    //BorderUpdate();
2842
                //}
2843

    
2844
            }
2845
            //if (e.ClickCount == 2 && AllControl.GetType().Name == "TextControl") // Edit Mode
2846
            //{
2847
            //    ((TextControl)AllControl).Base_TextBox.Focus();
2848
            //    ((TextControl)AllControl).Base_TextBox.Visibility = Visibility.Visible;
2849
            //    ((TextControl)AllControl).Base_TextBlock.Visibility = Visibility.Collapsed;
2850
            //}
2851
            //if (e.ClickCount == 2 && AllControl.GetType().Name == "ArrowTextControl") // Edit Mode
2852
            //{
2853
            //    Thumb tm = (from kkk in this.ContainerContent.Children
2854
            //                where (kkk as FrameworkElement).Name == "LastThumb"
2855
            //                select kkk).FirstOrDefault() as Thumb;
2856
            //    ((ArrowTextControl)AllControl).Base_TextBox.Focus();
2857
            //    ((ArrowTextControl)AllControl).Base_TextBox.SizeChanged += (sen, ea) =>
2858
            //    {
2859
            //        tm.Width = (AllControl as ArrowTextControl).BoxWidth;
2860
            //        tm.Height = (AllControl as ArrowTextControl).BoxHeight;
2861
            //        Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width / 2));
2862
            //        Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height / 2));
2863
            //        Canvas.SetLeft((AllControl as ArrowTextControl).Base_TextBox, (AllControl.EndPoint.X - tm.Width / 2));
2864
            //        Canvas.SetTop((AllControl as ArrowTextControl).Base_TextBox, (AllControl.EndPoint.Y - tm.Height / 2));
2865
            //    };
2866
            //}
2867
        }
2868
        #endregion
2869

    
2870
        private void DragThumb_MouseDoubleClick(object sender, MouseButtonEventArgs e)
2871
        {
2872
            if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl" || (MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "ArrowTextControl")
2873
            {
2874
                DragThumb.Visibility = Visibility.Collapsed;
2875
            }   
2876
        }
2877

    
2878
        //private void testText_Loaded(object sender, RoutedEventArgs e)
2879
        //{
2880
        //    editTextBox = sender as TextBox;
2881
        //}
2882
    }
2883
}
클립보드 이미지 추가 (최대 크기: 500 MB)