프로젝트

일반

사용자정보

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

hytos / DTI_PID / SPPIDConverter / AutoModeling.cs @ 5e6ecf05

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

1 cfda1fed gaqhf
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
using Llama;
7
using Plaice;
8 8aa6f2db gaqhf
using Ingr.RAD2D.Interop.RAD2D;
9
using Ingr.RAD2D.Internal;
10
using Ingr.RAD2D.Helper;
11 cfda1fed gaqhf
using Converter.BaseModel;
12
using Converter.SPPID.Model;
13
using Converter.SPPID.Properties;
14
using Converter.SPPID.Util;
15
using Converter.SPPID.DB;
16 5e6ecf05 gaqhf
using Ingr.RAD2D.MacroControls.CmdCtrl;
17
using Ingr.RAD2D;
18 5dfb8a24 gaqhf
using System.Windows;
19 cfda1fed gaqhf
using System.Threading;
20 5dfb8a24 gaqhf
using System.Drawing;
21 cfda1fed gaqhf
using Microsoft.VisualBasic;
22
using Newtonsoft.Json;
23
24
namespace Converter.SPPID
25
{
26
    public class AutoModeling
27
    {
28 809a7640 gaqhf
        Placement _placement;
29
        LMADataSource dataSource;
30 5e6ecf05 gaqhf
        Ingr.RAD2D.Application radApp;
31 cfda1fed gaqhf
        SPPID_Document document;
32 f1c9dbaa gaqhf
33 5e6ecf05 gaqhf
        public AutoModeling(SPPID_Document document, Ingr.RAD2D.Application radApp)
34 cfda1fed gaqhf
        {
35
            this.document = document;
36 5e6ecf05 gaqhf
            this.radApp = radApp;
37 cfda1fed gaqhf
        }
38
39
        public void Run()
40
        {
41 809a7640 gaqhf
            _placement = new Placement();
42
            dataSource = _placement.PIDDataSource;
43 5dfb8a24 gaqhf
            //dynamic application = Interaction.GetObject("", "PIDAutomation.Application");
44
            //dynamic newDrawing = application.Drawings.Add(document.Unit, document.Template, document.DrawingNumber, document.DrawingName);
45
            //application.ActiveWindow.Fit();
46
            //Thread.Sleep(100);
47
            //application.ActiveWindow.Zoom = 60;
48
            //Thread.Sleep(100);
49 5e6ecf05 gaqhf
            try
50 5dfb8a24 gaqhf
            {
51 5e6ecf05 gaqhf
                foreach (Equipment equipment in document.Equipments)
52 5dfb8a24 gaqhf
                {
53 5e6ecf05 gaqhf
                    SymbolModeling(equipment as Symbol, null, null);
54 8aa6f2db gaqhf
                }
55
56 5e6ecf05 gaqhf
                foreach (LineNumber lineNumber in document.LINENUMBERS)
57
                {
58
                    foreach (LineRun run in lineNumber.RUNS)
59
                    {
60
                        SymbolModelingByRun(run);
61
                    }
62
                }
63 8aa6f2db gaqhf
64 5e6ecf05 gaqhf
                foreach (TrimLine trimLine in document.TRIMLINES)
65 8aa6f2db gaqhf
                {
66 5e6ecf05 gaqhf
                    foreach (LineRun run in trimLine.RUNS)
67
                    {
68
                        SymbolModelingByRun(run);
69
                    }
70 8aa6f2db gaqhf
                }
71
72 5e6ecf05 gaqhf
                foreach (LineNumber lineNumber in document.LINENUMBERS)
73 8aa6f2db gaqhf
                {
74 5e6ecf05 gaqhf
                    foreach (LineRun run in lineNumber.RUNS)
75
                    {
76
                        LineModelingByRun(run);
77
                    }
78 8aa6f2db gaqhf
                }
79 809a7640 gaqhf
80 5e6ecf05 gaqhf
                foreach (TrimLine trimLine in document.TRIMLINES)
81 8aa6f2db gaqhf
                {
82 5e6ecf05 gaqhf
                    foreach (LineRun run in trimLine.RUNS)
83
                    {
84
                        LineModelingByRun(run);
85
                    }
86 809a7640 gaqhf
                }
87
            }
88 5e6ecf05 gaqhf
            catch (Exception ex)
89
            {
90
                System.Windows.Forms.MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
91
            }
92
            finally
93
            {
94
                ReleaseCOMObjects(dataSource);
95
                ReleaseCOMObjects(_placement);
96
            }
97
           
98 809a7640 gaqhf
            System.Windows.Forms.MessageBox.Show("end");
99
        }
100 f1c9dbaa gaqhf
101 8aa6f2db gaqhf
        private void LineModelingByRun(LineRun run)
102 809a7640 gaqhf
        {
103
            Line prevLine = null;
104
            List<Line> lines = new List<Line>();
105
            foreach (var item in run.RUNITEMS)
106
            {
107
                // Line일 경우
108
                if (item.GetType() == typeof(Line))
109
                {
110
                    Line line = item as Line;
111
                    if (prevLine == null)
112
                        lines.Add(line);
113
                    else if (prevLine != null)
114
                    {
115
                        if (prevLine.SPPID.MAPPINGNAME == line.SPPID.MAPPINGNAME)
116
                            lines.Add(line);
117
                        else
118 f1c9dbaa gaqhf
                        {
119 809a7640 gaqhf
                            LineModeling(lines);
120
                            lines.Clear();
121
                            lines.Add(line);
122 5dfb8a24 gaqhf
                        }
123
                    }
124
125 809a7640 gaqhf
                    prevLine = line;
126
                }
127
                // Symbol 일 경우
128
                else if (item.GetType() == typeof(Symbol))
129
                {
130 f1c9dbaa gaqhf
                    if (lines.Count > 0)
131 809a7640 gaqhf
                    {
132 f1c9dbaa gaqhf
                        LineModeling(lines);
133 809a7640 gaqhf
                        lines.Clear();
134
                    }
135 5dfb8a24 gaqhf
                }
136
            }
137
138 809a7640 gaqhf
            if (lines.Count > 0)
139
                LineModeling(lines);
140
        }
141 5dfb8a24 gaqhf
142 8aa6f2db gaqhf
        private void SymbolModelingByRun(LineRun run)
143 809a7640 gaqhf
        {
144
            // 양끝 Symbol 검사 후 Line이 나올때까지만 Symbol Modeling
145
            if (run.RUNITEMS.Count > 0)
146
            {
147
                if (run.RUNITEMS[0].GetType() == typeof(Symbol))
148
                    SymbolModelingByRunStart(run.RUNITEMS[0] as Symbol, run);
149
150
                if (run.RUNITEMS[run.RUNITEMS.Count - 1].GetType() == typeof(Symbol))
151
                    SymbolModelingByRunEnd(run.RUNITEMS[run.RUNITEMS.Count - 1] as Symbol, run);
152
            }
153
154
            Symbol prevSymbol = null;
155
            Symbol targetSymbol = null;
156
            foreach (var item in run.RUNITEMS)
157
            {
158
                if (item.GetType() == typeof(Symbol))
159
                {
160
                    Symbol symbol = item as Symbol;
161
                    SymbolModeling(symbol, targetSymbol, prevSymbol);
162
                    prevSymbol = symbol;
163
                    targetSymbol = symbol;
164
                }
165
                else
166
                {
167
                    targetSymbol = null;
168
                }
169
            }
170
        }
171
172 8aa6f2db gaqhf
        private void SymbolModelingByRunStart(Symbol symbol, LineRun run)
173 809a7640 gaqhf
        {
174
            foreach (var connector in symbol.CONNECTORS)
175
            {
176
                object targetItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
177
                if (targetItem != null &&
178
                    (targetItem.GetType() == typeof(Symbol) || targetItem.GetType() == typeof(Equipment)) &&
179
                    !IsSameLineNumber(symbol, targetItem))
180
                {
181
                    SymbolModeling(symbol, targetItem as Symbol, null);
182
                    for (int i = 1; i < run.RUNITEMS.Count; i++)
183
                    {
184
                        object item = run.RUNITEMS[i];
185
                        if (item.GetType() == typeof(Symbol))
186
                            SymbolModeling(item as Symbol, run.RUNITEMS[i - 1] as Symbol, null);
187
                        else
188
                            break;
189
                    }
190
                    break;
191
                }
192
            }
193
194
195
        }
196
197 8aa6f2db gaqhf
        private void SymbolModelingByRunEnd(Symbol symbol, LineRun run)
198 809a7640 gaqhf
        {
199
            foreach (var connector in symbol.CONNECTORS)
200
            {
201
                object targetItem = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
202
                if (targetItem != null &&
203
                    (targetItem.GetType() == typeof(Symbol) || targetItem.GetType() == typeof(Equipment)) &&
204
                    !IsSameLineNumber(symbol, targetItem))
205
                {
206
                    SymbolModeling(symbol, targetItem as Symbol, null);
207
                    for (int i = run.RUNITEMS.Count - 2; i >= 0; i--)
208
                    {
209
                        object item = run.RUNITEMS[i];
210
                        if (item.GetType() == typeof(Symbol))
211
                            SymbolModeling(item as Symbol, run.RUNITEMS[i + 1] as Symbol, null);
212
                        else
213
                            break;
214
                    }
215
                    break;
216
                }
217
            }
218 5dfb8a24 gaqhf
        }
219 cfda1fed gaqhf
220 1b261371 gaqhf
221 5dfb8a24 gaqhf
        private void TestSource()
222
        {
223 cfda1fed gaqhf
224
        }
225
226 809a7640 gaqhf
        private void SymbolModeling(Symbol symbol, Symbol prevSymbol, object prevItem, bool IsFirst)
227 cfda1fed gaqhf
        {
228 809a7640 gaqhf
            if (!string.IsNullOrEmpty(symbol.SPPID.RepresentationId))
229
                return;
230
231 5dfb8a24 gaqhf
            LMSymbol _LMSymbol = null;
232
233
            string mappingPath = symbol.SPPID.MAPPINGNAME;
234 1b261371 gaqhf
            double x = symbol.SPPID.ORIGINAL_X;
235
            double y = symbol.SPPID.ORIGINAL_Y;
236 5dfb8a24 gaqhf
            int mirror = 0;
237
            double angle = symbol.ANGLE;
238
            LMSymbol _TargetItem = null;
239
240 809a7640 gaqhf
            if (IsFirst)
241
            {
242
                foreach (var connector in symbol.CONNECTORS)
243
                {
244
                    object item = SPPIDUtil.FindObjectByUID(document, connector.CONNECTEDITEM);
245
                    if (item != null && 
246
                        (item.GetType() == typeof(Symbol) || item.GetType() == typeof(Equipment)) && 
247
                        !IsSameLineNumber(symbol, item))
248
                    {
249
                        _TargetItem = dataSource.GetSymbol(((Symbol)item).SPPID.RepresentationId);
250
                        break;
251
                    }
252
                }
253
            }
254
            else if (prevItem != null && prevItem.GetType() == typeof(Symbol))
255 f1c9dbaa gaqhf
                _TargetItem = dataSource.GetSymbol(((Symbol)prevItem).SPPID.RepresentationId);
256 8aa6f2db gaqhf
            
257 5dfb8a24 gaqhf
            if (prevSymbol != null)
258
            {
259 1b261371 gaqhf
                SlopeType slopeType = SPPIDUtil.CalcSlope(x, y, prevSymbol.SPPID.ORIGINAL_X, prevSymbol.SPPID.ORIGINAL_Y);
260 f1c9dbaa gaqhf
                LMSymbol prevLMSymbol = dataSource.GetSymbol(prevSymbol.SPPID.RepresentationId);
261 1b261371 gaqhf
                double prevX = prevLMSymbol.get_XCoordinate();
262
                double prevY = prevLMSymbol.get_YCoordinate();
263 5dfb8a24 gaqhf
                if (slopeType == SlopeType.HORIZONTAL)
264 1b261371 gaqhf
                    y = prevY;
265 5dfb8a24 gaqhf
                else if (slopeType == SlopeType.VERTICAL)
266 1b261371 gaqhf
                    x = prevX;
267 8aa6f2db gaqhf
                
268 f1c9dbaa gaqhf
                ReleaseCOMObjects(prevLMSymbol);
269 5dfb8a24 gaqhf
            }
270
271
            if (_TargetItem == null)
272
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle);
273
            else
274
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle, TargetItem: _TargetItem);
275
276
            if (_LMSymbol != null)
277
            {
278 f1c9dbaa gaqhf
                _LMSymbol.Commit();
279
                symbol.SPPID.RepresentationId = _LMSymbol.AsLMRepresentation().Id;
280 5dfb8a24 gaqhf
            }
281
282 f1c9dbaa gaqhf
            if (_TargetItem != null)
283
                ReleaseCOMObjects(_TargetItem);
284 809a7640 gaqhf
            
285 f1c9dbaa gaqhf
            ReleaseCOMObjects(_LMSymbol);
286 cfda1fed gaqhf
        }
