프로젝트

일반

사용자정보

개정판 022cae08

ID022cae08a203ed12b5a7ea757ccc5d620c76ab70
상위 1ac48030
하위 98fc753d

gaqhf 이(가) 약 6년 전에 추가함

build issue #000: remove sppidConverter project

차이점 보기:

DTI_PID/SPPIDConverter/App.config
1
<?xml version="1.0" encoding="utf-8"?>
2
<configuration>
3
  <configSections>
4
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
5
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
6
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
7
      <section name="SPPIDConverter.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
8
    </sectionGroup>
9
  </configSections>
10
  <startup>
11
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
12
  </startup>
13
  <entityFramework>
14
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
15
    <providers>
16
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
17
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
18
    </providers>
19
  </entityFramework>
20
  <system.data>
21
    <DbProviderFactories>
22
      <remove invariant="System.Data.SQLite.EF6"/>
23
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6"/>
24
    <remove invariant="System.Data.SQLite"/><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/></DbProviderFactories>
25
  </system.data>
26
  <userSettings>
27
    <SPPIDConverter.My.MySettings>
28
      <setting name="DBPath" serializeAs="String">
29
        <value />
30
      </setting>
31
      <setting name="Plant_Hierarchy" serializeAs="String">
32
        <value />
33
      </setting>
34
      <setting name="SymbolLibrary" serializeAs="String">
35
        <value />
36
      </setting>
37
    </SPPIDConverter.My.MySettings>
38
  </userSettings>
39
</configuration>
DTI_PID/SPPIDConverter/AutoModeling.vb
1
Imports System.IO
2
Imports System.Data.SqlClient
3
Imports System.Data.SQLite
4
Imports Plaice
5
Imports Llama
6
Imports ComUtil.MessageLog.CEventLog
7

  
8
Imports System.Threading
9
Public Class AutoModeling
10

  
11
    Public Shared CDrawing As Drawing
12
    Private PipeRunPoint As Dictionary(Of String, List(Of Pointd))
13
    Private sCnt As Integer
14
    Friend WithEvents ListBox_Result As ListBox
15

  
16
    Public Sub New(ByVal cDrawing As Drawing, ByVal ListBox_Result As ListBox)
17
        AutoModeling.CDrawing = cDrawing
18
        Me.PipeRunPoint = New Dictionary(Of String, List(Of Pointd))
19
        Me.ListBox_Result = ListBox_Result
20
    End Sub
21

  
22

  
23
    Public Sub StartModeling()
24
        Try
25
            Dim CGroupList As List(Of ItemGroup) = GetGroupList()
26
            DrawItemGroup(CGroupList)
27
            DrawTextItem()
28

  
29
        Catch ex As Exception
30
            Console.WriteLine(ex.Message)
31
        End Try
32
    End Sub
33
    Private Sub DrawLineNumber(ByVal lineUID As String)
34
        Dim lineNumbers As List(Of LineNumber) = CDrawing.LINENUMBERS
35

  
36
        For Each lineNumber As LineNumber In lineNumbers
37
            If lineNumber.CONNECTLINE = lineUID Then
38
                Dim _targetLine As Line = FindLineByUID(CDrawing.LINES, lineNumber.CONNECTLINE)
39
                If _targetLine IsNot Nothing Then
40
                    lineNumber.TARGETLINE = _targetLine
41
                    lineNumber.Modeling()
42
                    lineNumber.SetAttribute()
43
                End If
44
            End If
45
        Next
46
    End Sub
47

  
48
    Private Sub DrawTextItem()
49
        Dim _texts As List(Of Text) = CDrawing.TEXTS
50

  
51
        For Each _text As Text In _texts
52
            If _text.NAME = "TEXT" And String.IsNullOrEmpty(_text.OWNER) Then
53
                _text.Modeling()
54
            ElseIf _text.NAME = "SIZE" And String.IsNullOrEmpty(_text.OWNER) = False Then
55
                _text.Modeling()
56
                _text.SetAttribute()
57
            End If
58
        Next
59
    End Sub
60

  
61
    Private Sub IfContainLineNumber(ByVal lineUID As String)
62
        Dim lineNumbers As List(Of LineNumber) = CDrawing.LINENUMBERS
63

  
64
        For Each lineNumber As LineNumber In lineNumbers
65
            If lineNumber.CONNECTLINE = lineUID Then
66
                Dim _targetLine As Line = FindLineByUID(CDrawing.LINES, lineNumber.CONNECTLINE)
67
                If _targetLine IsNot Nothing Then
68
                    lineNumber.TARGETLINE = _targetLine
69
                    lineNumber.Modeling()
70
                    lineNumber.SetAttribute()
71
                End If
72

  
73
                Exit For
74
            End If
75
        Next
76
    End Sub
77

  
78
    Private Sub IfContainSizeLabel(ByVal lineUID As String)
79
        Dim _texts As List(Of Text) = CDrawing.TEXTS
80
        For Each _text As Text In _texts
81
            If _text.OWNER = lineUID Then
82
                _text.SetAttribute()
83
                Exit For
84
            End If
85
        Next
86
    End Sub
87

  
88
    Private Sub DrawItemGroup(ByVal CGroupList As List(Of ItemGroup))
89
        sCnt = 1
90
        For Each itemGroup As ItemGroup In CGroupList
91
            DrawGroup_Symbol(itemGroup)
92
        Next
93
        sCnt = 1
94
        While CGroupList.Count > 0
95
            For Each itemGroup As ItemGroup In CGroupList
96
                If IsCanDraw(itemGroup) Then
97
                    DrawGroup_Line(itemGroup)
98
                    'DrawGroup(itemGroup)
99
                    CGroupList.Remove(itemGroup)
100
                    Exit For
101
                Else
102
                    Continue For
103
                End If
104
            Next
105
        End While
106
    End Sub
107

  
108
    Private Sub DrawGroup(ByVal itemGroup As ItemGroup)
109

  
110
        If DrawGroup_Symbol(itemGroup) Then
111
            DrawGroup_Line(itemGroup)
112
        Else
113
            Return
114
        End If
115
    End Sub
116

  
117
    Private Function DrawGroup_Symbol(ByVal itemGroup As ItemGroup) As Boolean
118
        Dim list As List(Of Object) = itemGroup.Group
119
        Dim prevSymbol As Symbol = Nothing
120
        Dim prevIndex As Integer = 0
121

  
122
        For index = 0 To list.Count - 1
123
            Dim obj As Object = list(index)
124
            If TypeOf (obj) Is Symbol Then
125
                Dim symbol As Symbol = obj
126
                '' PrevSymbol과 현재의 Symbol 비교하여 그리기
127
                If prevSymbol IsNot Nothing Then
128
                    Dim prevSlope As SlopType = SlopType.NONE
129
                    For lineIndex = prevIndex + 1 To index - 1
130
                        Dim _line As Line = list(lineIndex)
131
                        If prevSlope = SlopType.NONE Then
132
                            prevSlope = _line.SLOPTYPE
133
                        ElseIf prevSlope <> _line.SLOPTYPE Then
134
                            prevSlope = SlopType.NONE
135
                            Exit For
136
                        End If
137
                    Next
138
                    If prevSlope = SlopType.HORIZONTAL Then
139
                        symbol.LOCATION_Y = prevSymbol.SPPID_ITEM_OBJECT.YCoordinate
140
                    ElseIf prevSlope = SlopType.VERTICAL Then
141
                        symbol.LOCATION_X = prevSymbol.SPPID_ITEM_OBJECT.XCoordinate
142
                    End If
143
                End If
144
                SetListBoxItems(ListBox_Result, "Create Symbol (" + sCnt.ToString + "/" + CDrawing.SYMBOLS.Count.ToString + ") UID : " + symbol.UID)
145
                sCnt += 1
146
                symbol.Modeling()
147
                If symbol.SPPID_ITEM_OBJECT IsNot Nothing Then
148
                    prevSymbol = symbol
149
                    prevIndex = index
150
                Else
151
                    Return False
152
                End If
153
            End If
154
        Next
155
        Return True
156
    End Function
157

  
158
    Private Function DrawGroup_Line(ByVal itemGroup As ItemGroup) As Boolean
159
        Dim list As List(Of Object) = itemGroup.Group
160
        Dim _Placement As Placement = New Placement
161
        Dim allLine As List(Of Line) = New List(Of Line)
162
        Dim lineList As List(Of Line) = New List(Of Line)
163
        Dim pipeRuns As LMPipeRuns = New LMPipeRuns
164

  
165
        For index = 0 To list.Count - 1
166
            Dim obj As Object = list(index)
167

  
168
            If TypeOf (obj) Is Line Then
169
                Dim line As Line = obj
170
                lineList.Add(line)
171
                allLine.Add(line)
