프로젝트

일반

사용자정보

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

markus / KCOM / Controls / Symbol.xaml.cs @ 787a4489

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

1
using KCOM.Common;
2
using KCOM.Events;
3
using System;
4
using System.Collections.Generic;
5
using System.Linq;
6
using System.Text;
7
using System.Windows;
8
using System.Windows.Controls;
9
using System.Windows.Data;
10
using System.Windows.Documents;
11
using System.Windows.Input;
12
using System.Windows.Media;
13
using System.Windows.Media.Imaging;
14
using System.Windows.Navigation;
15
using System.Windows.Shapes;
16
using Telerik.Windows.Controls;
17

    
18
namespace KCOM.Controls
19
{
20
    public class Symbol_Custom
21
    {
22
        public string Name { get; set; }
23
        public string ImageUri { get; set; }
24
    }
25

    
26
    /// <summary>
27
    /// Symbol.xaml에 대한 상호 작용 논리
28
    /// </summary>
29
    public partial class Symbol : UserControl
30
    {
31
        AdornerFinal finalItem;
32
        public string filename { get; set; }
33
        MarkupToPDF.Controls.Parsing.LayerControl layer = new MarkupToPDF.Controls.Parsing.LayerControl();
34

    
35
        public Symbol()
36
        {
37
            InitializeComponent();
38

    
39
            DataBind();
40
        }
41

    
42
        private void DataBind()
43
        {
44
            lstSymbolPrivate.ItemsSource = null;
45

    
46
            Symbol_Custom Custom = new Symbol_Custom();
47
            List<Symbol_Custom> Custom_List = new List<Symbol_Custom>();
48
            Custom.Name = "테스트";
49
            Custom.ImageUri = "http://cloud.devdoftech.co.kr:5977/UserData/000000/H2009115/JsInNjZNgC8d59543c6854eb4.png";
50

    
51
            Custom_List.Add(Custom);
52
            Custom_List.Add(Custom);
53

    
54
            lstSymbolPrivate.ItemsSource = Custom_List;
55
        }
56

    
57
        private void Create_Symbol(object sender, RoutedEventArgs e)
58
        {
59
            MarkupToPDF.Controls.Parsing.LayerControl.MarkupReturn markupReturn = new MarkupToPDF.Controls.Parsing.LayerControl.MarkupReturn();
60

    
61
            if (Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.SelectLayer.Children.Count < 1) //선택된 것이 없으면
62
            {
63
                DialogMessage_Alert("Please Select Controls", "Alert");
64
            }
65
            else //선택된 것이 있으면
66
            {
67
                string MarkupData = "";
68
                finalItem = new AdornerFinal();
69

    
70
                foreach (var item in Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.SelectLayer.Children)
71
                {
72
                    if (item.GetType().Name == "AdornerFinal")
73
                    {
74
                        finalItem = (item as Controls.AdornerFinal);
75
                        foreach (var InnerItem in (item as Controls.AdornerFinal).MemberSet.Cast<Controls.AdornerMember>())
76
                        {
77
                            if (!ViewerDataModel.Instance.MarkupControls.Contains(InnerItem.DrawingData))
78
                            {
79
                                markupReturn = layer.MarkupToString(InnerItem.DrawingData as MarkupToPDF.Common.CommentUserInfo, App.ViewInfo.UserID);
80
                                MarkupData += markupReturn.ConvertData;
81
                            }
82
                        }
83
                    }
84
                }
85
                DialogParameters parameters = new DialogParameters()
86
                {
87
                    Closed = (obj, args) => this.MarkupNamePromptClose(MarkupData, args),
88
                    DefaultPromptResultValue = "Custom State",
89
                    Content = "Name :",
90
                    Header = "Insert Custom Symbol Name",
91
                    Theme = new VisualStudio2013Theme(),
92
                    ModalBackground = new SolidColorBrush { Color = Colors.Black, Opacity = 0.6 },
93
                };
94
                RadWindow.Prompt(parameters);
95
            }
96

    
97
        }
98

    
99
        private void MarkupNamePromptClose(string data, WindowClosedEventArgs args)
100
        {
101
            Save save = new Save();
102

    
103
            if (args.DialogResult.Value)
104
            {
105
                PngBitmapEncoder _Encoder = symImage(data);
106

    
107
                System.IO.MemoryStream fs = new System.IO.MemoryStream();
108
                _Encoder.Save(fs);
109
                System.Drawing.Image ImgOut = System.Drawing.Image.FromStream(fs);
110

    
111
                byte[] Img_byte = fs.ToArray();
112

    
113
                kr.co.devdoftech.cloud.FileUpload fileUploader = new kr.co.devdoftech.cloud.FileUpload();
114
                filename = fileUploader.Run(App.ViewInfo.ProjectNO, Common.ViewerDataModel.Instance.SystemMain.dzMainMenu._DocItem.DOCUMENT_NO, App.ViewInfo.UserID, Save.shortGuid() + ".png", Img_byte);
115

    
116
                save.SymbolSave(args.PromptResult, filename, data);
117
            }
118
        }
119

    
120
        public PngBitmapEncoder symImage(string data)
121
        {
122

    
123
            Canvas _canvas = new Canvas();
124
            _canvas.Background = Brushes.White;
125
            _canvas.Width = finalItem.BorderSize.Width;
126
            _canvas.Height = finalItem.BorderSize.Height;
127
            layer.markupParse(data, _canvas, "#FFFF0000", "");
128

    
129
            BitmapEncoder encoder = new PngBitmapEncoder();
130

    
131

    
132
            RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)_canvas.Width + 50, (int)_canvas.Height + 50, 96d, 96d, PixelFormats.Pbgra32);
133

    
134
            DrawingVisual dv = new DrawingVisual();
135

    
136
            _canvas.Measure(new System.Windows.Size(finalItem.BorderSize.Width + 50, finalItem.BorderSize.Height + 50));
137
            //_canvas.Arrange(new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X - 50, Y = -finalItem.BorderSize.Y - 50 }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20)));
138
            _canvas.Arrange(new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X - 20, Y = -finalItem.BorderSize.Y - 20 }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20)));
