프로젝트

일반

사용자정보

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

markus / KCOM / Controls / AdornerFinal.xaml.cs @ eb2b9248

이력 | 보기 | 이력해설 | 다운로드 (155 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
        #endregion
52
        #region 생성자
53
        private void RadDropDownButton_Loaded(object sender, RoutedEventArgs e)
54
        {
55
            dropData = sender as RadDropDownButton;
56
        }
57
        private void Date_Calendar_Loaded(object sender, RoutedEventArgs e)
58
        {
59
            dropCalendar = sender as RadCalendar;
60
            dropCalendar.SelectionChanged += (sen, ea) =>
61
            {
62
                dropData.IsOpen = false;
63
                if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "DateControl")
64
                {
65
                    DateControl data = (MemberSet.First() as AdornerMember).DrawingData as DateControl;
66
                    data.Text = dropCalendar.SelectedDate.Value.ToShortDateString();
67
                }
68
            };
69
        }
70
        public AdornerFinal()
71
        {
72
            InitializeComponent();
73
            MemberSet = new List<AdornerMember>();
74
            BorderSize = new Rect();
75
            _dragData.Add(rotateTop, new DragData() { CursorAngle = 0, DragType = DragType.Rotate, RotateIsLeft = true, RotateIsTop = true });
76
            //_dragData.Add(rotateCenter, new DragData() { CursorAngle = 0, DragType = DragType.Rotate, RotateIsLeft = true, RotateIsTop = true });
77
        }
78

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

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

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

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

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

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

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

    
250

    
251
                    DragThumb.RenderTransformOrigin = new Point(0.0, 0.0);
252
                    DragThumb.RenderTransform = new RotateTransform()
253
                    {
254
                        Angle = (member as TextControl).Angle,
255
                        //CenterX = middle.X,
256
                        //CenterY = middle.Y,
257
                    };
258

    
259
                    AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0);
260
                    AdornerBorder.RenderTransform = new RotateTransform()
261
                    {
262
                        Angle = (member as TextControl).Angle,
263
                        //CenterX = middle.X,
264
                        //CenterY = middle.Y,
265
                    };
266
                    Observable.FromEventPattern(((TextControl)member), "PropertyChanged").Subscribe(a =>
267
                    {
268
                        TextCompensation = true;
269
                        BorderUpdate();
270
                        ((TextControl)member).Base_TextBlock.TextDecorations = ((TextControl)member).UnderLine;
271
                    });
272
                    Observable.FromEventPattern(((TextControl)member).Base_TextBox, "LostFocus").Subscribe(a =>
273
                    {
274
                        TextCompensation = false;
275
                        BorderUpdate();
276
                        if ((a.Sender as TextBox).Text == "") //보류
277
                        {
278
                            this.ContainerContent.Children.Remove(member);
279
                            this.Visibility = Visibility.Collapsed;
280
                        }
281

    
282
                        //((TextControl)member).UnEditingMode();
283
                        //((TextControl)member).Base_TextBlock.Visibility = Visibility.Collapsed;
284
                        //((TextControl)member).Base_Border.Visibility = Visibility.Collapsed;
285
                        //((TextControl)member).Base_TextPath.Visibility = Visibility.Collapsed;
286
                    });
287
                    break;
288
                default:
289
                    break;
290
                    #endregion
291
            }
292
            if (member.GetType().Name == "TextControl")
293
            {
294
                TextControl content = ((TextControl)member);
295
                content.StartPoint = new Point(Canvas.GetLeft(content), Canvas.GetTop(content));
296
                content.EndPoint = content.StartPoint;
297

    
298
                //RegistryPoint(AllControl.PointSet);
299
            }
300
            else
301
            {
302
                RegistryPoint(member);
303
            }
304
            BorderUpdate();
305
        }
306

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

    
393
                            }
394

    
395
                        });
396
                        Observable.FromEventPattern(((TextControl)member).Base_TextBox, "SelectionChanged").Subscribe(a =>
397
                        {
398
                            BorderUpdate();
399
                        });
400
                        break;
401
                    default:
402
                        break;
403
                        #endregion
404
                }
405
                if (member.GetType().Name == "TextControl")
406
                {
407
                    //강인구 추가
408
                    TextControl content = ((TextControl)member);
409
                    content.StartPoint = new Point(Canvas.GetLeft(content), Canvas.GetTop(content));
410
                    content.EndPoint = content.StartPoint;
411
                    //RegistryPoint(AllControl.PointSet);
412
                }
413
                else
414
                {
415
                    RegistryPoint(member, members.Count);
416
                }
417
            }
418

    
419
            BorderUpdate();
420
        }
421

    
422
        /// <summary>
423
        /// Border 를 갱신
424
        /// </summary>
425
        public void BorderUpdate()
426
        {
427
            AdornerBorder.MinWidth = 10;
428
            AdornerBorder.MinHeight = 10;
429

    
430
            double minX = 10000;
431
            double minY = 10000;
432
            double maxX = 0;
433
            double maxY = 0;
434

    
435
            if (MemberSet.Count == 1)
436
            {
437
                if (MemberSet.First().DrawingData.GetType().Name == "TextControl")
438
                {
439
                    if ((MemberSet.First().DrawingData as TextControl).Angle != 0)
440
                    {
441
                        trRotate.Angle = (MemberSet.First().DrawingData as TextControl).Angle;
442
                        trRotateThumb.Angle = (MemberSet.First().DrawingData as TextControl).Angle;
443
                    }
444
                    else
445
                    {
446
                        trRotate.Angle = 0;
447
                        trRotateThumb.Angle = 0;
448
                    }
449
                }
450
            }
451
            foreach (var item in MemberSet)
452
            {
453
                UIElement currentControl = (item as AdornerMember).DrawingData;
454
                if (item.DrawingData.GetType().Name == "TextControl")
455
                {
456
                    double textControlWidth;
457
                    double textControlHeight;
458
                    if (((currentControl as TextControl).Base_TextBox.ActualWidth) == 0)
459
                    {
460
                        textControlWidth = ((currentControl as TextControl).Base_TextBlock.ActualWidth);
461
                        textControlHeight = ((currentControl as TextControl).Base_TextBlock.ActualHeight);
462
                    }
463
                    else
464
                    {
465
                        textControlWidth = ((currentControl as TextControl).Base_TextBox.ActualWidth);
466
                        textControlHeight = ((currentControl as TextControl).Base_TextBox.ActualHeight);
467
                    }
468
                    if ((currentControl as TextControl).LineSize.Left == 0)
469
                    {
470
                        if (TextCompensation)
471
                        {
472

    
473
                            textControlWidth += 1;
474
                            textControlHeight += 1;
475
                        }
476
                        else
477
                        {
478
                            textControlWidth += 3;
479
                            textControlHeight += 3;
480
                        }
481
                    }
482
                    else
483
                    {
484
                        if (TextCompensation)
485
                        {
486

    
487
                            textControlWidth += 1;
488
                            textControlHeight += 1;
489
                        }
490
                        else
491
                        {
492
                            textControlWidth += 8;
493
                            textControlHeight += 8;
494
                        }
495

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

    
565
                    //Rect rt = new Rect((currentControl as IPath).StartPoint, (currentControl as IPath).EndPoint);
566
                    //if (rt.Left < minX) minX = rt.Left;
567
                    //if (rt.Top < minY) minY = rt.Top;
568
                    //if (rt.Right > maxX) maxX = rt.Right;
569
                    //if (rt.Bottom > maxY) maxY = rt.Bottom;
570

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

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

    
609
            DragThumb.Width = ac.Width;
610
            DragThumb.Height = ac.Height;
611

    
612
            DragThumb.MinWidth = 10;
613
            DragThumb.MinHeight = 10;
614
            if (addWidthSize)
615
            {
616
                Canvas.SetLeft(DragThumb, minX - 5);
617
            }
618
            else
619
            {
620
                Canvas.SetLeft(DragThumb, minX);
621
            }
622

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

    
678
                MemberSet.Last().ThumbList.Add(tm);
679

    
680
                if (markT == ControlType.ArcLine && list[i] == (member as ArcControl).MidPoint)
681
                {
682
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbArcControlStyle"];
683
                }
684
                if (member.GetType().Name == "ArrowTextControl" && i == 1)
685
                {
686
                    //if (MemberSet.Count()<=1)
687
                    //{
688
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbArcControlStyle"];
689
                    List<Point> ps = new List<Point>();
690

    
691
                    if ((MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl != null)
692
                    {
693
                        var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
694

    
695
                      
696
                        switch (Math.Abs(temp.Angle).ToString())
697
                        {
698
                            case "90":
699
                                {
700
                                    ps.Clear();
701
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
702
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); // 위 중간
703
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), 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))); //왼쪽 중간
706
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 하단
707

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

    
711
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 중간
712
                                }
713
                                break;
714
                            case "270":
715
                                {
716
                                    ps.Clear();
717
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
718
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); // 위 중간
719
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), 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))); //왼쪽 중간
722
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 하단
723

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

    
727
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 중간
728
                                }