172
                SetListBoxItems(ListBox_Result, "Grouping Line (" + sCnt.ToString + "/" + CDrawing.LINES.Count.ToString + ") UID : " + line.UID)
173
                sCnt += 1
174
            ElseIf lineList.Count > 0 Then
175
                SetListBoxItems(ListBox_Result, "DrawLine : " + lineList.Count.ToString)
176
                Dim lmConnector As LMConnector = DrawLine(GetLinePoints(lineList), lineList(0).SPPIDMAPPINGNAME)
177
                If lmConnector IsNot Nothing Then
178
                    For Each _line As Line In lineList
179
                        _line.LMCONNECTOR_MODELID = lmConnector.ModelItemID
180
                        IfContainLineNumber(_line.UID)
181
                        IfContainSizeLabel(_line.UID)
182
                    Next
183
                    pipeRuns.Add(_Placement.PIDDataSource.GetPipeRun(lmConnector.ModelItemID))
184
                End If
185
                lineList = New List(Of Line)
186
            End If
187
        Next
188

  
189
        If lineList.Count > 0 Then
190
            SetListBoxItems(ListBox_Result, "DrawLine : " + lineList.Count.ToString)
191
            Dim lmConnector As LMConnector = DrawLine(GetLinePoints(lineList), lineList(0).SPPIDMAPPINGNAME)
192
            If lmConnector IsNot Nothing Then
193
                For Each _line As Line In lineList
194
                    _line.LMCONNECTOR_MODELID = lmConnector.ModelItemID
195
                    IfContainLineNumber(_line.UID)
196
                    IfContainSizeLabel(_line.UID)
197
                Next
198
                pipeRuns.Add(_Placement.PIDDataSource.GetPipeRun(lmConnector.ModelItemID))
199
            End If
200
        End If
201

  
202
        ''' Pipe Run Join
203
        'For Each run As LMPipeRun In pipeRuns
204
        '    Dim objSurvivorItem As LMAItem
205
        '    Dim prevUID As String = run.AsLMAItem.Id
206
        '    _Placement.PIDAutoJoin(run.AsLMAItem, AutoJoinEndConstants.autoJoin_Both, objSurvivorItem)
207
        '    If objSurvivorItem IsNot Nothing Then
208
        '        Dim newUID = objSurvivorItem.Id
209
        '        For Each obj As Object In list
210
        '            If TypeOf (obj) Is Line Then
211
        '                Dim line As Line = obj
212
        '                If line.LMCONNECTOR_MODELID = prevUID Then
213
        '                    line.LMCONNECTOR_MODELID = newUID
214
        '                End If
215
        '            End If
216
        '        Next
217
        '    End If
218
        'Next
219

  
220

  
221
        ''' 일반 조인 확인 중
222
        'For index = 0 To testList.Count - 2
223
        '    If testList(index) = testList(index + 1) Then
224
        '        Continue For
225
        '    End If
226
        '    Dim run1 As LMAItem = _Placement.PIDDataSource.GetPipeRun(testList(index)).AsLMAItem
227
        '    Dim run2 As LMAItem = _Placement.PIDDataSource.GetPipeRun(testList(index + 1)).AsLMAItem
228
        '    _Placement.PIDJoinRuns(run2, run1)
229
        '    testList(index) = run1.Id
230
        '    Console.WriteLine(run1.Id)
231
        '    testList(index + 1) = run2.Id
232
        '    Console.WriteLine(run2.Id)
233
        'Next
234

  
235

  
236

  
237

  
238

  
239

  
240
        '' Branch를 위해서 만들어진 Points 정리
241
        SetGroupPoints(allLine)
242

  
243
        'For Each dic In PipeRunPoint
244
        '    Dim points As List(Of Pointd) = dic.Value
245
        '    Debug.WriteLine("-----------------------------" + dic.Key + "-----------------------------")
246
        '    For Each point In points
247
        '        Debug.WriteLine(point.X.ToString + "/" + point.Y.ToString + "/" + point.PointInfo)
248
        '    Next
249
        '    Debug.WriteLine("----------------------------- end " + "-----------------------------")
250
        'Next
251

  
252
        Return True
253
    End Function
254

  
255
    Private Sub SetGroupPoints(ByVal lines As List(Of Line))
256
        'Dim _temp As List(Of String) = New List(Of String)
257

  
258
        For Each line As Line In lines
259
            '' 순서로 들어옴
260
            Dim sModelId As String = line.LMCONNECTOR_MODELID
261
            If PipeRunPoint.ContainsKey(sModelId) = False Then
262
                PipeRunPoint.Add(sModelId, New List(Of Pointd))
263
            End If
264

  
265
            Dim pointList As List(Of Pointd) = PipeRunPoint(sModelId)
266
            If pointList.Count > 0 Then
267
                Dim lastPoint As Pointd = pointList(pointList.Count - 1)
268

  
269
                Dim point1 As Pointd = New Pointd(line.START_X, line.START_Y)
270
                point1.ConnectedUID = line.CONNECTORS(0).CONNECTEDITEM
271
                point1.PointInfo = GetPointState(line.UID, point1.ConnectedUID)
272
                point1.SP_ID = GetSymbolSP_ID(point1.ConnectedUID)
273
                point1.Line = line
274

  
275
                Dim point2 As Pointd = New Pointd(line.END_X, line.END_Y)
276
                point2.ConnectedUID = line.CONNECTORS(1).CONNECTEDITEM
277
                point2.PointInfo = GetPointState(line.UID, point2.ConnectedUID)
278
                point2.SP_ID = GetSymbolSP_ID(point2.ConnectedUID)
279
                point2.Line = line
280

  
281
                If point1.ConnectedUID = lastPoint.Line.UID Then
282
                    pointList.Add(point2)
283
                ElseIf point2.ConnectedUID = lastPoint.Line.UID Then
284
                    pointList.Add(point1)
285
                ElseIf lastPoint.ConnectedUID = point1.ConnectedUID Then
286
                    pointList.Add(point1)
287
                    pointList.Add(point2)
288
                ElseIf lastPoint.ConnectedUID = point2.ConnectedUID Then
289
                    pointList.Add(point2)
290
                    pointList.Add(point1)
291
                Else
292
                    Throw New Exception("Logic Error")
293
                End If
294

  
295
            Else
296
                Dim UIDList As List(Of String) = New List(Of String)
297
                UIDList.Add(line.UID)
298
                If IsStartOrLastPointByModelId(line.CONNECTORS(0).CONNECTEDITEM, line.LMCONNECTOR_MODELID, UIDList) Then
299
                    Dim point1 As Pointd = New Pointd(line.START_X, line.START_Y)
300
                    point1.ConnectedUID = line.CONNECTORS(0).CONNECTEDITEM
301
                    point1.PointInfo = GetPointState(line.UID, point1.ConnectedUID)
302
                    point1.Line = line
303
                    point1.SP_ID = GetSymbolSP_ID(point1.ConnectedUID)
304
                    pointList.Add(point1)
305

  
306
                    Dim point2 As Pointd = New Pointd(line.END_X, line.END_Y)
307
                    point2.ConnectedUID = line.CONNECTORS(1).CONNECTEDITEM
308
                    point2.PointInfo = GetPointState(line.UID, point2.ConnectedUID)
309
                    point2.Line = line
310
                    point2.SP_ID = GetSymbolSP_ID(point2.ConnectedUID)
311
                    pointList.Add(point2)
312
                ElseIf IsStartOrLastPointByModelId(line.CONNECTORS(1).CONNECTEDITEM, line.LMCONNECTOR_MODELID, UIDList) Then
313
                    Dim point2 As Pointd = New Pointd(line.END_X, line.END_Y)
314
                    point2.ConnectedUID = line.CONNECTORS(1).CONNECTEDITEM
315
                    point2.PointInfo = GetPointState(line.UID, point2.ConnectedUID)
316
                    point2.Line = line
317
                    point2.SP_ID = GetSymbolSP_ID(point2.ConnectedUID)
318
                    pointList.Add(point2)
319

  
320
                    Dim point1 As Pointd = New Pointd(line.START_X, line.START_Y)
321
                    point1.ConnectedUID = line.CONNECTORS(0).CONNECTEDITEM
322
                    point1.PointInfo = GetPointState(line.UID, point1.ConnectedUID)
323
                    point1.Line = line
324
                    point1.SP_ID = GetSymbolSP_ID(point1.ConnectedUID)
325
                    pointList.Add(point1)
326
                Else
327
                    Throw New Exception("Logic Error")
328
                End If
329

  
330
            End If
331
        Next
332
    End Sub
333

  
334
    Private Function GetSymbolSP_ID(ByVal symbolUID As String) As String
335
        Dim symbol As Symbol = FindSymbolByUID(CDrawing.SYMBOLS, symbolUID)
336
        If symbol IsNot Nothing Then