287
288 809a7640 gaqhf
        private void SymbolModeling(Symbol symbol, Symbol targetSymbol, Symbol prevSymbol)
289
        {
290
            if (!string.IsNullOrEmpty(symbol.SPPID.RepresentationId))
291
                return;
292
293
            LMSymbol _LMSymbol = null;
294
295
            string mappingPath = symbol.SPPID.MAPPINGNAME;
296
            double x = symbol.SPPID.ORIGINAL_X;
297
            double y = symbol.SPPID.ORIGINAL_Y;
298
            int mirror = 0;
299
            double angle = symbol.ANGLE;
300
301
            if (targetSymbol != null && !string.IsNullOrEmpty(targetSymbol.SPPID.RepresentationId))
302
            {
303
                LMSymbol _TargetItem = dataSource.GetSymbol(targetSymbol.SPPID.RepresentationId);
304
                //SlopeType slopeType = SPPIDUtil.CalcSlope(x, y, targetSymbol.SPPID.ORIGINAL_X, targetSymbol.SPPID.ORIGINAL_Y);
305
                //double prevX = _TargetItem.get_XCoordinate();
306
                //double prevY = _TargetItem.get_YCoordinate();
307
                //if (slopeType == SlopeType.HORIZONTAL)
308
                //    y = prevY;
309
                //else if (slopeType == SlopeType.VERTICAL)
310
                //    x = prevX;
311
312
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle, TargetItem: _TargetItem);
313
                ReleaseCOMObjects(_TargetItem);
314
            }