729
                                break;
730
                            default:
731
                                {
732
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
733
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
734
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
735
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
736
                                }
737
                                break;
738
                        }
739

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

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

    
819
                if (member.GetType().Name == "CloudControl")
820
                {
821
                    if (i == list.Count() - 1)
822
                    {
823
                        tm.Visibility = System.Windows.Visibility.Collapsed;
824
                    }
825
                }
826
                if (member.GetType().Name == "PolygonControl")
827
                {
828
                    if (i == list.Count() - 1)
829
                    {
830
                        if ((member as PolygonControl).ControlType == ControlType.ChainLine)
831
                        {
832

    
833
                        }
834
                        else
835
                        {
836
                            tm.Visibility = System.Windows.Visibility.Collapsed;
837
                        }
838
                    }
839
                    if ((member as PolygonControl).ControlType == ControlType.Ink)
840
                    {
841
                        tm.Visibility = System.Windows.Visibility.Collapsed;
842
                    }
843
                }
844

    
845
                //강인구 텀브 없애기 보류
846
                //if(cnt > 1)
847
                //{
848
                //    tm.Visibility = System.Windows.Visibility.Collapsed;
849
                //}
850

    
851

    
852

    
853
                //if (member.GetType().Name == "InkControl")
854
                //{
855
                //    tm.Visibility = System.Windows.Visibility.Collapsed;
856
                //}
857

    
858
                this.ContainerContent.Children.Add(tm);
859
                Canvas.SetLeft(tm, list[count].X);
860
                Canvas.SetTop(tm, list[count].Y);
861
                if (member.GetType().Name == "ArrowTextControl" && list[i] == (member as ArrowTextControl).MidPoint)
862
                {
863
                    Canvas.SetZIndex(tm, 95);
864
                }
865
                else
866
                {
867
                    Canvas.SetZIndex(tm, 99);
868
                }
869

    
870
                tm.DragStarted += new DragStartedEventHandler(tm_DragStarted);
871
                tm.DragCompleted += new DragCompletedEventHandler(tm_DragCompleted);
872
                tm.DragDelta += ResizeTm_DragDelta;
873
                tm.MouseMove += new MouseEventHandler(resize_MouseMove);
874
                count++;
875
            }
876
        }
877

    
878
        private void ResizeTm_DragDelta(object sender, DragDeltaEventArgs e)
879
        {
880
            //한개 이상 선택 시 Resize 금지
881
            if (MemberSet.Count > 1)
882
                return;
883
            if (reSizePoint != new Point(0, 0))
884
            {
885
                Thumb thumb = sender as Thumb;
886

    
887
                Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) +
888
                              e.HorizontalChange);
889
                Canvas.SetTop(thumb, Canvas.GetTop(thumb) +
890
                                        e.VerticalChange);
891

    
892
                Point setPoint = new Point(Canvas.GetLeft(thumb), Canvas.GetTop(thumb));
893

    
894

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

    
910
                    var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
911
                    List<Point> ps = new List<Point>();
912

    
913
                    nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
914
                    //switch (Math.Abs(temp.Angle).ToString())
915
                    //{
916

    
917
                    //    case "90":
918
                    //        {
919
                    //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
920
                    //        }
921
                    //        break;
922
                    //    case "270":
923
                    //        {
924
                    //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
925
                    //        }
926
                    //        break;
927
                    //    default:
928
                    //        {
929
                    //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
930
                    //        }
931
                    //        break;
932
                    //}
933

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

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

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

    
975
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
976
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
977
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
978
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
979
                                    [ReverseP].Y
980
                                    + PreviousV.Y * l);
981

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

    
1026
                                var NextV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[NextP]);
1027
                                l = MathSet.DotProduct(NextV.X, NextV.Y, newPointSet[i].X - newPointSet[ReverseP].X, newPointSet[i].Y
1028
                                    - newPointSet[ReverseP].Y);
1029
                                newPointSet[NextP] = new Point(newPointSet[ReverseP].X + NextV.X * l, newPointSet[ReverseP].Y + NextV.Y * l);
1030

    
1031
                                AllControl.PointSet = newPointSet;
1032
                                DynamicThumbUpdate(control);
1033
                                AllControl.updateControl();
1034
                                BorderUpdate();
1035
                            }
1036
                            break;
1037
                        #endregion
1038
                        #region ArrowText
1039
                        case ControlType.ArrowTextControl:
1040
                            if (nearPoint.Equals(AllControl.PointSet[i]))
1041
                            {
1042
                                AllControl.PointSet[i] = setPoint;
1043
                                AllControl.updateControl();
1044

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

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

    
1074
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1075
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1076
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1077
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1078
                                    [ReverseP].Y
1079
                                    + PreviousV.Y * l);
1080

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

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

    
1104
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1105
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1106
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1107
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1108
                                    [ReverseP].Y
1109
                                    + PreviousV.Y * l);
1110

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

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

    
1144
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1145
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1146
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1147
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1148
                                    [ReverseP].Y
1149
                                    + PreviousV.Y * l);
1150

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

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

    
1171
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1172
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1173
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1174
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1175
                                    [ReverseP].Y
1176
                                    + PreviousV.Y * l);
1177

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

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

    
1198
                                var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1199
                                var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1200
                                    AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1201
                                AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1202
                                    [ReverseP].Y
1203
                                    + PreviousV.Y * l);
1204

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

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

    
1225
                        //        var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1226
                        //        var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1227
                        //            AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1228
                        //        AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1229
                        //            [ReverseP].Y
1230
                        //            + PreviousV.Y * l);
1231

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

    
1261

    
1262

    
1263
        #endregion
1264
        #region 이벤트
1265

    
1266
        void tm_DragCompleted(object sender, DragCompletedEventArgs e)
1267
        {
1268
            this.isDragging = false;
1269
            DraggerThumb = null;
1270

    
1271
            Undo_Event();
1272
        }
1273

    
1274
        void tm_DragStarted(object sender, DragStartedEventArgs e)
1275
        {
1276
            this.DraggerThumb = sender as Thumb;
1277
            this.isDragging = true;
1278

    
1279
            if (ViewerDataModel.Instance.UndoDataList == null)
1280
            {
1281
                return;
1282
            }
1283

    
1284
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Event == Event_Type.Thumb)
1285
            {
1286
                return;
1287
            }
1288

    
1289
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List != null)
1290
            {
1291
                if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.Count > 0)
1292
                {
1293
                    if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.FirstOrDefault().PointSet != null)
1294
                    {
1295
                        return;
1296
                    }
1297
                }
1298
            }
1299

    
1300
            Undo_Event();
1301
        }
1302

    
1303
        private void rotate_MouseMove(object sender, MouseEventArgs e)