337
            Return symbol.SPPID_ITEM_OBJECT.AsLMRepresentation.Id
338
        Else
339
            Return ""
340
        End If
341

  
342
    End Function
343

  
344
    Private Function GetPointState(ByVal lineUID As String, ByVal connectedItem As String) As String
345
        If IsBranchLine(connectedItem, lineUID, CDrawing.LINES) Then
346
            Return "BRANCH"
347
        ElseIf FindSymbolByUID(CDrawing.SYMBOLS, connectedItem) IsNot Nothing Then
348
            Return "SYMBOL"
349
        ElseIf FindLineByUID(CDrawing.LINES, connectedItem) IsNot Nothing Then
350
            Return "RUN"
351
        ElseIf String.IsNullOrEmpty(connectedItem) Then
352
            Return "RUN"
353
        ElseIf connectedItem = "None" Then
354
            Return "Run"
355
        Else
356
            Throw New Exception("Logic Error")
357
        End If
358
    End Function
359

  
360
    Private Function FindFirstOrLastLMConnector(ByVal modelId As String) As LMConnector
361
        Dim _Placement As Placement = New Placement
362
        Dim lmPipeRun As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(modelId)
363

  
364
        For Each oRep As LMRepresentation In lmPipeRun.Representations
365
            If oRep.Attributes("RepresentationType").Value = "Connector" And oRep.Attributes("ItemStatus").Value = "Active" Then
366
                Dim _conn As LMConnector = _Placement.PIDDataSource.GetConnector(oRep.Id)
367

  
368
                Dim connectedItem As LMSymbol = _conn.ConnectItem1SymbolObject
369
                If connectedItem Is Nothing Then
370
                    Return _conn
371
                ElseIf connectedItem.RepresentationType.ToString = "" Then
372
                    Debug.WriteLine(connectedItem.RepresentationType.ToString)
373
                Else
374
                    Debug.WriteLine(connectedItem.RepresentationType.ToString)
375
                End If
376

  
377
                connectedItem = _conn.ConnectItem2SymbolObject
378
                If connectedItem Is Nothing Then
379
                    Return _conn
380
                ElseIf connectedItem.RepresentationType.ToString = "" Then
381
                    Debug.WriteLine(connectedItem.RepresentationType.ToString)
382
                Else
383
                    Debug.WriteLine(connectedItem.RepresentationType.ToString)
384
                End If
385

  
386
            End If
387
        Next
388

  
389
        Return Nothing
390
    End Function
391

  
392

  
393
    ''' <summary>
394
    ''' Branch, 심볼, 비어있으면 마지막 ConnectorPoint라는 것을 알아냄 - 전체 Model ID가 아닌 부분 Line 기준
395
    ''' </summary>
396
    ''' <param name="lineUID"></param>
397
    ''' <param name="connectedItem"></param>
398
    ''' <returns></returns>
399
    Private Function IsStartOrLastPointForSplitLine(ByVal lineUID As String, ByVal connectedItem As String, Optional ByVal containSymbol As Boolean = True) As Boolean
400
        If IsBranchLine(connectedItem, lineUID, CDrawing.LINES) Then
401
            Return True
402
        ElseIf FindSymbolByUID(CDrawing.SYMBOLS, connectedItem) IsNot Nothing And containSymbol Then
403
            Return True
404
        ElseIf connectedItem = "None" Then
405
            Return True
406
        ElseIf String.IsNullOrEmpty(connectedItem) Then
407
            Return True
408
        End If
409
        Return False
410
    End Function
411

  
412
    Private Function IsStartOrLastPointByModelId(ByVal connectedItemUID As String, ByVal modelId As String, ByVal UIDList As List(Of String)) As Boolean
413
        Dim connectedSymbol As Symbol = FindSymbolByUID(CDrawing.SYMBOLS, connectedItemUID)
414
        Dim connectedLine As Line = FindLineByUID(CDrawing.LINES, connectedItemUID)
415
        Dim result As Boolean = True
416

  
417
        UIDList.Add(connectedItemUID)
418

  
419
        If connectedSymbol IsNot Nothing Then
420
            For Each connector As Connector In connectedSymbol.CONNECTORS
421
                If connector.CONNECTEDITEM <> connectedItemUID Then
422
                    If UIDList.Contains(connector.CONNECTEDITEM) = False Then
423
                        If IsStartOrLastPointByModelId(connector.CONNECTEDITEM, modelId, UIDList) = False Then
424
                            result = False
425
                        End If
426
                    End If
427
                End If
428
            Next
429
        ElseIf connectedLine IsNot Nothing Then
430
            If connectedLine.LMCONNECTOR_MODELID = modelId Then
431
                result = False
432
            End If
433
        End If
434

  
435
        Return result
436
    End Function
437

  
438
    Private Function GetLinePoints(ByVal lineList As List(Of Line)) As List(Of Pointd)
439
        Try
440
            Dim points As List(Of Pointd) = GetGroupPoint(lineList)
441

  
442
            Dim startLine As Line = lineList(0)
443
            Dim endLine As Line = lineList(lineList.Count - 1)
444

  
445
            Dim startConnItem1 As String = startLine.CONNECTORS(0).CONNECTEDITEM
446
            Dim startConnItem2 As String = startLine.CONNECTORS(1).CONNECTEDITEM
447
            Dim endConnItem1 As String = endLine.CONNECTORS(0).CONNECTEDITEM
448
            Dim endConnItem2 As String = endLine.CONNECTORS(1).CONNECTEDITEM
449

  
450
            If lineList.Count = 1 Then
451
                Dim point As Pointd = points(0)
452
                point.ConnectedUID = startConnItem1
453
                points(0) = point
454
                Dim point2 As Pointd = points(1)
455
                point2.ConnectedUID = startConnItem2
456
                points(1) = point2
457
            Else
458
                Dim point As Pointd = points(0)
459
                If IsStartOrLastPointForSplitLine(startLine.UID, startConnItem1) Then
460
                    point.ConnectedUID = startConnItem1
461
                    points(0) = point
462
                ElseIf IsStartOrLastPointForSplitLine(startLine.UID, startConnItem2) Then
463
                    point.ConnectedUID = startConnItem2
464
                    points(0) = point
465
                Else
466
                    Throw New Exception("GetLinePoints")
467
                End If
468
                point = points(points.Count - 1)
469
                If IsStartOrLastPointForSplitLine(endLine.UID, endConnItem1) Then
470
                    point.ConnectedUID = endConnItem1
471
                    points(points.Count - 1) = point
472
                ElseIf IsStartOrLastPointForSplitLine(endLine.UID, endConnItem2) Then
473
                    point.ConnectedUID = endConnItem2
474
                    points(points.Count - 1) = point
475
                Else
476
                    Throw New Exception("GetLinePoints")
477
                End If
478

  
479

  
480
            End If
481

  
482
            '' 보정
483
            Dim startPoint As Pointd = points(0)
484
            Dim connSymbol As Symbol = FindSymbolByUID(CDrawing.SYMBOLS, startPoint.ConnectedUID)
485
            If connSymbol IsNot Nothing Then
486
                Dim symbolX As Double = connSymbol.SPPID_ITEM_OBJECT.XCoordinate
487
                Dim symbolY As Double = connSymbol.SPPID_ITEM_OBJECT.YCoordinate
488
                Dim nextPoint As Pointd = points(1)
489
                If IsHorizontal(startPoint, nextPoint) Then
490
                    startPoint.Y = symbolY
491
                    nextPoint.Y = symbolY
492
                Else
493
                    startPoint.X = symbolX
494
                    nextPoint.X = symbolX
495
                End If
496

  
497
                points(0) = startPoint
498
                points(1) = nextPoint
499
            End If
500

  
501
            Dim endPoint As Pointd = points(points.Count - 1)
502
            connSymbol = FindSymbolByUID(CDrawing.SYMBOLS, endPoint.ConnectedUID)
503
            If connSymbol IsNot Nothing Then
504
                Dim symbolX As Double = connSymbol.SPPID_ITEM_OBJECT.XCoordinate
505
                Dim symbolY As Double = connSymbol.SPPID_ITEM_OBJECT.YCoordinate
506
                Dim nextPoint As Pointd = points(points.Count - 2)
507
                If IsHorizontal(endPoint, nextPoint) Then
508
                    endPoint.Y = symbolY
509
                    nextPoint.Y = symbolY
510
                Else
511
                    endPoint.X = symbolX
512
                    nextPoint.X = symbolX
513
                End If
514

  
515
                points(points.Count - 1) = endPoint
516
                points(points.Count - 2) = nextPoint
517
            End If
518

  
519

  
520
            Return points
521

  
522
        Catch ex As Exception
523
            Debug.WriteLine(ex.Message)
524
        End Try
525

  
526
    End Function