315
            else if (prevSymbol != null)
316
            {
317
                LMSymbol _PrevSymbol = dataSource.GetSymbol(prevSymbol.SPPID.RepresentationId);
318
                SlopeType slopeType = SPPIDUtil.CalcSlope(x, y, prevSymbol.SPPID.ORIGINAL_X, prevSymbol.SPPID.ORIGINAL_Y);
319
                double prevX = _PrevSymbol.get_XCoordinate();
320
                double prevY = _PrevSymbol.get_YCoordinate();
321
                if (slopeType == SlopeType.HORIZONTAL)
322
                    y = prevY;
323
                else if (slopeType == SlopeType.VERTICAL)
324
                    x = prevX;
325
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle);
326
            }
327
            else
328
            {
329
                _LMSymbol = _placement.PIDPlaceSymbol(mappingPath, x, y, Mirror: mirror, Rotation: angle);
330
            }
331
332
333
            if (_LMSymbol != null)
334
            {
335
                _LMSymbol.Commit();
336
                symbol.SPPID.RepresentationId = _LMSymbol.AsLMRepresentation().Id;
337
            }
338
339
            ReleaseCOMObjects(_LMSymbol);
340
        }
341
342
        private bool IsSameLineNumber(object item, object targetItem)
343
        {
344
            foreach (var lineNumber in document.LINENUMBERS)
345
            {
346
                foreach (var run in lineNumber.RUNS)
347
                {
348
                    foreach (var runItem in run.RUNITEMS)
349
                    {
350
                        if (runItem == item)
351
                        {
352
                            foreach (var findItem in run.RUNITEMS)
353
                            {
354
                                if (findItem == targetItem)
355
                                {
356
                                    return true;
357
                                }
358
                            }
359
360
                            return false;
361
362
                        }
363
                    }
364
                }
365
            }
366
367
            return false;
368
        }