1304
        {
1305

    
1306
            //double LastRotateHorizontalValue = 0;
1307
            //double LastRotateVerticalValue = 0;
1308
            //double LastWidthValue = 0;
1309
            //double SetWidth = 0;
1310

    
1311

    
1312
            if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
1313
            {
1314
                if (LastRotateVerticalValue < e.GetPosition(this).X)
1315
                    IsTextAngle = true;
1316
                else
1317
                    IsTextAngle = false;
1318

    
1319
                System.Diagnostics.Debug.WriteLine("X축 : " + e.GetPosition(this).X + "LastRotateVerticalValue : " + LastRotateVerticalValue);
1320
                LastRotateVerticalValue = e.GetPosition(this).X;
1321
            }
1322
            else
1323
            {
1324
                System.Diagnostics.Debug.WriteLine("e.GetPosition(this).X : " + e.GetPosition(this).X);
1325
                System.Diagnostics.Debug.WriteLine("LastRotateHorizontalValue: " + LastRotateHorizontalValue);
1326

    
1327
                if (e.GetPosition(this).X > LastRotateHorizontalValue)
1328
                {
1329
                    RotateFlag = true;
1330
                }
1331
                else
1332
                {
1333
                    RotateFlag = false;
1334
                }
1335
                LastRotateHorizontalValue = e.GetPosition(this).X;
1336
            }
1337
        }
1338

    
1339
        private void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
1340
        {
1341
            DragThumb.Cursor = Cursors.SizeAll;
1342
            Thumb thumb = sender as Thumb;
1343
            MoveAdorner(e);
1344
        }
1345

    
1346
        public void MoveAdorner(DragDeltaEventArgs e)
1347
        {
1348
            Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
1349

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

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

    
1407

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

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

    
1472
                        Point px = new Point(e.HorizontalChange, e.VerticalChange);
1473
                        List<StylusPointSet> StylusPointSet = (item.DrawingData as InkControl).PointC;
1474
                        for (int i = 0; i < StylusPointSet.Count; i++)
1475
                        {
1476
                            List<Point> lstPoint = StylusPointSet[i].pointSet;
1477
                            for (int j = 0; j < lstPoint.Count; j++)
1478
                            {
1479
                                lstPoint[j] = new Point(lstPoint[j].X + px.X, lstPoint[j].Y + px.Y);
1480
                            }
1481
                        }
1482

    
1483
                        for (int i = 0; i < item.ThumbList.Count; i++)
1484
                        {
1485
                            Canvas.SetLeft(item.ThumbList[i], Canvas.GetLeft(item.ThumbList[i]) + px.X);
1486
                            Canvas.SetTop(item.ThumbList[i], Canvas.GetTop(item.ThumbList[i]) + px.Y);
1487
                        }
1488
                        (item.DrawingData as IPath).updateControl();
1489
                        BorderUpdate();
1490

    
1491
                    }
1492
                    #endregion
1493
                    BorderUpdate();
1494
                }
1495
            }));
1496
        }
1497

    
1498
        public void DynamicThumbUpdate(DragDeltaEventArgs e, AdornerMember item)
1499
        {
1500
            var AllControl = item.DrawingData as IPath;
1501
            List<Point> point = AllControl.PointSet;
1502
            //for (int i = 0; i < AllControl.PointSet.Count(); i++)
1503
            for (int i = 0; i < item.ThumbList.Count(); i++)
1504
            {
1505

    
1506
                if (item.DrawingData.GetType().Name == "ArrowTextControl")
1507
                {
1508
                    Point dx = MathSet.RotateAbout(new Point(0, 0), new Point(e.HorizontalChange, e.VerticalChange), trRotate.Angle);
1509
                    AllControl.PointSet[i] = new Point { X = point[i].X + dx.X, Y = point[i].Y + dx.Y };
1510
                    AllControl.updateControl();
1511
                    Canvas.SetLeft(item.ThumbList[i], Canvas.GetLeft(item.ThumbList[i]) + dx.X);
1512
                    Canvas.SetTop(item.ThumbList[i], Canvas.GetTop(item.ThumbList[i]) + dx.Y);
1513

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

    
1528
        public void DynamicThumbUpdate(AdornerMember item)
1529
        {
1530
            var AllControl = item.DrawingData as IPath;
1531
            List<Point> point = AllControl.PointSet;
1532

    
1533
            //if (item.DrawingData as ArrowTextControl !=null)
1534
            //{
1535
            //    for (int i = 0; i < AllControl.PointSet.Count(); i++)
1536
            //    {
1537
            //        if ((MemberSet.First() as AdornerMember).ThumbList[1]d)
1538
            //        {
1539

    
1540
            //        }
1541
            //    }
1542
            //    List<Point> ps = new List<Point>();
1543
            //    var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
1544
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
1545
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
1546
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
1547
            //    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
1548

    
1549
            //    var endP = MathSet.getNearPoint(ps, temp.MidPoint);
1550
            //    var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
1551
            //    Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
1552
            //    Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);    
1553
            //}
1554
            //else
1555
            //{
1556
            for (int i = 0; i < AllControl.PointSet.Count(); i++)
1557
            {
1558

    
1559
                Canvas.SetLeft(item.ThumbList[i], AllControl.PointSet[i].X);
1560
                Canvas.SetTop(item.ThumbList[i], AllControl.PointSet[i].Y);
1561
            }
1562

    
1563

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

    
1577

    
1578

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

    
1618
        public void Set_Rotate()
1619
        {
1620

    
1621
            double dDeltaAngle = 0;
1622
            List<Point> AllPointSet = new List<Point>();
1623
            Point CenterPoint = new Point();
1624

    
1625

    
1626
            if (AngleValue >= 360)
1627
            {
1628
                AngleValue -= 360;
1629
            }
1630
            else if (AngleValue <= -360)
1631
            {
1632
                AngleValue += 360;
1633
            }
1634

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

    
1651
            CenterPoint = MathSet.FindCentroid(AllPointSet);
1652

    
1653
            Dispatcher.BeginInvoke((Action)(() =>
1654
            {
1655
                foreach (var item in MemberSet)
1656
                {
1657
                    foreach (var thumb in item.ThumbList)
1658
                    {
1659
                        double x = Canvas.GetLeft(thumb);
1660
                        double y = Canvas.GetTop(thumb);
1661

    
1662
                        Point value = MathSet.RotateAbout(CenterPoint, new Point(x, y), dDeltaAngle);
1663
                        Canvas.SetLeft(thumb, value.X);
1664
                        Canvas.SetTop(thumb, value.Y);
1665

    
1666
                        if (item.DrawingData.GetType().Name == "ArrowTextControl" && thumb == item.ThumbList.Last())
1667
                        {
1668

    
1669
                            Canvas.SetLeft(thumb, Canvas.GetLeft((item.DrawingData as ArrowTextControl).Base_TextBox));
1670
                            Canvas.SetTop(thumb, Canvas.GetTop((item.DrawingData as ArrowTextControl).Base_TextBox));
1671
                            if (!(item.DrawingData as ArrowTextControl).isTrans)
1672
                            {
1673
                                List<Point> ps = new List<Point>();
1674
                                var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
1675
                                switch (Math.Abs(temp.Angle).ToString())
1676
                                {
1677
                                    case "90":
1678
                                        {
1679
                                            ps.Clear();
1680
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
1681
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); // 위 중간
1682
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), 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))); //왼쪽 중간
1685
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 하단
1686

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

    
1690
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 중간
1691
                                        }
1692
                                        break;
1693
                                    case "270":
1694
                                        {
1695
                                            ps.Clear();
1696
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
1697
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); // 위 중간
1698
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), 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))); //왼쪽 중간
1701
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 하단
1702

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

    
1706
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 중간
1707
                                        }
1708
                                        break;
1709
                                    default:
1710
                                        {
1711
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
1712
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
1713
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
1714
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
1715
                                        }
1716
                                        break;
1717
                                }
1718

    
1719
                                var endP = MathSet.getNearPoint(ps, temp.MidPoint);
1720
                                var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
1721
                                Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
1722
                                Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);
1723
                            }
1724
                        }
1725
                    }
1726

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

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

    
1756

    
1757
                            //AdornerBorder.RenderTransformOrigin = new Point(1, 1);
1758
                            //AdornerBorder.RenderTransform = new RotateTransform()
1759
                            //{
1760
                            //    Angle = (member as TextControl).Angle * -1,
1761
                            //    CenterX = middle.X + ((member as TextControl) as FrameworkElement).ActualWidth /2,
1762
                            //    CenterY = middle.Y + ((member as TextControl) as FrameworkElement).ActualHeight /2,
1763
                            //};
1764

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

    
1773
                            AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0);
1774
                            AdornerBorder.RenderTransform = new RotateTransform()