527

  
528
    Class Pointd
529
        Public Sub New(ByVal X As Double, ByVal Y As Double)
530
            Me.X = X
531
            Me.Y = Y
532
        End Sub
533
        Public X As Double
534
        Public Y As Double
535
        Public ConnectedUID As String
536
        Public PointInfo As String
537
        Public Line As Line
538
        Public SP_ID As String
539
    End Class
540

  
541
    Private Function GetGroupPoint(ByVal group As List(Of Line)) As List(Of Pointd)
542

  
543
        Dim resultLine As List(Of Tuple(Of Line, Boolean)) = New List(Of Tuple(Of Line, Boolean))
544
        Dim _lines As List(Of Tuple(Of Line, Boolean)) = New List(Of Tuple(Of Line, Boolean))
545
        For Each line As Line In group
546
            Dim tuple As Tuple(Of Line, Boolean) = New Tuple(Of Line, Boolean)(line, IsHorizontal(line))
547
            _lines.Add(tuple)
548
        Next
549

  
550
        For Each tuple As Tuple(Of Line, Boolean) In _lines
551
            If resultLine.Count = 0 Then
552
                resultLine.Add(tuple)
553
            Else
554
                Dim prevTuple As Tuple(Of Line, Boolean) = resultLine(resultLine.Count - 1)
555

  
556
                If prevTuple.Item2 = tuple.Item2 Then
557
                    resultLine.Remove(prevTuple)
558
                    resultLine.Add(mergeLine(tuple.Item1, prevTuple.Item1, tuple.Item2))
559
                Else
560
                    resultLine.Add(tuple)
561
                End If
562
            End If
563
        Next
564

  
565
        Dim pointList As List(Of Pointd) = New List(Of Pointd)
566
        For Each tuple As Tuple(Of Line, Boolean) In resultLine
567
            If pointList.Count = 0 Then
568
                Dim line As Line = tuple.Item1
569

  
570
                Dim point1 As Pointd = New Pointd(line.START_X, line.START_Y)
571
                Dim point2 As Pointd = New Pointd(line.END_X, line.END_Y)
572

  
573
                pointList.Add(point1)
574
                pointList.Add(point2)
575
            Else
576
                Dim line As Line = tuple.Item1
577
                Dim isHorizontal As Boolean = tuple.Item2
578

  
579
                Dim prevPoint1 As Pointd = pointList(pointList.Count - 2)
580
                Dim prevPoint2 As Pointd = pointList(pointList.Count - 1)
581
                Dim currPoint1 As Pointd = New Pointd(line.START_X, line.START_Y)
582
                Dim currPoint2 As Pointd = New Pointd(line.END_X, line.END_Y)
583

  
584
                ''제일 작은 조합의 반대편 prevPoint를 넣어야함
585
                Dim distance = CalcDistance(prevPoint1, currPoint1)
586
                Dim prev = True
587
                Dim curr = True
588

  
589
                If distance > CalcDistance(prevPoint1, currPoint2) Then
590
                    distance = CalcDistance(prevPoint1, currPoint2)
591
                    curr = False
592
                End If
593

  
594
                If distance > CalcDistance(prevPoint2, currPoint1) Then
595
                    distance = CalcDistance(prevPoint2, currPoint1)
596
                    prev = False
597
                    curr = True
598
                End If
599

  
600
                If distance > CalcDistance(prevPoint2, currPoint2) Then
601
                    distance = CalcDistance(prevPoint2, currPoint2)
602
                    prev = False
603
                    curr = False
604
                End If
605

  
606
                pointList.RemoveAt(pointList.Count - 2)
607
                pointList.RemoveAt(pointList.Count - 1)
608

  
609
                ' 지금은 수평 / 이전 수직
610
                If isHorizontal Then
611
                    If prev Then
612
                        pointList.Add(prevPoint2)
613

  
614
                        If curr Then
615
                            Dim newPoint As Pointd = New Pointd(prevPoint2.X, currPoint2.Y)
616
                            pointList.Add(newPoint)
617

  
618
                            pointList.Add(currPoint2)
619
                        Else
620
                            Dim newPoint As Pointd = New Pointd(prevPoint2.X, currPoint1.Y)
621
                            pointList.Add(newPoint)
622

  
623
                            pointList.Add(currPoint1)
624
                        End If
625
                    Else
626
                        pointList.Add(prevPoint1)
627

  
628
                        If curr Then
629
                            Dim newPoint As Pointd = New Pointd(prevPoint1.X, currPoint2.Y)
630
                            pointList.Add(newPoint)
631

  
632
                            pointList.Add(currPoint2)
633
                        Else
634
                            Dim newPoint As Pointd = New Pointd(prevPoint1.X, currPoint1.Y)
635
                            pointList.Add(newPoint)
636

  
637
                            pointList.Add(currPoint1)
638
                        End If
639
                    End If
640
                    '지금은 수직 / 이전 수평
641
                Else
642
                    If prev Then
643
                        pointList.Add(prevPoint2)
644

  
645
                        If curr Then
646
                            Dim newPoint As Pointd = New Pointd(currPoint2.X, prevPoint2.Y)
647
                            pointList.Add(newPoint)
648

  
649
                            pointList.Add(currPoint2)
650
                        Else
651
                            Dim newPoint As Pointd = New Pointd(currPoint1.X, prevPoint2.Y)
652
                            pointList.Add(newPoint)
653

  
654
                            pointList.Add(currPoint1)
655
                        End If
656
                    Else
657
                        pointList.Add(prevPoint1)
658

  
659
                        If curr Then
660
                            Dim newPoint As Pointd = New Pointd(currPoint2.X, prevPoint1.Y)
661
                            pointList.Add(newPoint)
662

  
663
                            pointList.Add(currPoint2)
664
                        Else
665
                            Dim newPoint As Pointd = New Pointd(currPoint1.X, prevPoint1.Y)
666
                            pointList.Add(newPoint)
667

  
668
                            pointList.Add(currPoint1)
669
                        End If
670
                    End If
671
                End If
672
            End If
673
        Next
674

  
675
        Return pointList
676
    End Function
677

  
678
    Private Function IsHorizontal(ByVal point1 As Pointd, ByVal point2 As Pointd) As Boolean
679
        If point1.X - point2.X = 0 Then
680
            Return False
681
        Else
682
            Dim angle = Math.Atan(Math.Abs(point2.Y - point1.Y) / Math.Abs(point2.X - point1.X)) * 180 / Math.PI
683
            If angle < 10 Then
684
                Return True
685
            Else
686
                Return False
687
            End If
688
        End If
689
    End Function
690

  
691
    Private Function IsHorizontal(ByVal line As Line)
692
        If line.END_X - line.START_X = 0 Then
693
            Return False
694
        Else
695
            Dim angle = Math.Atan(Math.Abs(line.END_Y - line.START_Y) / Math.Abs(line.END_X - line.START_X)) * 180 / Math.PI
696
            If angle < 10 Then
697
                Return True
698
            Else
699
                Return False
700
            End If
701
        End If
702
    End Function
703

  
704
    Private Function mergeLine(line1 As Line, line2 As Line, isHorizontal As Boolean) As Tuple(Of Line, Boolean)
705
        If isHorizontal Then
706
            Dim min As Double = Math.Min(line1.START_X, Math.Min(line1.END_X, Math.Min(line2.START_X, line2.END_X)))
707
            Dim max As Double = Math.Max(line1.START_X, Math.Max(line1.END_X, Math.Max(line2.START_X, line2.END_X)))
708

  
709
            Dim nLine As Line = New Line()
710
            nLine.START_X = min
711
            nLine.START_Y = line1.START_Y
712
            nLine.END_X = max
713
            nLine.END_Y = line1.START_Y
714

  
715
            Dim tuple As Tuple(Of Line, Boolean) = New Tuple(Of Line, Boolean)(nLine, isHorizontal)
716
            Return tuple
717
        Else
718
            Dim min As Double = Math.Min(line1.START_Y, Math.Min(line1.END_Y, Math.Min(line2.START_Y, line2.END_Y)))
719
            Dim max As Double = Math.Max(line1.START_Y, Math.Max(line1.END_Y, Math.Max(line2.START_Y, line2.END_Y)))
720

  
721
            Dim nLine As Line = New Line()
722
            nLine.START_X = line1.START_X
723
            nLine.START_Y = min
724
            nLine.END_X = line1.START_X
725
            nLine.END_Y = max
726

  
727
            Dim tuple As Tuple(Of Line, Boolean) = New Tuple(Of Line, Boolean)(nLine, isHorizontal)
728
            Return tuple
729
        End If
730

  
731
    End Function
732

  
733
    Private Function CalcDistance(ByVal point1 As Pointd, ByVal point2 As Pointd) As Double