369
370 1b261371 gaqhf
        private void LineModeling(List<Line> lines)
371
        {
372
            object DrwingID = "0";
373
            _LMAItem _LMAItem = _placement.PIDCreateItem(lines[0].SPPID.MAPPINGNAME, ref DrwingID);
374
            PlaceRunInputs placeRunInputs = new PlaceRunInputs();
375 f1c9dbaa gaqhf
            LMSymbol _LMSymbol1 = null;
376
            LMSymbol _LMSymbol2 = null;
377 5e6ecf05 gaqhf
            Dictionary<LMConnector, List<double[]>> connectorVertices1 = new Dictionary<LMConnector, List<double[]>>();
378
            LMConnector targetConnector1 = null;
379
            Dictionary<LMConnector, List<double[]>> connectorVertices2 = new Dictionary<LMConnector, List<double[]>>();
380
            LMConnector targetConnector2 = null;
381 1b261371 gaqhf
            for (int i = 0; i < lines.Count; i++)
382
            {
383
                Line line = lines[i];
384 f1c9dbaa gaqhf
                if (i == 0 || i + 1 != lines.Count)
385
                {
386 809a7640 gaqhf
                    // 시작점에 연결된 Symbol 찾기
387 f1c9dbaa gaqhf
                    object connItem = SPPIDUtil.FindObjectByUID(document, line.CONNECTORS[0].CONNECTEDITEM);
388
                    if (connItem != null && connItem.GetType() == typeof(Symbol))
389
                    {
390
                        _LMSymbol1 = dataSource.GetSymbol(((Symbol)connItem).SPPID.RepresentationId);
391
                        if (_LMSymbol1 != null)
392
                            placeRunInputs.AddSymbolTarget(_LMSymbol1, line.SPPID.START_X, line.SPPID.START_Y);
393
                        else
394
                            placeRunInputs.AddPoint(line.SPPID.START_X, line.SPPID.START_Y);
395
                    }
396 5e6ecf05 gaqhf
                    else if (connItem != null && connItem.GetType() == typeof(Line))
397
                    {
398
                        connectorVertices1 = GetPipeRunVertices(((Line)connItem).SPPID.ModelItemId);
399
                        targetConnector1 = FindTargetLMConnector(connectorVertices1, line.SPPID.START_X, line.SPPID.START_Y);
400
401
                        if (targetConnector1 != null)
402
                            placeRunInputs.AddConnectorTarget(targetConnector1, line.SPPID.START_X, line.SPPID.START_Y);
403
                        else
404
                            placeRunInputs.AddPoint(line.SPPID.START_X, line.SPPID.START_Y);
405
                    }
406 f1c9dbaa gaqhf
                    else
407
                        placeRunInputs.AddPoint(line.SPPID.START_X, line.SPPID.START_Y);
408
                }
409
410
                if (i + 1 == lines.Count)
411
                {
412 809a7640 gaqhf
                    // 끝점에 연결된 Symbol 찾기
413 f1c9dbaa gaqhf
                    object connItem = SPPIDUtil.FindObjectByUID(document, line.CONNECTORS[1].CONNECTEDITEM);
414 5e6ecf05 gaqhf
415
                    if (i != 0)
416
                        placeRunInputs.AddPoint(line.SPPID.START_X, line.SPPID.START_Y);
417
418 f1c9dbaa gaqhf
                    if (connItem != null && connItem.GetType() == typeof(Symbol))
419
                    {
420
                        _LMSymbol2 = dataSource.GetSymbol(((Symbol)connItem).SPPID.RepresentationId);
421
                        if (_LMSymbol2 != null)
422
                            placeRunInputs.AddSymbolTarget(_LMSymbol2, line.SPPID.END_X, line.SPPID.END_Y);
423
                        else
424
                            placeRunInputs.AddPoint(line.SPPID.END_X, line.SPPID.END_Y);
425
                            
426
                    }
427 5e6ecf05 gaqhf
                    else if (connItem != null && connItem.GetType() == typeof(Line))
428
                    {
429
                        connectorVertices2 = GetPipeRunVertices(((Line)connItem).SPPID.ModelItemId);
430
                        targetConnector2 = FindTargetLMConnector(connectorVertices2, line.SPPID.END_X, line.SPPID.END_Y);
431
432
                        if (targetConnector2 != null)
433
                            placeRunInputs.AddConnectorTarget(targetConnector2, line.SPPID.END_X, line.SPPID.END_Y);
434
                        else
435
                            placeRunInputs.AddPoint(line.SPPID.END_X, line.SPPID.END_Y);
436
                    }
437 f1c9dbaa gaqhf
                    else
438
                    {
439
                        placeRunInputs.AddPoint(line.SPPID.END_X, line.SPPID.END_Y);
440
                    }
441
                }
442
            }
443
444
            LMConnector _lMConnector = _placement.PIDPlaceRun(_LMAItem, placeRunInputs);
445
            if (_lMConnector != null)
446
            {
447
                foreach (var line in lines)
448 5e6ecf05 gaqhf
                    line.SPPID.ModelItemId = _lMConnector.ModelItemID;
449 f1c9dbaa gaqhf
                _lMConnector.Commit();
450 1b261371 gaqhf
            }
451 5e6ecf05 gaqhf
452 1b261371 gaqhf
453 f1c9dbaa gaqhf
            if (_LMSymbol1 != null)
454
                ReleaseCOMObjects(_LMSymbol1);
455
            if (_LMSymbol2 != null)
456
                ReleaseCOMObjects(_LMSymbol2);
457 5e6ecf05 gaqhf
            if (targetConnector1 != null)
458
                ReleaseCOMObjects(targetConnector1);
459
            if (targetConnector2 != null)
460
                ReleaseCOMObjects(targetConnector2);
461
            foreach (var item in connectorVertices1)
462
                ReleaseCOMObjects(item.Key);
463
            foreach (var item in connectorVertices2)
464
                ReleaseCOMObjects(item.Key);
465 1b261371 gaqhf
466 f1c9dbaa gaqhf
            ReleaseCOMObjects(_lMConnector);
467 1b261371 gaqhf
            ReleaseCOMObjects(placeRunInputs);
468
            ReleaseCOMObjects(_LMAItem);
469
        }