1775
                            {
1776
                                Angle = (item.DrawingData as TextControl).Angle,
1777
                                //CenterX = middle.X,
1778
                                //CenterY = middle.Y,
1779
                            };
1780

    
1781
                            (item.DrawingData as TextControl).Base_Grid.RenderTransform = new RotateTransform()
1782
                            {
1783
                                Angle = (item.DrawingData as TextControl).Angle,
1784
                            };
1785

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

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

    
1894
            //        var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
1895
            //        List<Point> ps = new List<Point>();
1896

    
1897
            //        nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1898
            //        //switch (Math.Abs(temp.Angle).ToString())
1899
            //        //{
1900

    
1901
            //        //    case "90":
1902
            //        //        {
1903
            //        //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1904
            //        //        }
1905
            //        //        break;
1906
            //        //    case "270":
1907
            //        //        {
1908
            //        //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1909
            //        //        }
1910
            //        //        break;
1911
            //        //    default:
1912
            //        //        {
1913
            //        //            nearPoint = MathSet.getNearPoint((control.DrawingData as IPath).PointSet, setPoint);
1914
            //        //        }
1915
            //        //        break;
1916
            //        //}
1917

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

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

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

    
1955
            //                    var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
1956
            //                    var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
1957
            //                        AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
1958
            //                    AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
1959
            //                        [ReverseP].Y
1960
            //                        + PreviousV.Y * l);
1961

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

    
2006
            //                    var NextV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[NextP]);
2007
            //                    l = MathSet.DotProduct(NextV.X, NextV.Y, newPointSet[i].X - newPointSet[ReverseP].X, newPointSet[i].Y
2008
            //                        - newPointSet[ReverseP].Y);
2009
            //                    newPointSet[NextP] = new Point(newPointSet[ReverseP].X + NextV.X * l, newPointSet[ReverseP].Y + NextV.Y * l);
2010

    
2011
            //                    AllControl.PointSet = newPointSet;
2012
            //                    DynamicThumbUpdate(control);
2013
            //                    AllControl.updateControl();
2014
            //                    BorderUpdate();
2015
            //                }
2016
            //                break;
2017
            //            #endregion
2018
            //            #region ArrowText
2019
            //            case ControlType.ArrowTextControl:
2020
            //                if (nearPoint.Equals(AllControl.PointSet[i]))
2021
            //                {
2022
            //                    AllControl.PointSet[i] = setPoint;
2023
            //                    AllControl.updateControl();
2024

    
2025
            //                    DynamicThumbUpdate(control);
2026
            //                    BorderUpdate();
2027

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

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

    
2054
            //                    var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
2055
            //                    var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
2056
            //                        AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
2057
            //                    AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
2058
            //                        [ReverseP].Y
2059
            //                        + PreviousV.Y * l);
2060

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

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

    
2094
            //            //        var PreviousV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[PreviousP]);
2095
            //            //        var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X,
2096
            //            //            AllControl.PointSet[i].Y - AllControl.PointSet[ReverseP].Y);
2097
            //            //        AllControl.PointSet[PreviousP] = new Point(AllControl.PointSet[ReverseP].X + PreviousV.X * l, AllControl.PointSet
2098
            //            //            [ReverseP].Y
2099
            //            //            + PreviousV.Y * l);
2100

    
2101
            //            //        var NextV = MathSet.GetNormVectorBetween(AllControl.PointSet[ReverseP], AllControl.PointSet[NextP]);
2102
            //            //        l = MathSet.DotProduct(NextV.X, NextV.Y, AllControl.PointSet[i].X - AllControl.PointSet[ReverseP].X, AllControl.PointSet
2103
            //            //            [i].Y - AllControl.PointSet[ReverseP].Y);
2104
            //            //        AllControl.PointSet[NextP] = new Point(AllControl.PointSet[ReverseP].X + NextV.X * l, AllControl.PointSet[ReverseP].Y +
2105
            //            //            NextV.Y * l);
2106
            //            //        AllControl.updateControl();
2107
            //            //        DynamicThumbUpdate(control);
2108
            //            //        BorderUpdate();
2109
            //            //    }
2110
            //            //    break;
2111
            //            #endregion
2112
            //            default:
2113
            //                break;
2114
            //        }
2115
            //    }
2116
            //}
2117
        }
2118
        /// <summary>
2119
        /// 회전
2120
        /// </summary>
2121
        /// <param name="sender"></param>
2122
        /// <param name="e"></param>
2123
        public void rotate_DragDelta(object sender, DragDeltaEventArgs e)
2124
        {
2125
            //DragThumb.Cursor = Cursors.SizeAll;
2126
            //System.Windows.Resources.StreamResourceInfo info = Application.GetResourceStream(new Uri("/KCOM;component/Resources/Images/AdornerImage/sync.cur", UriKind.Relative));
2127
            //rotateTop.Cursor = new System.Windows.Input.Cursor(info.Stream);
2128

    
2129
            //rotateTop.Cursor = new System.Windows.Input.Cursor("../sync.cur");
2130

    
2131
            //if(e.VerticalChange > 10)
2132
            //{
2133
            //    System.Diagnostics.Debug.WriteLine("Width" + ((e.Source as Thumb).Parent as Grid).Width);
2134
            //    System.Diagnostics.Debug.WriteLine("e.HorizontalChange : " + e.HorizontalChange);
2135
            //}
2136

    
2137
            MoveRotate(e);
2138
        }
2139

    
2140
        double LastRotateHorizontalValue = 0;
2141
        double LastRotateVerticalValue = 0;
2142
        double LastWidthValue = 0;
2143
        double SetWidth = 0;
2144
        bool RotateFlag = false;
2145

    
2146
        public void MoveRotate(DragDeltaEventArgs e)
2147
        {
2148
            double dDeltaAngle = 0;
2149

    
2150
            List<Point> AllPointSet = new List<Point>();
2151
            Point CenterPoint = new Point();
2152
            #region 회전율에 따른 DragDelta 값
2153

    
2154
            #region 원본소스
2155
            ////if (Math.Abs(e.HorizontalChange) > Math.Abs(e.VerticalChange))
2156
            ////{
2157
            //    //dDeltaAngle = +2;
2158
            //    //dDeltaAngle = (e.HorizontalChange / 20);
2159
            //    AngleValue = AngleValue + dDeltaAngle;
2160
            //    if (Math.Abs(e.HorizontalChange) > Math.Abs(e.VerticalChange))
2161
            //    {
2162
            //        if (LastRotateHorizontalValue < e.HorizontalChange)
2163
            //        {
2164
            //            dDeltaAngle = 2;
2165
            //            AngleValue = AngleValue + dDeltaAngle;
2166
            //        }
2167
            //        else
2168
            //        {
2169
            //            dDeltaAngle = -2;
2170
            //            AngleValue = AngleValue + dDeltaAngle;
2171
            //        }
2172
            //    }
2173
            //    //else
2174
            //    //{
2175
            //    //    if (LastRotateVerticalValue < e.VerticalChange)
2176
            //    //    {
2177
            //    //        dDeltaAngle = -2;
2178
            //    //        AngleValue = AngleValue + dDeltaAngle;
2179

    
2180
            //    //    }
2181
            //    //    else
2182
            //    //    {
2183
            //    //        dDeltaAngle = 2;
2184
            //    //        AngleValue = AngleValue + dDeltaAngle;
2185
            //    //    }
2186
            //    //}
2187
            ////}
2188
            ////else if (Math.Abs(e.HorizontalChange) < Math.Abs(e.VerticalChange))
2189
            ////{
2190
            ////    //dDeltaAngle = (e.VerticalChange / 20);
2191
            ////    dDeltaAngle = -2;
2192
            ////    AngleValue = AngleValue + dDeltaAngle;
2193
            ////} 
2194
            #endregion
2195

    
2196
            //강인구 수정
2197
            AngleValue = AngleValue + dDeltaAngle;
2198

    
2199
            if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name != "TextControl")