734
        Return Math.Pow(Math.Sqrt(Math.Abs(point1.X - point2.X)) + Math.Sqrt(Math.Abs(point1.Y - point2.Y)), 0.5)
735
    End Function
736

  
737

  
738
    Private Function DrawSymbol(ByVal symbol As Symbol) As LMSymbol
739
        Dim _Placement As Placement = New Placement
740
        Dim sysPath = symbol.SPPIDMAPPINGNAME
741
        Dim _lmSymbol As LMSymbol = Nothing
742

  
743
        If sysPath <> "" Then
744
            Dim connectSymbol As LMSymbol = Nothing
745
            For Each connector As Connector In symbol.CONNECTORS
746
                If String.IsNullOrEmpty(connector.CONNECTEDITEM) = False Or connector.CONNECTEDITEM <> "None" Then
747
                    Dim _sym As Symbol = FindSymbolByUID(CDrawing.SYMBOLS, connector.CONNECTEDITEM)
748
                    If _sym IsNot Nothing Then
749
                        If _sym.SPPID_ITEM_OBJECT IsNot Nothing Then
750
                            connectSymbol = _sym.SPPID_ITEM_OBJECT
751
                            Exit For
752
                        End If
753
                    End If
754
                End If
755
            Next
756
            If connectSymbol IsNot Nothing Then
757
                _lmSymbol = _Placement.PIDPlaceSymbol(sysPath, symbol.LOCATION_X, symbol.LOCATION_Y, Rotation:=symbol.ANGLE, Mirror:=symbol.MIRROR, TargetItem:=connectSymbol)
758
            Else
759
                _lmSymbol = _Placement.PIDPlaceSymbol(sysPath, symbol.LOCATION_X, symbol.LOCATION_Y, Rotation:=symbol.ANGLE, Mirror:=symbol.MIRROR)
760
            End If
761
            _lmSymbol.Commit()
762

  
763
            '' Check Child
764
            For Each _child As String In symbol.CHILD
765
                Dim arrChild As String() = _child.Split(",")
766
                Dim arrow As String = arrChild(0)
767
                Dim mappingName As String = arrChild(1)
768

  
769
                Dim childAngle = 0
770
                If arrow = "UP" Then
771
                    childAngle = 0
772
                ElseIf arrow = "RIGHT" Then
773
                    childAngle = 90
774
                ElseIf arrow = "DOWN" Then
775
                    childAngle = 180
776
                Else
777
                    childAngle = 270
778
                End If
779

  
780
                Dim _childLmSymbol As LMSymbol = _Placement.PIDPlaceSymbol(mappingName, symbol.LOCATION_X, symbol.LOCATION_Y, Rotation:=childAngle, TargetItem:=_lmSymbol)
781
                symbol.CHILD_SPPID_ITEM_OBJECT.Add(_childLmSymbol)
782
            Next
783

  
784
            Debug.WriteLine(symbol.LOCATION_X.ToString + "," + symbol.LOCATION_Y.ToString + "/" + symbol.UID + "/" + symbol.SIZE)
785
        End If
786

  
787
        Return _lmSymbol
788
    End Function
789

  
790
    Private Function DrawLine(ByVal points As List(Of Pointd), ByVal PipeSystemPath As String) As LMConnector
791
        Dim _Placement As Placement = New Placement
792
        Dim objItem As LMAItem = _Placement.PIDCreateItem(PipeSystemPath)
793
        Dim _lmConnector As LMConnector = Nothing
794
        Dim objInputs As PlaceRunInputs = New PlaceRunInputs
795
        Dim branchPoint As Pointd = Nothing
796
        Dim branchIndex As Integer = 0
797
        Dim branch_SP_ID_List As List(Of String) = New List(Of String)
798

  
799
        Try
800
            For index = 0 To points.Count - 1
801
                Dim point As Pointd = points(index)
802
                If index = 0 Or index = points.Count - 1 Then
803

  
804
                    Dim targetSymbol As Symbol = FindSymbolByUID(CDrawing.SYMBOLS, point.ConnectedUID)
805
                    Dim targetLine As Line = FindLineByUID(CDrawing.LINES, point.ConnectedUID)
806
                    If targetSymbol IsNot Nothing Then
807
                        objInputs.AddSymbolTarget(targetSymbol.SPPID_ITEM_OBJECT, point.X, point.Y)
808
                    ElseIf targetLine IsNot Nothing Then
809
                        '찾아야함'
810
                        If String.IsNullOrEmpty(targetLine.LMCONNECTOR_MODELID) Then
811
                            Console.WriteLine("targetLine.LMCONNECTOR_MODELID")
812
                        End If
813
                        Dim resultTuple As Tuple(Of LMConnector, Integer) = GetTargetLMConnector(targetLine.LMCONNECTOR_MODELID, point)
814
                        If resultTuple IsNot Nothing Then
815
                            objInputs.AddConnectorTarget(resultTuple.Item1, point.X, point.Y)
816
                            branchPoint = New Pointd(point.X, point.Y)
817
                            branchPoint.PointInfo = "BRANCH"
818
                            branchPoint.Line = targetLine
819
                            branchIndex = resultTuple.Item2
820
                            'branchPoint.
821

  
822
                            Dim run As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(targetLine.LMCONNECTOR_MODELID)
823
                            For Each oRep As LMRepresentation In run.Representations
824
                                If oRep.Attributes("RepresentationType").Value = "Branch" And oRep.Attributes("ItemStatus").Value = "Active" Then
825
                                    branch_SP_ID_List.Add(oRep.Id)
826
                                End If
827
                            Next
828
                        Else
829
                            Console.WriteLine("target lmconnector error : " + targetLine.UID)
830
                            objInputs.AddPoint(point.X, point.Y)
831
                        End If
832
                    Else
833
                        objInputs.AddPoint(point.X, point.Y)
834
                    End If
835

  
836
                Else
837
                    objInputs.AddPoint(point.X, point.Y)
838
                End If
839
            Next
840
            _lmConnector = _Placement.PIDPlaceRun(objItem, objInputs)
841
            _lmConnector.Commit()
842

  
843
            If branchPoint IsNot Nothing Then
844
                Dim run As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(branchPoint.Line.LMCONNECTOR_MODELID)
845
                For Each oRep As LMRepresentation In run.Representations
846
                    If oRep.Attributes("RepresentationType").Value = "Branch" And oRep.Attributes("ItemStatus").Value = "Active" Then
847
                        If branch_SP_ID_List.Contains(oRep.Id) = False Then
848
                            branchPoint.SP_ID = oRep.Id
849
                            PipeRunPoint(branchPoint.Line.LMCONNECTOR_MODELID).Insert(branchIndex, branchPoint)
850
                            Exit For
851
                        End If
852
                    End If
853
                Next
854
            End If
855
        Catch ex As Exception
856
            Console.WriteLine(ex.Message)
857

  
858
        End Try
859

  
860
        Return _lmConnector
861
    End Function
862

  
863

  
864
    Public Function GetTargetLMConnector(ByVal ModelId As String, ByVal point As Pointd) As Tuple(Of LMConnector, Integer)
865
        Dim lmConnector As LMConnector = Nothing
866
        Dim ConnPoint1 As Pointd = Nothing
867
        Dim ConnPoint2 As Pointd = Nothing
868
        Dim insertIndex As Integer = 0
869

  
870
        Dim min As Double = 0
871
        Dim max As Double = 0
872
        Dim _tempDistance As Double = 0
873
        Dim distance As Double = Double.MaxValue
874

  
875
        Try
876
            Dim pointdList As List(Of Pointd) = PipeRunPoint(ModelId)
877

  
878
            For index = 0 To pointdList.Count - 2
879
                Dim point1 As Pointd = pointdList(index)
880
                Dim point2 As Pointd = pointdList(index + 1)
881

  
882
                If IsHorizontal(point1, point2) Then
883
                    min = Math.Min(point1.X, point2.X)
884
                    max = Math.Max(point1.X, point2.X)
885
                    _tempDistance = Math.Abs((point1.Y + point2.Y) / 2 - point.Y)
886

  
887
                    If min <= point.X And max >= point.X And _tempDistance < distance Then
888
                        ConnPoint1 = pointdList(index)
889
                        ConnPoint2 = pointdList(index + 1)
890
                        insertIndex = index + 1
891
                        distance = _tempDistance
892
                    End If
893

  
894
                Else
895
                    min = Math.Min(point1.Y, point2.Y)
896
                    max = Math.Max(point1.Y, point2.Y)
897
                    _tempDistance = Math.Abs((point1.X + point2.X) / 2 - point.X)
898

  
899
                    If min <= point.Y And max >= point.Y And _tempDistance < distance Then
900
                        ConnPoint1 = pointdList(index)
901
                        ConnPoint2 = pointdList(index + 1)
902
                        insertIndex = index + 1