470
471 5e6ecf05 gaqhf
        private Dictionary<LMConnector, List<double[]>> GetPipeRunVertices(string modelId)
472
        {
473
            Dictionary<LMConnector, List<double[]>> connectorVertices = new Dictionary<LMConnector, List<double[]>>();
474
            LMPipeRun _LMPipeRun = dataSource.GetPipeRun(modelId);
475
            if (_LMPipeRun != null)
476
            {
477
                foreach (LMRepresentation rep in _LMPipeRun.Representations)
478
                {
479
                    if (rep.Attributes["RepresentationType"].get_Value() == "Connector" && rep.Attributes["ItemStatus"].get_Value() == "Active")
480
                    {
481
                        LMConnector _LMConnector = dataSource.GetConnector(rep.Id);
482
                        connectorVertices.Add(_LMConnector, new List<double[]>());
483
                        dynamic OID = rep.get_GraphicOID();
484
                        Ingr.RAD2D.DependencyObject drawingObject = radApp.ActiveDocument.ActiveSheet.DrawingObjects[OID];
485
                        Ingr.RAD2D.LineStringGeometry2d lineStringGeometry = drawingObject.GetGeometry() as Ingr.RAD2D.LineStringGeometry2d;
486
                        int verticesCount = lineStringGeometry.VertexCount;
487
                        double[] vertices = null;
488
                        lineStringGeometry.GetVertices(ref verticesCount, ref vertices);
489
                        for (int i = 0; i < verticesCount; i++)
490
                        {
491
                            double x = 0;
492
                            double y = 0;
493
                            lineStringGeometry.GetVertex(i + 1, ref x, ref y);
494
                            connectorVertices[_LMConnector].Add(new double[] { x, y });
495
                        }
496
                    }
497
                }
498
499
                ReleaseCOMObjects(_LMPipeRun);
500
            }
501
502
            return connectorVertices;
503
        }