2200
            {
2201
                SetWidth = (((e.Source as Thumb).Parent as Grid).Width - LastWidthValue) / 2;
2202

    
2203

    
2204
                //System.Diagnostics.Debug.WriteLine("Width" + ((e.Source as Thumb).Parent as Grid).Width);
2205
                //System.Diagnostics.Debug.WriteLine("e.HorizontalChange : " + e.HorizontalChange);
2206
                //System.Diagnostics.Debug.WriteLine("e.VerticalChange : " + e.VerticalChange);
2207
                //System.Diagnostics.Debug.WriteLine("");
2208

    
2209
                //((e.Source as Thumb).Parent as Grid).Width
2210

    
2211
                if (Math.Abs(e.HorizontalChange) > Math.Abs(e.VerticalChange))
2212
                {
2213
                    //System.Diagnostics.Debug.WriteLine("e.HorizontalChange : " + e.HorizontalChange);
2214
                    //System.Diagnostics.Debug.WriteLine("e.VerticalChange : " + e.VerticalChange);
2215

    
2216
                    //if (LastRotateHorizontalValue < e.HorizontalChange)
2217
                    //if (LastRotateHorizontalValue < e.HorizontalChange + SetWidth)
2218
                    //if (LastRotateHorizontalValue + LastRotateVerticalValue < e.HorizontalChange + e.VerticalChange)
2219
                    if(RotateFlag)
2220
                    {
2221
                        dDeltaAngle = 5;
2222
                        AngleValue = AngleValue + dDeltaAngle;
2223
                    }
2224
                    else
2225
                    {
2226
                        dDeltaAngle = -5;
2227
                        AngleValue = AngleValue + dDeltaAngle;
2228
                    }
2229
                }
2230
            }
2231
            else
2232
            {
2233
                if (IsTextAngle || RotateFlag)
2234
                {
2235
                    AngleValue = ((MemberSet.First() as AdornerMember).DrawingData as TextControl).Angle + 5;
2236
                    //AngleValue = AngleValue + 2;
2237
                }
2238
                else
2239
                {
2240
                    AngleValue = ((MemberSet.First() as AdornerMember).DrawingData as TextControl).Angle - 5;
2241
                    //AngleValue = AngleValue - 2;
2242
                }
2243
            }
2244

    
2245
            //LastRotateHorizontalValue = e.HorizontalChange;
2246
            //LastRotateVerticalValue = e.VerticalChange;
2247
            //LastWidthValue = ((e.Source as Thumb).Parent as Grid).Width;
2248

    
2249
            //Set_Rotate();
2250

    
2251
            if (AngleValue >= 360)
2252
            {
2253
                AngleValue -= 360;
2254
                dDeltaAngle -= 360;
2255
            }
2256
            else if (AngleValue <= -360)
2257
            {
2258
                AngleValue += 360;
2259
                dDeltaAngle += 360;
2260
            }
2261
            #endregion
2262

    
2263
            #region 센터 포인트 구하기 (그룹핑)
2264
            foreach (var item in MemberSet)
2265
            {
2266
                if (item.DrawingData.GetType().Name == "TextControl")
2267
                {
2268
                }
2269
                else
2270
                {
2271
                    foreach (Point itemP in (item.DrawingData as IPath).PointSet)
2272
                    {
2273
                        AllPointSet.Add(itemP);
2274
                    }
2275
                }
2276
            }
2277
            #endregion
2278
            CenterPoint = MathSet.FindCentroid(AllPointSet);
2279

    
2280
            Dispatcher.BeginInvoke((Action)(() =>
2281
            {
2282
                foreach (var item in MemberSet)
2283
                {
2284
                    foreach (var thumb in item.ThumbList)
2285
                    {
2286
                        double x = Canvas.GetLeft(thumb);
2287
                        double y = Canvas.GetTop(thumb);
2288

    
2289
                        Point value = MathSet.RotateAbout(CenterPoint, new Point(x, y), dDeltaAngle);
2290
                        Canvas.SetLeft(thumb, value.X);
2291
                        Canvas.SetTop(thumb, value.Y);
2292

    
2293
                        if (item.DrawingData.GetType().Name == "ArrowTextControl" && thumb == item.ThumbList.Last())
2294
                        {
2295
                            Canvas.SetLeft(thumb, Canvas.GetLeft((item.DrawingData as ArrowTextControl).Base_TextBox));
2296
                            Canvas.SetTop(thumb, Canvas.GetTop((item.DrawingData as ArrowTextControl).Base_TextBox));
2297
                            if (!(item.DrawingData as ArrowTextControl).isTrans)
2298
                            {
2299
                                List<Point> ps = new List<Point>();
2300
                                
2301
                                //강인구 추가
2302
                                //var temp = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
2303
                                var temp = item.DrawingData as ArrowTextControl;
2304
                                switch (Math.Abs(temp.Angle).ToString())
2305
                                {
2306
                                    case "90":
2307
                                        {
2308
                                            ps.Clear();
2309
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
2310
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); // 위 중간
2311
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); // 위 오른쪽
2312

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

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

    
2319
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 중간
2320
                                        }
2321
                                        break;
2322
                                    case "270":
2323
                                        {
2324
                                            ps.Clear();
2325
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
2326
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); // 위 중간
2327
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); // 위 오른쪽
2328

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

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

    
2335
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 중간
2336
                                        }
2337
                                        break;
2338
                                    default:
2339
                                        {
2340
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
2341
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
2342
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
2343
                                            ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
2344
                                        }
2345
                                        break;
2346
                                }
2347

    
2348
                                var endP = MathSet.getNearPoint(ps, temp.MidPoint);
2349
                                var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
2350

    
2351
                                Canvas.SetLeft((MemberSet.Where(data => data.DrawingData.GetType().Name == "ArrowTextControl")).FirstOrDefault().ThumbList[1], tempP.X);
2352
                                Canvas.SetTop((MemberSet.Where(data => data.DrawingData.GetType().Name == "ArrowTextControl")).FirstOrDefault().ThumbList[1], tempP.Y);
2353
                                //Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
2354
                                //Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);
2355
                            }
2356
                        }
2357
                    }
2358

    
2359
                    for (int i = 0; i < (item.DrawingData as IPath).PointSet.Count(); i++)
2360
                    {
2361
                        (item.DrawingData as IPath).PointSet[i] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as IPath).PointSet[i], dDeltaAngle);
2362
                    }
2363
                }
2364
                #region 컨트롤 업데이트
2365
                foreach (var item in MemberSet)