903
                        distance = _tempDistance
904
                    End If
905
                End If
906
            Next
907

  
908
            If ConnPoint1 IsNot Nothing And ConnPoint2 IsNot Nothing Then
909
                If ConnPoint1.PointInfo.ToUpper = "RUN" Then
910
                    lmConnector = GetLMConnectorByPoint(ModelId, ConnPoint1)
911
                ElseIf ConnPoint2.PointInfo.ToUpper = "RUN" Then
912
                    lmConnector = GetLMConnectorByPoint(ModelId, ConnPoint2)
913
                Else
914
                    lmConnector = GetLMConnectorBySP_ID(ModelId, ConnPoint1.SP_ID, ConnPoint2.SP_ID)
915
                End If
916
            End If
917

  
918
            If lmConnector Is Nothing Then
919
                Throw New Exception("Logic Error")
920
            End If
921

  
922
            Return New Tuple(Of LMConnector, Integer)(lmConnector, insertIndex)
923
        Catch ex As Exception
924
            Debug.WriteLine(ex.Message)
925
            Return Nothing
926
        End Try
927
    End Function
928

  
929
    Private Function GetLMConnectorByPoint(ByVal ModelId As String, ByVal point As Pointd) As LMConnector
930
        Dim objPlacement As Placement = New Placement
931
        Dim objConnector As LMConnector = Nothing
932

  
933
        Dim distance As Double = Double.MaxValue
934
        Dim lmPipeRun As LMPipeRun = objPlacement.PIDDataSource.GetPipeRun(ModelId)
935
        For Each oRep As LMRepresentation In lmPipeRun.Representations
936
            If oRep.Attributes("RepresentationType").Value = "Connector" And oRep.Attributes("ItemStatus").Value = "Active" Then
937
                Dim _conn As LMConnector = objPlacement.PIDDataSource.GetConnector(oRep.Id)
938
                For Each vertex As LMConnectorVertex In _conn.ConnectorVertices
939
                    Dim _distance As Double = CalcPointToPointdDistance(point, New Pointd(vertex.XCoordinate, vertex.YCoordinate))
940

  
941
                    If _distance < distance Then
942
                        distance = _distance
943
                        objConnector = _conn
944
                    End If
945
                Next
946
            End If
947
        Next
948

  
949
        Return objConnector
950
    End Function
951

  
952
    Private Function GetLMConnectorBySP_ID(ByVal ModelId As String, ByVal SP_ID1 As String, ByVal SP_ID2 As String) As LMConnector
953
        Dim objPlacement As Placement = New Placement
954
        Dim objConnector As LMConnector = Nothing
955

  
956
        Dim distance As Double = Double.MaxValue
957
        Dim lmPipeRun As LMPipeRun = objPlacement.PIDDataSource.GetPipeRun(ModelId)
958
        For Each oRep As LMRepresentation In lmPipeRun.Representations
959
            If oRep.Attributes("RepresentationType").Value = "Connector" And oRep.Attributes("ItemStatus").Value = "Active" Then
960
                Dim _conn As LMConnector = objPlacement.PIDDataSource.GetConnector(oRep.Id)
961

  
962
                Dim find1 As Boolean = False
963
                Dim find2 As Boolean = False
964

  
965
                If _conn.ConnectItem1SymbolID IsNot Nothing Then
966
                    If _conn.ConnectItem1SymbolID.ToString = SP_ID1 Or _conn.ConnectItem1SymbolID.ToString = SP_ID2 Then
967
                        find1 = True
968
                    End If
969
                End If
970

  
971
                If _conn.ConnectItem2SymbolID IsNot Nothing Then
972
                    If _conn.ConnectItem2SymbolID.ToString = SP_ID1 Or _conn.ConnectItem2SymbolID.ToString = SP_ID2 Then
973
                        find2 = True
974
                    End If
975
                End If
976

  
977
                If find1 And find2 Then
978
                    Return _conn
979
                End If
980
            End If
981
        Next
982

  
983
        If objConnector Is Nothing Then
984
            Debug.WriteLine("Error At GetLMConnectorBySP_ID")
985
        End If
986

  
987
        Return objConnector
988
    End Function
989

  
990
    Private Function CalcPointToPointdDistance(ByVal point1 As Pointd, ByVal point2 As Pointd) As Double
991
        Return Math.Pow(Math.Pow(point1.X - point2.X, 2) + Math.Pow(point1.Y - point2.Y, 2), 0.5)
992
    End Function
993

  
994
    Private Function IsCanDraw(ByVal itemGroup As ItemGroup) As Boolean
995
        Dim lineList As List(Of Line) = CDrawing.LINES
996

  
997
        Dim groupSymbols As List(Of Symbol) = New List(Of Symbol)
998
        Dim groupLines As List(Of Line) = New List(Of Line)
999

  
1000
        For Each item As Object In itemGroup.Group
1001
            If TypeOf (item) Is Line Then
1002
                groupLines.Add(item)
1003
            Else
1004
                groupSymbols.Add(item)
1005
            End If
1006
        Next
1007

  
1008
        For Each symbol As Symbol In groupSymbols
1009
            For Each conn As Connector In symbol.CONNECTORS
1010
                Dim _line As Line = FindLineByUID(CDrawing.LINES, conn.CONNECTEDITEM)
1011
                Dim _symbol As Symbol = FindSymbolByUID(CDrawing.SYMBOLS, conn.CONNECTEDITEM)
1012
                If _line IsNot Nothing Then
1013
                    If groupLines.Contains(_line) = False And String.IsNullOrEmpty(_line.LMCONNECTOR_MODELID) Then
1014
                        Return False
1015
                    End If
1016
                ElseIf _symbol IsNot Nothing Then
1017
                    If groupSymbols.Contains(_symbol) = False And _symbol.SPPID_ITEM_OBJECT Is Nothing Then
1018
                        Return False
1019
                    End If
1020
                End If
1021
            Next
1022
        Next
1023

  
1024
        For Each line As Line In groupLines
1025
            For Each conn As Connector In line.CONNECTORS
1026
                Dim _line As Line = FindLineByUID(CDrawing.LINES, conn.CONNECTEDITEM)
1027
                Dim _symbol As Symbol = FindSymbolByUID(CDrawing.SYMBOLS, conn.CONNECTEDITEM)
1028
                If _line IsNot Nothing Then
1029
                    If groupLines.Contains(_line) = False And String.IsNullOrEmpty(_line.LMCONNECTOR_MODELID) Then
1030
                        Return False
1031
                    End If
1032
                ElseIf _symbol IsNot Nothing Then
1033
                    If groupSymbols.Contains(_symbol) = False And _symbol.SPPID_ITEM_OBJECT Is Nothing Then
1034
                        Return False
1035
                    End If
1036
                End If
1037
            Next
1038
        Next
1039

  
1040

  
1041
        Return True
1042
    End Function
1043

  
1044
    Private Function IsContainGroup(ByVal UID As String, ByVal symbols As List(Of Symbol), ByVal lines As List(Of Line)) As Boolean
1045
        Dim line As Line = FindLineByUID(lines, UID)
1046
        Dim symbol As Symbol = FindSymbolByUID(symbols, UID)
1047

  
1048
        If line IsNot Nothing Then
1049
            Return True
1050
        ElseIf symbol IsNot Nothing Then
1051
            Return True
1052
        Else
1053
            Return False
1054
        End If
1055
    End Function
1056

  
1057
    Private Function GetGroupList() As List(Of ItemGroup)
1058
        Dim symbolList As List(Of Symbol) = CDrawing.SYMBOLS
1059
        Dim lineList As List(Of Line) = CDrawing.LINES
1060

  
1061
        Dim CGroupList As List(Of ItemGroup) = New List(Of ItemGroup)
1062

  
1063
        '' Line 기준으로 먼저 묶음
1064
        For Each line As Line In lineList
1065
            If line.GROUPING Then
1066
                Dim group As ItemGroup = GetGroupByLine(line)
1067
                CGroupList.Add(group)
1068
            End If
1069
        Next
1070

  
1071
        '' Symbol
1072
        For Each symbol As Symbol In symbolList
1073
            If symbol.GROUPING Then
1074
                Dim group As ItemGroup = New ItemGroup()
1075
                group.Add(symbol)
1076
                CGroupList.Add(group)
1077
            End If
1078
        Next
1079

  
1080
        Return CGroupList
1081
    End Function
1082

  
1083
    Private Function GetGroupByLine(ByVal line As Line) As ItemGroup
1084
        Dim CItemGroup As ItemGroup = New ItemGroup()
1085

  
1086
        Dim symbolList As List(Of Symbol) = CDrawing.SYMBOLS
1087
        Dim lineList As List(Of Line) = CDrawing.LINES
1088

  
1089
        Dim forwardItems As List(Of Object) = New List(Of Object)