139

    
140
            using (DrawingContext ctx = dv.RenderOpen())
141
            {
142
                VisualBrush vb = new VisualBrush(_canvas);
143
                //ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X - 20, Y = -finalItem.BorderSize.Y - 20 }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20)));
144
                ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point { X = -finalItem.BorderSize.X, Y = -finalItem.BorderSize.Y }, new Point(finalItem.BorderSize.Width + 20, finalItem.BorderSize.Height + 20)));
145
            }
146

    
147
            try
148
            {
149
                renderBitmap.Render(dv);
150

    
151
                GC.Collect();
152
                GC.WaitForPendingFinalizers();
153
                GC.Collect();
154
                //bitmap.Render(controlToConvert);
155
                // encode png data
156
                PngBitmapEncoder pngEncoder = new PngBitmapEncoder();
157
                // puch rendered bitmap into it
158
                pngEncoder.Interlace = PngInterlaceOption.Off;
159
                pngEncoder.Frames.Add(BitmapFrame.Create(renderBitmap));
160
                return pngEncoder;
161

    
162
            }
163
            catch (Exception ex)
164
            {
165
                return null;
166
            }
167

    
168
        }
169

    
170

    
171
        public void DialogMessage_Alert(string content, string header)
172
        {
173
            var box = new TextBlock();
174
            box.MinWidth = 400;
175
            box.FontSize = 11;
176
            //box.FontSize = 12;
177
            box.Text = content;
178
            box.TextWrapping = System.Windows.TextWrapping.Wrap;
179

    
180
            DialogParameters parameters = new DialogParameters()
181
            {
182
                Content = box,
183
                Header = header,
184
                Theme = new VisualStudio2013Theme(),
185
                ModalBackground = new SolidColorBrush { Color = Colors.Black, Opacity = 0.6 },
186
            };
187
            RadWindow.Alert(parameters);
188
        }
189

    
190
        private void lsySymbolPrivate_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
191
        {
192

    
193
        }
194
    }
195
}
클립보드 이미지 추가 (최대 크기: 500 MB)