2366
                {
2367
                    switch (item.Drawingtype)
2368
                    {
2369
                        case ControlType.TextControl:
2370
                            ((TextControl)item.DrawingData).Angle = AngleValue;
2371
                            //trRotate.Angle = AngleValue;
2372

    
2373
                            RectangleGeometry Data = new RectangleGeometry
2374
                            {
2375
                                Rect = new Rect()
2376
                                {
2377
                                    X = Canvas.GetLeft((item.DrawingData as TextControl)),
2378
                                    Y = Canvas.GetTop((item.DrawingData as TextControl)),
2379
                                    Width = (item.DrawingData as TextControl).Base_TextBlock.ActualWidth / 2,
2380
                                    Height = (item.DrawingData as TextControl).Base_TextBlock.ActualHeight / 2,
2381
                                }
2382
                            };
2383
                            //if ((firstCondition as TextControl).Angle != 0)
2384
                            //{
2385
                            Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
2386
                            Point middle = MathSet.getMiddlePoint((item.DrawingData as TextControl).StartPoint, endPointV);
2387

    
2388

    
2389
                            //AdornerBorder.RenderTransformOrigin = new Point(1, 1);
2390
                            //AdornerBorder.RenderTransform = new RotateTransform()
2391
                            //{
2392
                            //    Angle = (member as TextControl).Angle * -1,
2393
                            //    CenterX = middle.X + ((member as TextControl) as FrameworkElement).ActualWidth /2,
2394
                            //    CenterY = middle.Y + ((member as TextControl) as FrameworkElement).ActualHeight /2,
2395
                            //};
2396

    
2397
                            DragThumb.RenderTransformOrigin = new Point(0.0, 0.0);
2398
                            DragThumb.RenderTransform = new RotateTransform()
2399
                            {
2400
                                Angle = (item.DrawingData as TextControl).Angle,
2401
                                //CenterX = middle.X,
2402
                                //CenterY = middle.Y,
2403
                            };
2404

    
2405
                            AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0);
2406
                            AdornerBorder.RenderTransform = new RotateTransform()
2407
                            {
2408
                                Angle = (item.DrawingData as TextControl).Angle,
2409
                                //CenterX = middle.X,
2410
                                //CenterY = middle.Y,
2411
                            };
2412

    
2413
                            (item.DrawingData as TextControl).Base_Grid.RenderTransform = new RotateTransform()
2414
                            {
2415
                                Angle = (item.DrawingData as TextControl).Angle,
2416
                            };
2417

    
2418
                            BorderUpdate();
2419
                            break;
2420
                        //case ControlType.Viewbox:
2421
                        //    (item.DrawingData as IPath).updateControl();
2422
                        //    ((IViewBox)item.DrawingData).Angle = AngleValue;
2423
                        //    BorderUpdate();
2424
                        //    break;
2425
                        case ControlType.Date:
2426

    
2427
                            //강인구 추가(2018.02.22)
2428
                            ((DateControl)item.DrawingData).Angle = AngleValue;
2429
                            (item.DrawingData as IPath).updateControl();
2430

    
2431
                            BorderUpdate();
2432
                            //MessageBox.Show("잠시 정확도를 위해 막아두었습니다!");
2433
                            break;
2434
                        case ControlType.ArrowMultiLine:
2435
                        case ControlType.ArcLine:
2436
                        case ControlType.SingleLine:
2437
                        case ControlType.Triangle:
2438
                            (item.DrawingData as IPath).updateControl();
2439
                            BorderUpdate();
2440
                            break;
2441
                        case ControlType.ArrowTextControl:
2442
                            (item.DrawingData as IPath).updateControl();
2443
                            BorderUpdate();
2444
                            break;
2445
                        case ControlType.RectCloud:
2446
                            ((RectCloudControl)item.DrawingData).Angle = AngleValue;
2447
                            (item.DrawingData as IPath).updateControl();
2448
                            BorderUpdate();
2449
                            break;
2450
                        case ControlType.Rectangle:
2451
                            ((RectangleControl)item.DrawingData).Angle = AngleValue;
2452
                            (item.DrawingData as IPath).updateControl();
2453
                            BorderUpdate();
2454
                            break;
2455
                        case ControlType.ImgControl:
2456
                            ((ImgControl)item.DrawingData).Angle = AngleValue;
2457
                            (item.DrawingData as IPath).updateControl();
2458
                            BorderUpdate();
2459
                            break;
2460
                        //강인구 추가
2461
                        case ControlType.Sign:
2462
                            ((SignControl)item.DrawingData).Angle = AngleValue;
2463
                            (item.DrawingData as IPath).updateControl();
2464
                            BorderUpdate();
2465
                            break;
2466
                        //강인구 추가
2467
                        case ControlType.Symbol:
2468
                            ((SymControl)item.DrawingData).Angle = AngleValue;
2469
                            (item.DrawingData as IPath).updateControl();
2470
                            BorderUpdate();
2471
                            break;
2472
                        //강인구 추가
2473
                        case ControlType.Stamp:
2474
                            ((SymControlN)item.DrawingData).Angle = AngleValue;
2475
                            (item.DrawingData as IPath).updateControl();
2476
                            BorderUpdate();
2477
                            break;
2478
                        case ControlType.PolygonControl:
2479
                            //((IShapeControl)AllControl).Angle = AngleValue;
2480
                            (item.DrawingData as IPath).updateControl();
2481
                            BorderUpdate();
2482
                            break;
2483
                        case ControlType.PolygonCloud:
2484
                            //((IShapeControl)AllControl).Angle = AngleValue;
2485
                            ((ICloudControl)item.DrawingData).DrawingCloud();
2486
                            (item.DrawingData as IPath).updateControl();
2487
                            BorderUpdate();
2488
                            break;
2489
                        case ControlType.Circle:
2490
                            ((IShapeControl)item.DrawingData).Angle = AngleValue;
2491
                            (item.DrawingData as IPath).updateControl();
2492
                            ((CircleControl)item.DrawingData).SetCenterXY();
2493
                            BorderUpdate();
2494
                            break;
2495
                        case ControlType.Ink:
2496
                            for (int i = 0; i < (item.DrawingData as InkControl).PointC.Count(); i++)
2497
                            {
2498
                                for (int j = 0; j < (item.DrawingData as InkControl).PointC[i].pointSet.Count; j++)
2499
                                {
2500
                                    (item.DrawingData as InkControl).PointC[i].pointSet[j] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as InkControl).PointC[i].pointSet[j], dDeltaAngle);
2501
                                }
2502
                            }
2503
                            (item.DrawingData as IPath).updateControl();
2504
                            BorderUpdate();
2505
                            break;
2506
                        //case MarkupType.PolygonEx:
2507
                        //    //trRotate.Angle = AngleValue;
2508
                        //    for (int i = 0; i < (item.DrawingData as PolyControl).PointC.Count(); i++)
2509
                        //    {
2510
                        //        //(item.DrawingData as PolyControl).PointC[i] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as PolyControl).PointC[i]., dDeltaAngle);
2511
                        //        for (int j = 0; j < (item.DrawingData as PolyControl).PointC[i].pointSet.Count; j++)
2512
                        //        {
2513
                        //            (item.DrawingData as PolyControl).PointC[i].pointSet[j] = MathSet.RotateAbout(CenterPoint, (item.DrawingData as PolyControl).PointC[i].pointSet[j], dDeltaAngle);
2514
                        //        }
2515
                        //    }
2516
                        //    (item.DrawingData as IPath).updateControl();
2517
                        //    BorderUpdate();
2518
                        //    break;
2519
                        default:
2520
                            break;
2521
                    }
2522
                }
2523
                #endregion
2524
            }));
2525
            BorderUpdate();
2526
        }
2527

    
2528
        private void rotate_DragStarted(object sender, DragStartedEventArgs e)
2529
        {
2530
            //System.Windows.Forms.Cursor.Position = new System.Drawing.Point(System.Windows.Forms.Cursor.Position.X - 150, System.Windows.Forms.Cursor.Position.Y - 150);
2531

    
2532
            rotateTop.Cursor = Cursors.SizeAll;
2533

    
2534
            //CustomCursor.SetCursorTemplate(rotateTop, this.Resources["AnimatedCursor"] as DataTemplate);
2535
            //rotateTop.Cursor = Cursors.None;
2536

    
2537
            //if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().PointSet != null)
2538
            //{
2539
            //    return;
2540
            //}
2541
            if (ViewerDataModel.Instance.UndoDataList == null)
2542
            {
2543
                return;
2544
            }
2545

    
2546
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Event == Event_Type.Thumb)
2547
            {
2548
                return;
2549
            }
2550
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List != null)
2551
            {
2552
                if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.Count > 0)
2553
                {
2554
                    if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.FirstOrDefault().PointSet != null)
2555
                    {
2556
                        return;
2557
                    }
2558
                }
2559
            }
2560

    
2561
            Undo_Event();
2562
        }
2563

    
2564
        private void rotate_DragCompleted(object sender, DragCompletedEventArgs e)
2565
        {
2566
            //CustomCursor.SetCursorTemplate(rotateTop, null);
2567
            rotateTop.Cursor = Cursors.Arrow;
2568

    
2569
            Undo_Event();
2570
        }
2571

    
2572
        private void drag_DragStarted(object sender, DragStartedEventArgs e)
2573
        {
2574
            //CustomCursor.SetCursorTemplate(DragThumb, this.Resources["MoveCursor"] as DataTemplate);
2575
            //DragThumb.Cursor = Cursors.None;
2576
            //DragThumb.Cursor = Cursors.SizeAll;
2577

    
2578
            if (ViewerDataModel.Instance.UndoDataList == null)
2579
            {
2580
                return;
2581
            }
2582
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Event == Event_Type.Thumb)
2583
            {
2584
                return;
2585
            }
2586
            if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List != null)
2587
            {
2588
                if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.Count > 0)
2589
                {
2590
                    if (ViewerDataModel.Instance.UndoDataList.LastOrDefault().Markup_List.FirstOrDefault().PointSet != null)
2591
                    {
2592
                        return;
2593
                    }
2594
                }