1090
        Dim reverseItems As List(Of Object) = New List(Of Object)
1091
        line.GROUPING = False
1092

  
1093
        ''dd
1094
        Console.WriteLine(line.UID)
1095

  
1096
        Dim _symbol As Symbol = FindSymbolByUID(symbolList, line.CONNECTORS(0).CONNECTEDITEM)
1097
        Dim _line As Line = FindLineByUID(lineList, line.CONNECTORS(0).CONNECTEDITEM)
1098

  
1099
        If _line IsNot Nothing Then
1100
            If IsBranchLine(line.CONNECTORS(0).CONNECTEDITEM, line.UID, lineList) = False And _line.GROUPING And _line.SPPIDMAPPINGNAME = line.SPPIDMAPPINGNAME Then
1101
                _line.GROUPING = False
1102
                forwardItems.Add(_line)
1103
                FindConnectedItem(_line, forwardItems, line.SPPIDMAPPINGNAME)
1104
            End If
1105
        ElseIf _symbol IsNot Nothing Then
1106
            If _symbol.GROUPING Then
1107
                If _symbol.CONNECTORS.Count <= 2 Then
1108
                    _symbol.GROUPING = False
1109
                    forwardItems.Add(_symbol)
1110
                    FindConnectedItem(_symbol, forwardItems, line.SPPIDMAPPINGNAME)
1111
                Else
1112
                    Dim connector As List(Of Connector) = _symbol.CONNECTORS
1113
                    For index = 0 To connector.Count - 1
1114
                        If index < 2 Then
1115
                            If connector(index).CONNECTEDITEM = line.UID Then
1116
                                _symbol.GROUPING = False
1117
                                forwardItems.Add(_symbol)
1118
                                FindConnectedItem(_symbol, forwardItems, line.SPPIDMAPPINGNAME)
1119
                                Exit For
1120
                            End If
1121
                        End If
1122
                    Next
1123
                End If
1124
            End If
1125
        End If
1126

  
1127
        _symbol = FindSymbolByUID(symbolList, line.CONNECTORS(1).CONNECTEDITEM)
1128
        _line = FindLineByUID(lineList, line.CONNECTORS(1).CONNECTEDITEM)
1129
        If _line IsNot Nothing Then
1130
            If IsBranchLine(line.CONNECTORS(1).CONNECTEDITEM, line.UID, lineList) = False And _line.GROUPING And _line.SPPIDMAPPINGNAME = line.SPPIDMAPPINGNAME Then
1131
                _line.GROUPING = False
1132
                reverseItems.Add(_line)
1133
                FindConnectedItem(_line, reverseItems, line.SPPIDMAPPINGNAME)
1134
            End If
1135
        ElseIf _symbol IsNot Nothing Then
1136
            If _symbol.GROUPING Then
1137
                If _symbol.CONNECTORS.Count <= 2 Then
1138
                    _symbol.GROUPING = False
1139
                    reverseItems.Add(_symbol)
1140
                    FindConnectedItem(_symbol, reverseItems, line.SPPIDMAPPINGNAME)
1141
                Else
1142
                    Dim connector As List(Of Connector) = _symbol.CONNECTORS
1143
                    For index = 0 To connector.Count - 1
1144
                        If index < 2 Then
1145
                            If connector(index).CONNECTEDITEM = line.UID Then
1146
                                _symbol.GROUPING = False
1147
                                reverseItems.Add(_symbol)
1148
                                FindConnectedItem(_symbol, reverseItems, line.SPPIDMAPPINGNAME)
1149
                                Exit For
1150
                            End If
1151
                        End If
1152
                    Next
1153
                End If
1154
            End If
1155
        End If
1156

  
1157
        reverseItems.Reverse()
1158
        reverseItems.Add(line)
1159
        reverseItems.AddRange(forwardItems)
1160

  
1161
        For Each item As Object In reverseItems
1162
            CItemGroup.Add(item)
1163
        Next
1164

  
1165
        Return CItemGroup
1166
    End Function
1167

  
1168
    Private Sub FindConnectedItem(ByVal shape As Object, ByRef groupItem As List(Of Object), ByVal PIDMAPPINGNAME As String)
1169
        Dim symbolList As List(Of Symbol) = CDrawing.SYMBOLS
1170
        Dim lineList As List(Of Line) = CDrawing.LINES
1171

  
1172
        If TypeOf (shape) Is Line Then
1173
            Dim _line As Line = shape
1174

  
1175
            For Each conn As Connector In _line.CONNECTORS
1176
                Dim symbol As Symbol = FindSymbolByUID(symbolList, conn.CONNECTEDITEM)
1177
                Dim line As Line = FindLineByUID(lineList, conn.CONNECTEDITEM)
1178

  
1179
                If line IsNot Nothing Then
1180
                    If IsBranchLine(line.UID, _line.UID, lineList) = False And line.GROUPING And _line.SPPIDMAPPINGNAME = line.SPPIDMAPPINGNAME Then
1181
                        line.GROUPING = False
1182
                        groupItem.Add(line)
1183
                        FindConnectedItem(line, groupItem, PIDMAPPINGNAME)
1184
                    End If
1185
                ElseIf symbol IsNot Nothing Then
1186
                    If symbol.GROUPING Then
1187
                        If symbol.CONNECTORS.Count <= 2 Then
1188
                            symbol.GROUPING = False
1189
                            groupItem.Add(symbol)
1190
                            FindConnectedItem(symbol, groupItem, PIDMAPPINGNAME)
1191
                        Else
1192
                            Dim connector As List(Of Connector) = symbol.CONNECTORS
1193
                            For index = 0 To connector.Count - 1
1194
                                If index < 2 Then
1195
                                    If connector(index).CONNECTEDITEM = _line.UID Then
1196
                                        symbol.GROUPING = False
1197
                                        groupItem.Add(symbol)
1198
                                        FindConnectedItem(symbol, groupItem, PIDMAPPINGNAME)
1199
                                        Exit For
1200
                                    End If
1201
                                End If
1202
                            Next
1203
                        End If
1204
                    End If
1205
                End If
1206
            Next
1207

  
1208
        ElseIf TypeOf (shape) Is Symbol Then
1209
            Dim _symbol As Symbol = shape
1210

  
1211
            For Each conn As Connector In _symbol.CONNECTORS
1212
                Dim symbol As Symbol = FindSymbolByUID(symbolList, conn.CONNECTEDITEM)
1213
                Dim line As Line = FindLineByUID(lineList, conn.CONNECTEDITEM)
1214

  
1215
                If line IsNot Nothing Then
1216
                    If line.GROUPING And PIDMAPPINGNAME = line.SPPIDMAPPINGNAME Then
1217
                        line.GROUPING = False
1218
                        groupItem.Add(line)
1219
                        FindConnectedItem(line, groupItem, PIDMAPPINGNAME)
1220
                        Exit For
1221
                    End If
1222
                ElseIf symbol IsNot Nothing Then
1223
                    If symbol.GROUPING Then
1224
                        If symbol.CONNECTORS.Count <= 2 Then
1225
                            symbol.GROUPING = False
1226
                            groupItem.Add(symbol)
1227
                            FindConnectedItem(symbol, groupItem, PIDMAPPINGNAME)
1228
                        Else
1229
                            Dim connector As List(Of Connector) = symbol.CONNECTORS
1230
                            For index = 0 To connector.Count - 1
1231
                                If index < 2 Then
1232
                                    If connector(index).CONNECTEDITEM = _symbol.UID Then
1233
                                        symbol.GROUPING = False
1234
                                        groupItem.Add(symbol)
1235
                                        FindConnectedItem(symbol, groupItem, PIDMAPPINGNAME)
1236
                                        Exit For
1237
                                    End If
1238
                                End If
1239
                            Next
1240
                        End If
1241
                    End If
1242
                End If
1243
            Next
1244
        End If
1245
    End Sub
1246

  
1247

  
1248
    Private Function IsBranchLine(ByVal connectedUID As String, ByVal UID As String, ByVal lines As List(Of Line)) As Boolean
1249
        Dim connLine = FindLineByUID(lines, connectedUID)
1250
        If connLine IsNot Nothing Then
1251
            If connLine.CONNECTORS(0).CONNECTEDITEM <> UID And connLine.CONNECTORS(1).CONNECTEDITEM <> UID Then
1252
                Return True
1253
            End If
1254
        End If
1255

  
1256
        Return False
1257
    End Function
1258

  
1259

  
1260
    Private Function FindLineByUID(ByVal lines As List(Of Line), ByVal uid As String) As Line
1261
        For Each line As Line In lines
1262
            If line.UID = uid Then
1263
                Return line
1264
            End If
1265
        Next
1266

  
1267
        Return Nothing
1268
    End Function