504
505
        private LMConnector FindTargetLMConnector(Dictionary<LMConnector, List<double[]>> connectorVertices, double x, double y)
506
        {
507
            double length = double.MaxValue;
508
            LMConnector targetConnector = null;
509
            foreach (var item in connectorVertices)
510
            {
511
                List<double[]> points = item.Value;
512
                for (int i = 0; i < points.Count - 1; i++)
513
                {
514
                    double[] point1 = points[i];
515
                    double[] point2 = points[i + 1];
516
517
                    double maxLineX = Math.Max(point1[0], point2[0]);
518
                    double minLineX = Math.Min(point1[0], point2[0]);
519
                    double maxLineY = Math.Max(point1[1], point2[1]);
520
                    double minLineY = Math.Min(point1[1], point2[1]);
521
522
                    // 두직선의 교차점으로 구하면 될듯 그리고 교차점이 x y랑 제일 가까운것
523
524
                    if ((minLineX <= x && maxLineX >= x) ||
525
                        (minLineY <= y && maxLineY >= y))
526
                    {
527
                        double result = SPPIDUtil.CalcLineToPointDistance(point1[0], point1[1], point2[0], point2[1], x, y);
528
                        if (length > result)
529
                        {
530
                            targetConnector = item.Key;
531
                            length = result;
532
                        }
533
                    }
534
                }
535
            }
536
537
            return targetConnector;
538
        }
539
540 cfda1fed gaqhf
        private void LineNumberModeling(LineNumber lineNumber)
541
        {
542
543
        }
544
545
        private void TextModeling(Text text)
546
        {
547
548
        }
549
550
        private void NoteModeling(Note note)
551
        {
552
553
        }
554
555 5dfb8a24 gaqhf
556
        public void ReleaseCOMObjects(params object[] objVars)
557
        {
558
            int intNewRefCount = 0;
559
            foreach (object obj in objVars)
560
            {
561
                if (!Information.IsNothing(obj) && System.Runtime.InteropServices.Marshal.IsComObject(obj))
562
                    intNewRefCount = intNewRefCount + System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj);
563
            }
564
        }
565 cfda1fed gaqhf
    }
566
}
클립보드 이미지 추가 (최대 크기: 500 MB)