2595
            }
2596

    
2597
            Undo_Event();
2598
        }
2599

    
2600
        private void Undo_Event()
2601
        {
2602
            List<Point> p_set = new List<Point>();
2603

    
2604
            Undo_data UndoData = new Undo_data()
2605
            {
2606
                IsUndo = false,
2607
                Event = Event_Type.Thumb,
2608
                EventTime = DateTime.Now,
2609
                Markup_List = new List<Multi_Undo_data>(),
2610
            };
2611

    
2612
            Multi_Undo_data multi_Undo_Data = new Multi_Undo_data();
2613

    
2614
            foreach (var control in MemberSet)
2615
            {
2616
                multi_Undo_Data.PointSet = new List<Point>();
2617
                p_set = new List<Point>();
2618

    
2619
                if(control.DrawingData as TextControl != null)
2620
                {
2621
                    multi_Undo_Data.PointSet.Add((control.DrawingData as TextControl).StartPoint);
2622
                    multi_Undo_Data.PointSet.Add((control.DrawingData as TextControl).EndPoint);
2623
                }
2624

    
2625
                foreach (var point in ((control.DrawingData as CommentUserInfo) as IPath).PointSet)
2626
                {
2627
                    multi_Undo_Data.PointSet.Add(point);
2628
                }
2629

    
2630
                multi_Undo_Data.Angle = AngleValue;
2631

    
2632
                multi_Undo_Data.Markup = control.DrawingData as CommentUserInfo;
2633
                UndoData.Markup_List.Add(multi_Undo_Data);
2634
                multi_Undo_Data = new Multi_Undo_data();
2635
            }
2636
            ViewerDataModel.Instance.UndoDataList.Where(data => data.IsUndo == true).ToList().ForEach(i =>
2637
            {
2638
                ViewerDataModel.Instance.UndoDataList.Remove(i);
2639
            });
2640

    
2641
            ViewerDataModel.Instance.UndoDataList.Add(UndoData);
2642

    
2643
        }
2644

    
2645
        private void drag_DragCompleted(object sender, DragCompletedEventArgs e)
2646
        {
2647
            //CustomCursor.SetCursorTemplate(DragThumb, null);
2648
            DragThumb.Cursor = Cursors.Arrow;
2649

    
2650
            Undo_Event();
2651
        }
2652

    
2653
        public void ControlPointMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
2654
        {
2655
            AdornerMember control = MemberSet.FirstOrDefault();
2656

    
2657
            if ((control.DrawingData as ArrowTextControl) != null && DraggerThumb == null)
2658
            {
2659
                if ((control.DrawingData as ArrowTextControl).isTrans == false && (control.DrawingData as ArrowTextControl).isFixed == false)
2660
                {
2661
                    (control.DrawingData as ArrowTextControl).isTrans = true;
2662
                }
2663
            }
2664

    
2665
        }
2666

    
2667
        public void TextControlChanger()
2668
        {
2669
            if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
2670
            {
2671
                TextControl AllControl = (MemberSet.First() as AdornerMember).DrawingData as TextControl;
2672
                AllControl.Base_TextBox.Focus();
2673
                AllControl.Base_TextBox.Visibility = Visibility.Visible;
2674
                AllControl.Base_TextBlock.Visibility = Visibility.Collapsed;
2675
                AllControl.Base_TextBox.Focus();
2676
                AllControl.SizeChanged += (sen, ea) =>
2677
                {
2678
                    if (AllControl.Base_TextBox != null)
2679
                    {
2680
                        RectangleGeometry Data = new RectangleGeometry
2681
                        {
2682
                            Rect = new Rect()
2683
                            {
2684
                                X = AllControl.StartPoint.X,
2685
                                Y = AllControl.StartPoint.Y,
2686
                                Width = AllControl.Base_TextBox.Width,
2687
                                Height = AllControl.Base_TextBox.Height,
2688
                            }
2689
                        };
2690

    
2691
                        Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
2692
                        Point middle = MathSet.getMiddlePoint(AllControl.StartPoint, endPointV);
2693
                        AllControl.Base_Grid.RenderTransform = new RotateTransform()
2694
                        {
2695
                            Angle = AllControl.Angle,
2696
                            CenterX = middle.X,
2697
                            CenterY = middle.Y,
2698
                        };
2699
                    }
2700
                    BorderUpdate();
2701
                };
2702
            }
2703
        }
2704

    
2705
        private void RectThumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) //더블클릭
2706
        {
2707
            if (e.ClickCount == 2 && MemberSet.Count == 1)
2708
            {
2709

    
2710
                if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
2711
                {
2712
                    TextControlChanger();
2713
                    //    TextControl AllControl = (MemberSet.First() as AdornerMember).DrawingData as TextControl;
2714
                    //    AllControl.Base_TextBox.Focus();
2715
                    //    AllControl.Base_TextBox.Visibility = Visibility.Visible;
2716
                    //    AllControl.Base_TextBlock.Visibility = Visibility.Collapsed;
2717
                    //    AllControl.Base_TextBox.Focus();
2718
                    //    AllControl.SizeChanged += (sen, ea) =>
2719
                    //    {
2720
                    //        if (AllControl.Base_TextBox != null)
2721
                    //        {   
2722
                    //            RectangleGeometry Data = new RectangleGeometry
2723
                    //            {
2724
                    //                Rect = new Rect()
2725
                    //                {
2726
                    //                    X = AllControl.StartPoint.X,
2727
                    //                    Y = AllControl.StartPoint.Y,
2728
                    //                    Width = AllControl.Base_TextBox.Width,
2729
                    //                    Height = AllControl.Base_TextBox.Height,
2730
                    //                }
2731
                    //            };
2732

    
2733
                    //            Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
2734
                    //            Point middle = MathSet.getMiddlePoint(AllControl.StartPoint, endPointV);
2735
                    //            AllControl.Base_Grid.RenderTransform = new RotateTransform()
2736
                    //            {
2737
                    //                Angle = AllControl.Angle,
2738
                    //                CenterX = middle.X,
2739
                    //                CenterY = middle.Y,
2740
                    //            };
2741
                    //        }
2742
                    //        BorderUpdate();
2743
                    //    };
2744
                }
2745

    
2746
                else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "ArrowTextControl")
2747
                {
2748
                    ArrowTextControl AllControl = (MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl;
2749
                    Thumb tm = (MemberSet.First() as AdornerMember).ThumbList.Last();
2750
                    ((ArrowTextControl)AllControl).Base_TextBox.Focus();
2751

    
2752
                    //강인구 추가(ArrowControl TextBox Thumb없애기
2753
                    tm.Visibility = Visibility.Collapsed;
2754

    
2755
                    ((MemberSet.First() as AdornerMember).DrawingData as ArrowTextControl).Base_TextBox.IsHitTestVisible = true;
2756

    
2757
                    //(sender as System.Windows.Shapes.Rectangle).IsHitTestVisible = false;
2758
                    //(sender as System.Windows.Shapes.Rectangle).Visibility = Visibility.Hidden;
2759
                    //Canvas.SetZIndex(((ArrowTextControl)AllControl).Base_TextBox,9999);
2760
                    //editTextBox = ((ArrowTextControl)AllControl).Base_TextBox;
2761
                    //editTextBox.Style = ((ArrowTextControl)AllControl).Base_TextBox.Style;
2762
                    //editTextBox.Text = (AllControl as ArrowTextControl).ArrowText;
2763
                    //editTextBox.FontSize = (AllControl as ArrowTextControl).FontSize;
2764
                    //editTextBox.Foreground = (AllControl as ArrowTextControl).Foreground;
2765
                    //editTextBox.FontWeight = (AllControl as ArrowTextControl).FontWeight;
2766

    
2767
                    //(AllControl as ArrowTextControl).Base_TextBox.Visibility = Visibility.Collapsed;
2768
                    //editTextBox = (AllControl as ArrowTextControl).Base_TextBox;
2769
                    //editTextBox.TextChanged += (sen, ea) =>
2770
                    //  {
2771
                    //      ((ArrowTextControl)AllControl).ArrowText = editTextBox.Text;
2772
                    //  };
2773

    
2774

    
2775
                    //(sender as System.Windows.Shapes.Rectangle).Visibility = Visibility.Hidden;
2776
                    //((ArrowTextControl)AllControl).Base_TextBox.Background = new SolidColorBrush(Colors.Blue);
2777
                    //((ArrowTextControl)AllControl).Base_TextBox.Opacity = 1;
2778
                    //((ArrowTextControl)AllControl).Base_TextBox.Focus();
2779

    
2780
                    ((ArrowTextControl)AllControl).Base_TextBox.SizeChanged += (sen, ea) =>
2781

    
2782
                    {
2783
                        tm.Width = (AllControl as ArrowTextControl).BoxWidth;
2784
                        tm.Height = (AllControl as ArrowTextControl).BoxHeight;
2785

    
2786
                        List<Point> ps = new List<Point>();
2787
                        //RotateTransform myRotateTransform = new RotateTransform();
2788

    
2789

    
2790
                        //if (control.Angle == -270)
2791
                        //{
2792
                        //    myRotateTransform.Angle = 90;
2793
                        //    myRotateTransform.CenterX = Canvas.GetLeft(control.Base_TextBox);
2794
                        //    myRotateTransform.CenterY = Canvas.GetTop(control.Base_TextBox);
2795
                        //}
2796
                        //else if (control.Angle == -90)
2797
                        //{
2798
                        //    myRotateTransform.Angle = 270;
2799
                        //    myRotateTransform.CenterX = Canvas.GetLeft(control.Base_TextBox);
2800
                        //    myRotateTransform.CenterY = Canvas.GetTop(control.Base_TextBox);
2801
                        //}
2802
                        //TransformGroup myTransformGroup = new TransformGroup();
2803
                        //myTransformGroup.Children.Add(myRotateTransform);
2804

    
2805
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth / 2, Canvas.GetTop(AllControl.Base_TextBox))); //상단
2806
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth / 2, Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight)); // 하단
2807
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox), Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight / 2)); //좌단
2808
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth, Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight / 2));  //우단
2809

    
2810

    
2811

    
2812

    
2813
                        var endP = MathSet.getNearPoint(ps, AllControl.MidPoint);