1269

  
1270

  
1271
    Private Function FindSymbolByUID(ByVal symbols As List(Of Symbol), ByVal uid As String) As Symbol
1272
        For Each symbol As Symbol In symbols
1273
            If symbol.UID = uid Then
1274
                Return symbol
1275
            End If
1276
        Next
1277

  
1278
        Return Nothing
1279
    End Function
1280

  
1281
    Public Class ItemGroup
1282
        Private _group As List(Of Object) = New List(Of Object)
1283

  
1284
        Public Property Group As List(Of Object)
1285
            Get
1286
                Return _group
1287
            End Get
1288
            Set(value As List(Of Object))
1289
                _group = value
1290
            End Set
1291
        End Property
1292

  
1293
        Public Sub Add(ByVal item As Object)
1294
            group.Add(item)
1295
        End Sub
1296
    End Class
1297

  
1298
End Class
DTI_PID/SPPIDConverter/CGembox.vb
1
Imports GemBox.Spreadsheet
2
Imports System.Drawing
3
Imports System.IO
4

  
5
Public Class CGembox
6

  
7
    Public _ExcelFile As ExcelFile
8
    Dim _Index_Cnt As Integer = 2
9
    Dim _LicenseKey As String = "EXK0-W4HZ-N518-IMEW"
10
    Sub New()
11
        setLicense()
12
    End Sub
13
    Private Sub setLicense()
14
        SpreadsheetInfo.SetLicense(_LicenseKey)
15
        _ExcelFile = New ExcelFile
16
        '   _ExcelFile = New ExcelFile 
17
    End Sub
18

  
19
#Region "엑셀 공용 함수"
20
    Dim EXCEL_HEAD As Integer = 0
21
    Dim EXCEL_START As Integer = 1
22

  
23
    Function SaveFileFunc(ByVal mWorksheet As String, ByVal mPath As String, ByVal mDT As DataTable) As Boolean
24
        Try
25
            SetCell(_ExcelFile.Worksheets(mWorksheet).Rows(EXCEL_HEAD).Cells(0), "HEAD")
26
            SetCell(_ExcelFile.Worksheets(mWorksheet).Rows(EXCEL_START).Cells(0), "START")
27
            For mColcnt = 0 To mDT.Columns.Count - 1
28
                SetCell(_ExcelFile.Worksheets(mWorksheet).Rows(EXCEL_HEAD).Cells(mColcnt + 1), mDT.Columns(mColcnt).ColumnName)
29
            Next
30
            If mDT IsNot Nothing Then
31
                For mRowcnt = 0 To mDT.Rows.Count - 1
32
                    SetCell(_ExcelFile.Worksheets(mWorksheet).Rows(EXCEL_START + 1 + mRowcnt).Cells(0), String.Empty)
33
                    For mColcnt = 0 To mDT.Columns.Count - 1
34
                        SetCell(_ExcelFile.Worksheets(mWorksheet).Rows(EXCEL_START + mRowcnt).Cells(mColcnt + 1), mDT.Rows(mRowcnt).Item(mColcnt).ToString)
35
                    Next
36
                Next
37
            End If
38
            SetCell(_ExcelFile.Worksheets(mWorksheet).Rows(mDT.Rows.Count + EXCEL_START).Cells(0), "END")
39
            SetSaveFile(_ExcelFile, mPath)
40
        Catch ex As Exception
41
            Return False
42
        End Try
43
        Return True
44
    End Function
45

  
46
    Function LoadFileFunc() As DataSet
47
        Dim oDs As New DataSet
48
        '  Dim oExcelFile As New ExcelFile
49
        _TempExcel = New ExcelFile
50
        '    _TempFileName = DateTime.Now.Year & "_" & DateTime.Now.Month & "_" & DateTime.Now.Day & " " & DateTime.Now.Hour & "_" & DateTime.Now.Minute & "_" & DateTime.Now.Second
51
        For Each oSheet In _ExcelFile.Worksheets
52

  
53
            If oSheet.Name = _Sheet_Equipment Or
54
                oSheet.Name = _Sheet_EquipmentComponents Or
55
                oSheet.Name = _Sheet_Instrumentation Or
56
                oSheet.Name = _Sheet_Piping Then
57
                _TempExcel.Worksheets.AddCopy(oSheet.Name, oSheet)
58
                Dim oDt As New DataTable
59
                oDt.TableName = oSheet.Name
60

  
61
                Dim mFindHeadInt As Integer = 0 ' GetFindRow(_ExcelFile.Worksheets(msheetName), "HEAD")
62
                Dim mStartInt As Integer = 1 'GetFindRow(_ExcelFile.Worksheets(msheetName), "START")
63
                Dim mLastColInt As Integer = oSheet.CalculateMaxUsedColumns 'GetFindColumnCount(_ExcelFile.Worksheets(oSheet.Name), mFindHeadInt)
64

  
65
                Dim mInputColInt As Integer = 0
66
                If mFindHeadInt <> -1 Or mStartInt <> -1 Or mLastColInt <> -1 Then
67
                    For mCellcnt = 1 To mLastColInt
68
                        If _ExcelFile.Worksheets(oSheet.Name).Rows(mFindHeadInt).Cells(mCellcnt).Value <> "" Then
69
                            Dim oCheckColumnName As Boolean = False
70
                            For i = 0 To oDt.Columns.Count - 1
71
                                If oDt.Columns(i).ColumnName = _ExcelFile.Worksheets(oSheet.Name).Rows(mFindHeadInt).Cells(mCellcnt).Value Then
72
                                    oCheckColumnName = True
73
                                    Exit For
74
                                End If
75
                            Next
76
                            If oCheckColumnName = False Then
77
                                '/ 컬럼이름을 데이터테이블에 저장. 그리드뷰에 출력하기 위해서
78
                                Dim oCol As DataColumn = oDt.Columns.Add(_ExcelFile.Worksheets(oSheet.Name).Rows(mFindHeadInt).Cells(mCellcnt).Value)
79
                                oCol.Namespace = mCellcnt
80
                                mInputColInt = mCellcnt
81
                            End If
82
                        End If
83
                    Next
84

  
85
                    Dim oIndexCol As DataColumn = oDt.Columns.Add(_Column_Index)
86
                    oIndexCol.Namespace = mInputColInt
87
                    oIndexCol.ColumnMapping = MappingType.Hidden
88
                    '/END 열을 찾아서 START 부터 END 까지 데이터를 데이터테이블에 입력
89
                    Dim mFindEndInt As Integer = _ExcelFile.Worksheets(oSheet.Name).Rows.Count 'GetFindRow(_ExcelFile.Worksheets(oSheet.Name), " ")
90
                    For mRowcnt = 1 To mFindEndInt - 1
91
                        Try
92

  
93
                            Dim mDataRow As DataRow = oDt.NewRow
94
                            For mCellCnt = 1 To mLastColInt - 1
95
                                Try
96
                                    Dim oColName As String = _ExcelFile.Worksheets(oSheet.Name).Rows(mFindHeadInt).Cells(mCellCnt).Value
97
                                    If oColName <> Nothing Then
98

  
99
                                        Dim oValve As String = _ExcelFile.Worksheets(oSheet.Name).Rows(mRowcnt).Cells(mCellCnt).Value
100
                                        If oValve IsNot Nothing Then
101
                                            If oValve = "" Then
102
                                                mDataRow(oColName) = ""
103
                                            Else
104
                                                Dim sPreValue As String = mDataRow(oColName).ToString()
105

  
106
                                                If sPreValue <> "" Then
107
                                                    mDataRow(oColName) = sPreValue & "\" & oValve
108
                                                Else
109
                                                    mDataRow(oColName) = oValve
110
                                                End If
111
                                            End If
112
                                        Else
113
                                            If mDataRow(oColName) IsNot Nothing Then
114
                                                If mDataRow(oColName).ToString() = "" Then
115
                                                    mDataRow(oColName) = ""
116
                                                End If
117
                                            End If
118
                                        End If
119
                                    End If
120
                                Catch ex As Exception
121
                                End Try
122
                            Next
123
                            mDataRow(_Column_Index) = mRowcnt
124
                            If mDataRow("SYM FILE NAME").ToString() <> "" Then
125
                                oDt.Rows.Add(mDataRow)
126
                            End If
127
                        Catch ex As Exception
128
                        End Try
129
                    Next
130
                End If
131
                oDs.Tables.Add(oDt)
132
            End If
133
        Next
134
        Return oDs
135
    End Function
136

  
137
    Function AddImageLibrary(ByVal oDs As DataSet, ByVal oPIDSymbol_Dt As DataTable) As DataTable
138

  
139
        Dim oImageSymbol_Dt As DataTable = ImageSymbol_Dt()
140
        Dim iColcnt As Integer = 0
... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.

내보내기 Unified diff