2814
                        var tempP = MathSet.getMiddlePoint(AllControl.StartPoint, endP);
2815
                        if (AllControl.isTrans)
2816
                        {
2817
                            Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], AllControl.MidPoint.X);
2818
                            Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], AllControl.MidPoint.Y);
2819
                        }
2820
                        else
2821
                        {
2822
                            Canvas.SetLeft((MemberSet.First() as AdornerMember).ThumbList[1], tempP.X);
2823
                            Canvas.SetTop((MemberSet.First() as AdornerMember).ThumbList[1], tempP.Y);
2824
                        }
2825

    
2826
                        
2827
                        BorderUpdate();
2828
                        
2829
                    };
2830
                }
2831
                else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "DateControl")
2832
                {
2833
                    DateControl data = (MemberSet.First() as AdornerMember).DrawingData as DateControl;
2834
                    CalendarControl instanceCal = new CalendarControl(data.Text);
2835
                    //dropData.IsOpen = true;
2836
                    RadWindow rc = new RadWindow();
2837
                    rc.Width = 300;
2838
                    rc.Height = 300;
2839
                    rc.Header = "Change Date";
2840
                    rc.Content = instanceCal;
2841
                    rc.BorderThickness = new Thickness(3);
2842
                    rc.ResizeMode = ResizeMode.NoResize;
2843
                    rc.WindowStartupLocation = WindowStartupLocation.CenterScreen;
2844
                    rc.ModalBackground = new SolidColorBrush(Colors.Black);
2845
                    rc.ModalBackground.Opacity = 0.6;
2846
                    Telerik.Windows.Controls.StyleManager.SetTheme(rc, new Telerik.Windows.Controls.Windows8Theme());
2847
                    instanceCal.changeDateCal.SelectionChanged += (sen, ea) =>
2848
                    {
2849
                        data.Text = instanceCal.changeDateCal.SelectedDate.Value.ToShortDateString();
2850
                        rc.Close();
2851
                    };
2852
                    rc.ShowDialog();
2853
                    //CalendarControl.xaml
2854
                }
2855
                else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "ArcControl")
2856
                {
2857
                    ArcControl instance = ((MemberSet.First() as AdornerMember).DrawingData as ArcControl);
2858
                    if (instance.isTransOn)
2859
                    {
2860
                        instance.isTransOn = false;
2861
                    }
2862
                    else
2863
                    {
2864
                        instance.isTransOn = true;
2865
                    }
2866
                    instance.SetArcPath();
2867
                    BorderUpdate();
2868
                }
2869
                //else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "CloudControl")
2870
                //{
2871
                //    CloudControl instance = ((MemberSet.First() as AdornerMember).DrawingData as CloudControl);
2872
                //    if (!instance.isChain)
2873
                //    {
2874
                //        if (instance.isTransOn)
2875
                //        {
2876
                //            instance.isTransOn = false;
2877
                //        }
2878
                //        else
2879
                //        {
2880
                //            instance.isTransOn = true;
2881
                //        }
2882

    
2883
                //        instance.SetCloud();
2884
                //        BorderUpdate();
2885
                //    }
2886
                //}
2887
                //else if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "LineControl")
2888
                //{
2889
                //    LineControl instance = ((MemberSet.First() as AdornerMember).DrawingData as LineControl);
2890
                //    if (instance.LineStyle == LineControl.LineStyleSet.MultiLine)
2891
                //    {
2892
                //        instance.Interval += 1;
2893
                //        instance.SetLinePath();
2894
                //        BorderUpdate();
2895
                //    }
2896

    
2897
                //    //instance.SetCloud();
2898
                //    //BorderUpdate();
2899
                //}
2900

    
2901
            }
2902
            //if (e.ClickCount == 2 && AllControl.GetType().Name == "TextControl") // Edit Mode
2903
            //{
2904
            //    ((TextControl)AllControl).Base_TextBox.Focus();
2905
            //    ((TextControl)AllControl).Base_TextBox.Visibility = Visibility.Visible;
2906
            //    ((TextControl)AllControl).Base_TextBlock.Visibility = Visibility.Collapsed;
2907
            //}
2908
            //if (e.ClickCount == 2 && AllControl.GetType().Name == "ArrowTextControl") // Edit Mode
2909
            //{
2910
            //    Thumb tm = (from kkk in this.ContainerContent.Children
2911
            //                where (kkk as FrameworkElement).Name == "LastThumb"
2912
            //                select kkk).FirstOrDefault() as Thumb;
2913
            //    ((ArrowTextControl)AllControl).Base_TextBox.Focus();
2914
            //    ((ArrowTextControl)AllControl).Base_TextBox.SizeChanged += (sen, ea) =>
2915
            //    {
2916
            //        tm.Width = (AllControl as ArrowTextControl).BoxWidth;
2917
            //        tm.Height = (AllControl as ArrowTextControl).BoxHeight;
2918
            //        Canvas.SetLeft(tm, (AllControl.EndPoint.X - tm.Width / 2));
2919
            //        Canvas.SetTop(tm, (AllControl.EndPoint.Y - tm.Height / 2));
2920
            //        Canvas.SetLeft((AllControl as ArrowTextControl).Base_TextBox, (AllControl.EndPoint.X - tm.Width / 2));
2921
            //        Canvas.SetTop((AllControl as ArrowTextControl).Base_TextBox, (AllControl.EndPoint.Y - tm.Height / 2));
2922
            //    };
2923
            //}
2924
        }
2925
        #endregion
2926

    
2927
        private void DragThumb_MouseDoubleClick(object sender, MouseButtonEventArgs e)
2928
        {
2929
            if ((MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "TextControl" || (MemberSet.First() as AdornerMember).DrawingData.GetType().Name == "ArrowTextControl")
2930
            {
2931
                DragThumb.Visibility = Visibility.Collapsed;
2932
            }   
2933
        }
2934

    
2935
        //private void testText_Loaded(object sender, RoutedEventArgs e)
2936
        //{
2937
        //    editTextBox = sender as TextBox;
2938
        //}
2939
    }
2940
}
클립보드 이미지 추가 (최대 크기: 500 MB)