프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / SPPIDConverter / Main.vb @ a79d6d46

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

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

    
10
Public Class Main
11
    'Dim _Mapping_DB As DataTable = New DataTable()
12
    Public _Mapping_DB As DataSet = New DataSet()
13
    Dim _Attribute_DB As DataTable = New DataTable()
14
    Dim _PIDSymbol_DB As DataTable = New DataTable()
15
    Dim _ResultModeling_DT As DataTable = New DataTable()
16
    Dim _AllLine_DT As New DataTable()
17
    Dim _AllSymbol_DT As New DataTable()
18
    Dim _ModelingLine_Dt As New DataTable()
19
    Dim _ModelingSymbol_Dt As New DataTable()
20
    Dim _Placement As New Placement
21
    Dim _DWG_X = 0.875 '0.695 '1 '
22
    Dim _DWG_Y = 0.617 '0.585 '0.8 '
23
    'Dim _DWG_X = 0.842 '0.695 '1 '
24
    'Dim _DWG_Y = 0.614 '0.585 '0.8 '
25
    Public _IMG_X = 0
26
    Public _IMG_Y = 0
27
    Dim _Unit As String
28
    'Drawing 전역변수
29
    Dim _objPIDADrawing As Object
30
    '현재선택한 폴더경로
31
    Dim _selectFolderPath As String
32
    Private _Main_trd As Thread
33
    Private _Opc_trd As Thread
34
    Private _CompleteConvert As Boolean = False
35
    Private _DrawingsList As List(Of Drawing)
36
    Private _iPipeLineNocnt As Integer
37
    Private _iPipecnt As Integer
38
    Private _iFittingcnt As Integer
39
    Private _iValvecnt As Integer
40
    Private _iInstrumentcnt As Integer
41
    Private _iEquipmentcnt As Integer
42
    Private _iNozzlecnt As Integer
43
    Private _iPipintOpccnt As Integer
44
    Private _allItem As Integer
45
    Private _Itemcnt As Integer
46
    Dim _Gembox As New CGembox()
47

    
48
    Dim PipeRunPoint As Dictionary(Of String, List(Of PointdInfo)) = New Dictionary(Of String, List(Of PointdInfo))
49

    
50
    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
51
        LoadDB()
52
    End Sub
53
    ''' <summary>
54
    ''' brief
55
    ''' </summary>
56

    
57
    Private Sub LoadDB()
58
        If My.Settings.DBPath <> "" And My.Settings.Plant_Hierarchy <> "" Then
59
            Dim sDBPath As String = My.Settings.DBPath
60

    
61
            _Gembox.isLoadFile(My.Settings.SymbolLibrary)
62
            _Mapping_DB = _Gembox.LoadFileFunc()
63
            _Attribute_DB = Load_DB(sDBPath, _DB_TABLE_ATTRIBUTE)
64
            _PIDSymbol_DB = Load_DB(sDBPath, _DB_TABLE_SYMBOLNAME)
65
            _ResultModeling_DT = ModelingResult_Dt()
66
        Else
67
            MessageBox.Show("설정값을 먼저 확인해주세요")
68
        End If
69
    End Sub
70

    
71
    Public Function GetDataFromMappingDB(ByVal sSymbolName As String, ByVal sColumn As String) As String
72
        Dim sValue As String = ""
73

    
74
        'Debug.WriteLine(_Mapping_DB.Tables.Count)
75

    
76
        For Each oDt As DataTable In _Mapping_DB.Tables
77
            If oDt.Rows.Count > 0 Then
78
                Dim oSelectRow() As DataRow = oDt.Select("[Img_symbolname] = '" + sSymbolName + "'")
79
                If oSelectRow.Length = 1 Then
80
                    If sColumn = _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME Then
81
                        sValue = oSelectRow(0).Item("SYM FILE NAME").ToString()
82
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH Then
83
                        sValue = "\" & oSelectRow(0).Item("SYMBOL PATH").ToString() & "\" & oSelectRow(0).Item("SYM FILE NAME").ToString()
84
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_COMPTPYE Then
85
                        sValue = oSelectRow(0).Item("ITEM TYPE").ToString()
86
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_CLASS Then
87
                        sValue = oSelectRow(0).Item("CLASS").ToString()
88
                    Else
89
                        sValue = oSelectRow(0).Item("SYMBOL PATH").ToString() & "\" & oSelectRow(0).Item("SYM FILE NAME").ToString()
90
                    End If
91
                End If
92
            End If
93
        Next
94
        Return sValue
95
    End Function
96

    
97
    Private Function GetAttributeMapping(ByVal sAttributeName As String, ByVal sColumn As String) As String
98
        Dim sSPPIDAttribute As String = ""
99
        If _Attribute_DB.Rows.Count > 0 Then
100
            Dim oSelectRow() As DataRow = _Attribute_DB.Select("[pid_attribute] = '" + sAttributeName + "'")
101
            If oSelectRow.Length = 1 Then
102
                sSPPIDAttribute = oSelectRow(0).Item(sColumn).ToString()
103
            End If
104
        End If
105
        Return sSPPIDAttribute
106
    End Function
107

    
108

    
109

    
110
    Private Function LoadSymbolInXml(ByVal sXmlPath As String) As Drawing
111
        Try
112
            ''  _TempSymbolDt = Symbol_Dt()
113
            Dim CDrawing As Drawing = New Drawing()
114
            '     Dim oDt As DataTable = LoadSymbol_DT()
115
            Dim oElement As XElement = XElement.Load(sXmlPath)
116
            If oElement IsNot Nothing Then
117
                CDrawing.DwgName = oElement.Element(_XML_DWGNAME).Value
118
                CDrawing.Size = oElement.Element(_XML_DWGSIZE).Value
119
                SplitLocation(CDrawing.Size, _IMG_X, _IMG_Y)
120

    
121
                CDrawing.LINES = LoadLines(oElement)
122
                CDrawing.SYMBOLS = LoadSymbols(oElement)
123
                CDrawing.LINENUMBERS = LoadLineNumbers(oElement)
124
                CDrawing.TRIMLINES = LoadTrimLines(oElement)
125
                CDrawing.TEXTS = LoadTexts(oElement)
126
            End If
127
            Return CDrawing
128
        Catch ex As Exception
129
            Return Nothing
130
        End Try
131

    
132
    End Function
133

    
134
    Private Function FindConnection(ByVal oLine_Dt As DataTable, ByVal oSymbol_Dt As DataTable, ByVal sUid As String, ByVal dPos_x As Double, ByVal dPos_y As Double) As String
135

    
136
        Dim sReturnUid As String = ""
137
        Try
138
            Dim oFindLineRow As DataRow() = oLine_Dt.Select(
139
            "[" & _XML_LINE_DWG_STARTPOINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
140
            "[" & _XML_LINE_DWG_STARTPOINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
141
            "[" & _XML_LINE_DWG_STARTPOINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
142
            "[" & _XML_LINE_DWG_STARTPOINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
143
            "[" & _XML_LINE_UID & "] <> '" & sUid & "' And " &
144
            "[" & _XML_LINE_Conn1_Uid & "] = ''")
145
            If oFindLineRow.Length = 0 Then
146
                oFindLineRow = oLine_Dt.Select(
147
                "[" & _XML_LINE_DWG_ENDPOINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
148
                "[" & _XML_LINE_DWG_ENDPOINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
149
                "[" & _XML_LINE_DWG_ENDPOINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
150
                "[" & _XML_LINE_DWG_ENDPOINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
151
                "[" & _XML_LINE_UID & "] <> '" & sUid & "' And " &
152
                "[" & _XML_LINE_Conn2_Uid & "] = ''")
153
                If oFindLineRow.Length = 0 Then
154
                    oFindLineRow = oSymbol_Dt.Select(
155
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
156
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
157
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
158
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
159
              "[" & _XML_SYMBOL_UID & "] <> '" & sUid & "' And " &
160
              "[" & _XML_SYMBOL_Conn1_Uid & "] = ''")
161
                    If oFindLineRow.Length = 0 Then
162
                        oFindLineRow = oSymbol_Dt.Select(
163
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
164
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
165
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
166
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
167
                   "[" & _XML_SYMBOL_UID & "] <> '" & sUid & "' And " &
168
                   "[" & _XML_SYMBOL_Conn2_Uid & "] = ''")
169
                        If oFindLineRow.Length = 0 Then
170
                        Else
171
                            oFindLineRow(0)(_XML_SYMBOL_Conn2_Uid) = sUid
172
                            sReturnUid = oFindLineRow(0)(_XML_SYMBOL_UID).ToString()
173
                        End If
174
                    Else
175
                        oFindLineRow(0)(_XML_SYMBOL_Conn1_Uid) = sUid
176
                        sReturnUid = oFindLineRow(0)(_XML_SYMBOL_UID).ToString()
177
                    End If
178
                Else
179
                    oFindLineRow(0)(_XML_LINE_Conn2_Uid) = sUid
180
                    sReturnUid = oFindLineRow(0)(_XML_LINE_UID).ToString()
181
                End If
182
            Else
183
                oFindLineRow(0)(_XML_LINE_Conn1_Uid) = sUid
184
                sReturnUid = oFindLineRow(0)(_XML_LINE_UID).ToString()
185
            End If
186
        Catch ex As Exception
187

    
188
        End Try
189

    
190
        Return sReturnUid
191
    End Function
192

    
193

    
194
    Private Function SetConnectionInfo(ByRef oLine_Dt As DataTable, ByRef oSymbol_Dt As DataTable)
195
        Try
196
            For Each oLineInfo In oLine_Dt.Rows
197
                Dim sLineUid As String = oLineInfo(_XML_LINE_UID).ToString()
198
                Dim dStartPos_x As Double = oLineInfo(_XML_LINE_DWG_STARTPOINT_X)
199
                Dim dStartPos_y As Double = oLineInfo(_XML_LINE_DWG_STARTPOINT_Y)
200
                Dim dEndPos_x As Double = oLineInfo(_XML_LINE_DWG_ENDPOINT_X)
201
                Dim dEndPos_y As Double = oLineInfo(_XML_LINE_DWG_ENDPOINT_Y)
202
                Dim sConn1Uid As String = ""
203
                Dim sConn2Uid As String = ""
204
                sConn1Uid = FindConnection(oLine_Dt, oSymbol_Dt, sLineUid, dStartPos_x, dStartPos_y)
205
                If sConn1Uid <> "" Then
206
                    oLineInfo(_XML_LINE_Conn1_Uid) = sConn1Uid
207
                End If
208
                sConn2Uid = FindConnection(oLine_Dt, oSymbol_Dt, sLineUid, dEndPos_x, dEndPos_y)
209
                If sConn2Uid <> "" Then
210
                    oLineInfo(_XML_LINE_Conn2_Uid) = sConn2Uid
211
                End If
212
            Next
213
            For Each oSymbolInfo In oSymbol_Dt.Rows
214
                Dim sSymbolUid As String = oSymbolInfo(_XML_SYMBOL_UID).ToString()
215
                Dim dConn1Pos_x As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN1_POINT_X)
216
                Dim dConn1Pos_y As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN1_POINT_Y)
217
                Dim sConn1Uid As String = ""
218
                Dim sConn2Uid As String = ""
219
                sConn1Uid = FindConnection(oLine_Dt, oSymbol_Dt, sSymbolUid, dConn1Pos_x, dConn1Pos_y)
220
                If sConn1Uid <> "" Then
221
                    oSymbolInfo(_XML_SYMBOL_Conn1_Uid) = sConn1Uid
222
                End If
223
                Try
224
                    Dim dConn2Pos_x As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN2_POINT_X)
225
                    Dim dConn2Pos_y As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN2_POINT_Y)
226
                    sConn2Uid = FindConnection(oLine_Dt, oSymbol_Dt, sSymbolUid, dConn2Pos_x, dConn2Pos_y)
227
                    If sConn2Uid <> "" Then
228
                        oSymbolInfo(_XML_SYMBOL_Conn2_Uid) = sConn2Uid
229
                    End If
230
                Catch ex As Exception
231
                End Try
232
            Next
233
        Catch ex As Exception
234
        End Try
235
    End Function
236

    
237
    Private Function GetFlowDirection(ByRef dStart_x As Double, ByRef dStart_y As Double, ByRef dEnd_x As Double, ByRef dEnd_y As Double, ByRef sDirection As String, ByRef sFlowdirection As String) As Boolean
238
        Dim bValidLine As Boolean = True
239
        If Math.Abs(dStart_x - dEnd_x) > Math.Abs(dStart_y - dEnd_y) Then
240
            If dStart_x > dEnd_x Then
241
                sDirection = "X"
242
                sFlowdirection = "Left_x"
243
                If Math.Abs(dStart_y - dEnd_y) < 5 Then
244
                    dEnd_y = dStart_y
245
                End If
246
            Else
247
                sDirection = "X"
248
                sFlowdirection = "Right_x"
249
                If Math.Abs(dStart_y - dEnd_y) < 5 Then
250
                    dEnd_y = dStart_y
251
                End If
252
            End If
253
            If Math.Abs(dStart_x - dEnd_x) <= 15 Then
254
                bValidLine = False
255
            End If
256
        Else
257
            If dStart_y > dEnd_y Then
258
                sDirection = "Y"
259
                sFlowdirection = "Down_y"
260
                If Math.Abs(dStart_x - dEnd_x) < 5 Then
261
                    dEnd_x = dStart_x
262
                End If
263

    
264
            Else
265
                sDirection = "Y"
266
                sFlowdirection = "Up_y"
267
                If Math.Abs(dStart_x - dEnd_x) < 5 Then
268
                    dEnd_x = dStart_x
269
                End If
270
            End If
271
            If Math.Abs(dStart_y - dEnd_y) <= 20 Then
272
                bValidLine = False
273
            End If
274
        End If
275
        Return bValidLine
276
    End Function
277

    
278
    Private Function LoadLines(ByVal oElement As XElement) As List(Of Line)
279
        Dim result As List(Of Line) = New List(Of Line)
280

    
281
        Dim lineInfos As XElement = oElement.Element(_XML_LINEINFOS)
282

    
283
        For Each oLine As XElement In lineInfos.Elements(_XML_LINEINFOS_LINE)
284
            Dim _line As Line = New Line()
285
            Try
286
                _line.UID = oLine.Element(_XML_LINEINFOS_LINE_UID).Value
287
                _line.STARTPOINT = oLine.Element(_XML_LINEINFOS_LINE_STARTPOINT).Value
288
                _line.ENDPOINT = oLine.Element(_XML_LINEINFOS_LINE_ENDPOINT).Value
289
                _line.TYPE = oLine.Element(_XML_LINEINFOS_LINE_TYPE).Value
290
                _line.AREA = oLine.Element(_XML_LINEINFOS_LINE_AREA).Value
291
                _line.CONNECTORS = GetConnector(oLine)
292
                _line.SPPIDMAPPINGNAME = GetPipeType(_line.TYPE)
293

    
294
                _line.AfterSetting()
295

    
296
                result.Add(_line)
297
            Catch ex As Exception
298
                Console.WriteLine(ex.Message)
299
            End Try
300
        Next
301

    
302
        Return result
303
    End Function
304

    
305
    Private Function LoadSymbols(ByVal oElement As XElement) As List(Of Symbol)
306
        Dim result As List(Of Symbol) = New List(Of Symbol)
307

    
308
        Dim symbols As XElement = oElement.Element(_XML_SYMBOLS)
309

    
310
        For Each oSymbol As XElement In symbols.Elements(_XML_SYMBOLS_SYMBOL)
311
            Dim _symbol As Symbol = New Symbol()
312
            Try
313
                _symbol.ANGLE = oSymbol.Element(_XML_SYMBOLS_SYMBOL_ANGLE).Value
314
                _symbol.UID = oSymbol.Element(_XML_SYMBOLS_SYMBOL_UID).Value
315
                _symbol.NAME = oSymbol.Element(_XML_SYMBOLS_SYMBOL_NAME).Value
316
                _symbol.TYPE = oSymbol.Element(_XML_SYMBOLS_SYMBOL_TYPE).Value
317
                _symbol.ORIGINALPOINT = oSymbol.Element(_XML_SYMBOLS_SYMBOL_ORIGINALPOINT).Value
318
                _symbol.CONNECTORS = GetConnector(oSymbol)
319
                _symbol.LOCATION = oSymbol.Element(_XML_SYMBOLS_SYMBOL_LOCATION).Value
320
                _symbol.SIZE = oSymbol.Element(_XML_SYMBOLS_SYMBOL_SIZE).Value
321
                _symbol.PARENT = oSymbol.Element(_XML_SYMBOLS_SYMBOL_PARENT).Value
322
                Dim strChild As String = oSymbol.Element(_XML_SYMBOLS_SYMBOL_CHILD).Value
323
                If strChild <> "None" Then
324
                    Dim arrChild As String() = strChild.Split("/")
325
                    For Each _child As String In arrChild
326
                        Dim info As String() = _child.Split(",")
327
                        Dim childMappingName = GetDataFromMappingDB(info(1), _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
328
                        If String.IsNullOrEmpty(childMappingName) = False Then
329
                            _symbol.CHILD.Add(info(0) + "," + childMappingName)
330
                        Else
331
                            Console.WriteLine("Mapping Fail : " + info(1))
332
                        End If
333
                    Next
334
                End If
335

    
336
                _symbol.HASINSTRUMENTLABEL = oSymbol.Element(_XML_SYMBOLS_SYMBOL_HASINSTRUMENTLABEL).Value
337
                _symbol.AREA = oSymbol.Element(_XML_SYMBOLS_SYMBOL_AREA).Value
338
                _symbol.CURRENTPOINTMODEINDEX = oSymbol.Element(_XML_SYMBOLS_SYMBOL_CURRENTPOINTMODEINDEX).Value
339
                _symbol.SPPIDMAPPINGNAME = GetDataFromMappingDB(_symbol.PARENT, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
340

    
341
                _symbol.AfterSetting()
342

    
343
                result.Add(_symbol)
344
            Catch ex As Exception
345
                Console.WriteLine(ex.Message)
346
            End Try
347
        Next
348

    
349
        Return result
350
    End Function
351

    
352
    Private Function LoadLineNumbers(ByVal oElement As XElement) As List(Of LineNumber)
353
        Dim result As List(Of LineNumber) = New List(Of LineNumber)
354

    
355
        Dim lineNos As XElement = oElement.Element(_XML_LINENOS)
356

    
357
        For Each oLineNo As XElement In lineNos.Elements(_XML_LINENOS_LINENO)
358
            Dim _lineNo As LineNumber = New LineNumber()
359
            Try
360
                _lineNo.UID = oLineNo.Element(_XML_LINEINFOS_LINE_UID).Value
361
                _lineNo.ANGLE = oLineNo.Element("ANGLE").Value
362
                _lineNo.TEXT = oLineNo.Element("TEXT").Value
363
                _lineNo.SYMBOLRUNITEMS = GetSymbolRunItems(oLineNo)
364
                _lineNo.LINERUNITEMS = GetLineRunItems(oLineNo)
365
                If oLineNo.Element("CONNLINE") IsNot Nothing Then
366
                    _lineNo.CONNECTLINE = oLineNo.Element("CONNLINE").Value
367
                End If
368
                _lineNo.LOCATION = oLineNo.Element("LOCATION").Value
369

    
370
                Console.WriteLine("임시 Line Number Labeling and Attribute")
371
                _lineNo.SPPIDMAPPINGNAME = "\Piping\Labels - Piping Segments\Line Number.sym"
372

    
373
                For Each attrElement As XElement In oLineNo.Elements("ATTRIBUTE")
374
                    Dim attr As Attribute = New Attribute()
375
                    attr.UID = attrElement.Attribute("UID").Value
376
                    attr.NAME = attrElement.Attribute("DisplayAttribute").Value.Replace(" ", "")
377
                    If attrElement.Value <> "None" Then
378
                        attr.VALUE = attrElement.Value
379
                    Else
380
                        attr.VALUE = ""
381
                    End If
382
                    _lineNo.ATTRIBUTES.Add(attr)
383
                Next
384

    
385
                _lineNo.AfterSetting()
386

    
387
                result.Add(_lineNo)
388
            Catch ex As Exception
389
                Console.WriteLine(ex.Message)
390
            End Try
391
        Next
392

    
393
        Return result
394
    End Function
395

    
396
    Private Function LoadTrimLines(ByVal oElement As XElement) As List(Of LineNumber)
397
        Dim result As List(Of LineNumber) = New List(Of LineNumber)
398

    
399
        Dim trimNos As XElement = oElement.Element(_XML_TRIMLINENOS)
400

    
401
        For Each oTrimLine As XElement In trimNos.Elements(_XML_TRIMLINENOS_TRIM_LINE_NO)
402
            Dim _lineNo As LineNumber = New LineNumber()
403
            Try
404
                _lineNo.UID = oTrimLine.Element(_XML_LINEINFOS_LINE_UID).Value
405

    
406
                _lineNo.SYMBOLRUNITEMS = GetSymbolRunItems(oTrimLine)
407
                _lineNo.LINERUNITEMS = GetLineRunItems(oTrimLine)
408

    
409
                result.Add(_lineNo)
410
            Catch ex As Exception
411

    
412
            End Try
413
        Next
414

    
415
        Return result
416
    End Function
417

    
418
    Private Function LoadTexts(ByVal oElement As XElement) As List(Of Text)
419
        Dim result As List(Of Text) = New List(Of Text)
420

    
421
        Dim textInfos As XElement = oElement.Element(_XML_TEXTINFOS)
422

    
423
        For Each oText As XElement In textInfos.Elements("ATTRIBUTE")
424
            Dim _text As Text = New Text()
425
            Try
426
                _text.UID = oText.Element("UID").Value
427
                _text.NAME = oText.Element("NAME").Value
428
                _text.LOCATION = oText.Element("LOCATION").Value
429
                _text.TEXT = oText.Element("VALUE").Value
430
                _text.ANGLE = oText.Element("ANGLE").Value
431
                _text.AREA = oText.Element("AREA").Value
432

    
433
                If oText.Element("OWNER") IsNot Nothing Then
434
                    _text.OWNER = oText.Element("OWNER").Value
435
                End If
436

    
437
                Console.WriteLine("임시 Text Labeling")
438
                If _text.NAME = "TEXT" Then
439
                    _text.SPPIDMAPPINGNAME = "\Design\Annotation\Labels\Drawing Notes Label.sym"
440
                ElseIf _text.NAME = "SIZE" Then
441
                    '_text.SPPIDMAPPINGNAME = "\Piping\Labels - Piping Components\Nominal Diameter.sym"
442
                End If
443

    
444

    
445
                _text.AfterSetting()
446

    
447
                result.Add(_text)
448
            Catch ex As Exception
449
                Console.WriteLine(ex.Message)
450
            End Try
451
        Next
452

    
453
        Return result
454
    End Function
455

    
456
    Private Function GetSymbolRunItems(ByVal oElement As XElement) As List(Of String)
457
        Dim result As List(Of String) = New List(Of String)
458
        Dim oRun As XElement = oElement.Element(_XML_RUN)
459
        If oRun IsNot Nothing Then
460
            For Each oSymbol As XElement In oRun.Elements(_XML_RUN_SYMBOL)
461
                result.Add(oSymbol.Element(_XML_SYMBOLS_SYMBOL_UID))
462
            Next
463
        End If
464
        Return result
465
    End Function
466

    
467
    Private Function GetLineRunItems(ByVal oElement As XElement) As List(Of String)
468
        Dim result As List(Of String) = New List(Of String)
469
        Dim oRun As XElement = oElement.Element(_XML_RUN)
470
        If oRun IsNot Nothing Then
471
            For Each oLine As XElement In oRun.Elements(_XML_RUN_LINE)
472
                result.Add(oLine.Element(_XML_LINEINFOS_LINE_UID))
473
            Next
474
        End If
475
        Return result
476
    End Function
477

    
478

    
479

    
480
    Private Function GetConnector(ByVal oElement As XElement) As List(Of Connector)
481
        Dim result As List(Of Connector) = New List(Of Connector)
482
        Dim oElementConnectors As XElement = oElement.Element(_XML_CONNECTORS)
483
        For Each oConnector As XElement In oElementConnectors.Elements(_XML_CONNECTORS_CONNECTOR)
484
            Dim _connector As Connector = New Connector()
485
            Try
486
                _connector.CONNECTEDITEM = oConnector.Element(_XML_CONNECTORS_CONNECTOR_CONNECTEDITEM).Value
487
                _connector.CONNECTPOINT = oConnector.Element(_XML_CONNECTORS_CONNECTOR_CONNECTPOINT).Value
488
                _connector.SCENECONNECTPOINT = oConnector.Element(_XML_CONNECTORS_CONNECTOR_SCENECONNECTPOINT).Value
489
                result.Add(_connector)
490
            Catch ex As Exception
491
            End Try
492
        Next
493

    
494
        Return result
495
    End Function
496

    
497
    Private Function LoadLineNo(ByVal oElement As XElement, ByVal sLineType As String) As List(Of Line_no)
498

    
499
        Dim oLineno_list As New List(Of Line_no)
500
        For Each oLineNo As Object In oElement.Elements(sLineType)
501
            Dim CLineNo As Line_no = New Line_no()
502
            Try
503
                CLineNo.Uid = oLineNo.Element(_XML_LINENO_UID).Value
504
                CLineNo.Text = oLineNo.Element(_XML_LINENO_TEXT).Value
505
                CLineNo.Location = oLineNo.Element(_XML_LINENO_LOCATION).Value
506
                CLineNo.Angle = oLineNo.Element(_XML_LINENO_ANGLE).Value
507
                CLineNo.SystemPath = "\Piping\Labels - Piping Segments\Kemya Line Number.sym" 'GetDataFromMappingDB(_XML_CATEGORY_LINENO, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
508
            Catch ex As Exception
509
            End Try
510
            Dim oLine_Dt As DataTable = Line_Dt()
511
            Dim oSymbol_Dt As DataTable = Symbol_Dt()
512
            Dim oAttribute_Dt As DataTable = Attribute_Dt()
513
            Dim iRunCnt As Integer = 0
514
            For Each oRun As Object In oLineNo.Elements(_XML_CATEGORY_RUN)
515
                iRunCnt = iRunCnt + 1
516
                Dim sRunName As String = CLineNo.Text & "_" & iRunCnt
517
                For Each oMERGEDLine As Object In oRun.Elements(_XML_CATEGORY_MERGEDLINE)
518
                    For Each oLine As Object In oMERGEDLine.Elements(_XML_CATEGORY_LINE)
519
                        Try
520
                            Dim oAddrow As DataRow = oLine_Dt.NewRow()
521
                            Dim oEleObj As XElement
522
                            Dim sUid As String
523
                            Dim sStartpoint As String
524
                            Dim sEndpoint As String
525
                            Dim sType As String
526
                            Dim sConnectionUids As String = ""
527
                            Dim dStartPos_x As Double = 0.0
528
                            Dim dStartPos_y As Double = 0.0
529
                            Dim dEndPos_x As Double = 0.0
530
                            Dim dEndPos_y As Double = 0.0
531
                            Dim dDWG_StartPos_x As Double = 0.0
532
                            Dim dDWG_StartPos_y As Double = 0.0
533
                            Dim dDWG_EndPos_x As Double = 0.0
534
                            Dim dDWG_EndPos_y As Double = 0.0
535
                            oEleObj = oLine.Element(_XML_LINE_UID)
536
                            sUid = oEleObj.Value
537

    
538
                            If oLine_Dt.Select(_XML_LINE_UID & "='" & sUid & "'").Length = 0 Then
539
                                oEleObj = oLine.Element(_XML_LINE_STARTPOINT)
540
                                sStartpoint = oEleObj.Value
541
                                oEleObj = oLine.Element(_XML_LINE_ENDPOINT)
542
                                sEndpoint = oEleObj.Value
543
                                oEleObj = oLine.Element(_XML_LINE_TYPE)
544
                                sType = oEleObj.Value
545

    
546
                                oAddrow(_XML_LINE_Conn1_Uid) = ""
547
                                oAddrow(_XML_LINE_Conn2_Uid) = ""
548
                                oAddrow(_XML_LINE_UID) = sUid
549
                                oAddrow(_XML_LINE_RUNNAME) = sRunName
550
                                oAddrow(_XML_LINE_LINENOUID) = CLineNo.Uid
551
                                oAddrow(_XML_LINENO_TEXT) = CLineNo.Text
552
                                oAddrow(_XML_LINE_STARTPOINT) = sStartpoint
553
                                oAddrow(_XML_LINE_ENDPOINT) = sEndpoint
554
                                If sUid = "0bda520b-9c01-4dc1-9ddd-73adb5f7a871" Then
555
                                    MsgBox("")
556
                                End If
557
                                ConvertPointBystring(sStartpoint, dStartPos_x, dStartPos_y)
558
                                ConvertPointBystring(sEndpoint, dEndPos_x, dEndPos_y)
559
                                Dim sDirection As String = ""
560
                                Dim sFlowDirection As String = ""
561
                                Dim bValidLine As Boolean = GetFlowDirection(dStartPos_x, dStartPos_y, dEndPos_x, dEndPos_y, sDirection, sFlowDirection)
562
                                oAddrow(_XML_LINE_FlowDirection) = sFlowDirection
563
                                oAddrow(_XML_LINE_Direction) = sDirection
564
                                oAddrow(_XML_LINE_ValieLine) = bValidLine
565
                                dDWG_StartPos_x = dStartPos_x
566
                                dDWG_StartPos_y = dStartPos_y
567
                                ConvertPointByImage(dDWG_StartPos_x, dDWG_StartPos_y, _IMG_X, _IMG_Y)
568
                                dDWG_EndPos_x = dEndPos_x
569
                                dDWG_EndPos_y = dEndPos_y
570
                                ConvertPointByImage(dDWG_EndPos_x, dDWG_EndPos_y, _IMG_X, _IMG_Y)
571

    
572
                                oAddrow(_XML_LINE_STARTPOINT_X) = dStartPos_x
573
                                oAddrow(_XML_LINE_STARTPOINT_Y) = dStartPos_y
574
                                oAddrow(_XML_LINE_ENDPOINT_X) = dEndPos_x
575
                                oAddrow(_XML_LINE_ENDPOINT_Y) = dEndPos_y
576

    
577
                                oAddrow(_XML_LINE_DWG_STARTPOINT_X) = dDWG_StartPos_x
578
                                oAddrow(_XML_LINE_DWG_STARTPOINT_Y) = dDWG_StartPos_y
579
                                oAddrow(_XML_LINE_DWG_ENDPOINT_X) = dDWG_EndPos_x
580
                                oAddrow(_XML_LINE_DWG_ENDPOINT_Y) = dDWG_EndPos_y
581

    
582
                                oAddrow(_XML_LINE_SYSTEMPATH) = GetDataFromMappingDB(_XML_CATEGORY_LINE, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
583
                                If oAddrow(_XML_LINE_SYSTEMPATH) = "" Then
584
                                    MessageBox.Show("")
585
                                End If
586
                                oAddrow(_XML_LINE_DRAWING_TF) = "FALSE"
587
                                oAddrow(_XML_LINE_TYPE) = sType
588
                                '  _AllLine_DT.Rows.Add(oAddrow)
589
                                oLine_Dt.Rows.Add(oAddrow)
590
                            Else
591
                            End If
592
                        Catch ex As Exception
593
                        End Try
594
                    Next
595
                Next
596

    
597
                For Each oSymbol As Object In oRun.Elements(_XML_CATEGORY_SYMBOL)
598
                    Try
599

    
600
                        Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
601
                        Dim oEleObj As XElement
602
                        Dim sUid As String
603
                        Dim sName As String
604
                        Dim sLocation As String
605
                        Dim sSize As String
606
                        Dim sAngle As String
607
                        Dim sOriginalPoint As String = ""
608
                        Dim sConnectionPoint As String = ""
609
                        Dim sConnectionUids As String = ""
610
                        Dim sConnArray As String()
611
                        Dim sSizeArray As String()
612
                        Dim sLocationArray As String()
613
                        Dim sChild As String = ""
614
                        Dim dCenterPos_x As Double = 0.0
615
                        Dim dCenterPos_y As Double = 0.0
616
                        Dim dDwgCenterPos_x As Double = 0.0
617
                        Dim dDwgCenterPos_y As Double = 0.0
618

    
619
                        Dim dConn1Pos_x As Double = 0.0
620
                        Dim dConn1Pos_y As Double = 0.0
621
                        Dim dConn2Pos_x As Double = 0.0
622
                        Dim dConn2Pos_y As Double = 0.0
623
                        Dim dConn3Pos_x As Double = 0.0
624
                        Dim dConn3Pos_y As Double = 0.0
625
                        Dim dConn4Pos_x As Double = 0.0
626
                        Dim dConn4Pos_y As Double = 0.0
627

    
628
                        Dim dDwg_Conn1Pos_x As Double = 0.0
629
                        Dim dDwg_Conn1Pos_y As Double = 0.0
630
                        Dim dDwg_Conn2Pos_x As Double = 0.0
631
                        Dim dDwg_Conn2Pos_y As Double = 0.0
632
                        Dim dDwg_Conn3Pos_x As Double = 0.0
633
                        Dim dDwg_Conn3Pos_y As Double = 0.0
634
                        Dim dDwg_Conn4Pos_x As Double = 0.0
635
                        Dim dDwg_Conn4Pos_y As Double = 0.0
636

    
637
                        oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
638
                        sUid = oEleObj.Value
639
                        oEleObj = oSymbol.Element(_XML_SYMBOL_PARENT)
640
                        sName = oEleObj.Value
641
                        oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
642
                        sLocation = oEleObj.Value
643
                        oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
644
                        sSize = oEleObj.Value
645
                        oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
646
                        sAngle = oEleObj.Value
647
                        oEleObj = oSymbol.Element(_XML_SYMBOL_CONNECTIONPOINT)
648
                        sConnectionPoint = oEleObj.Value
649
                        oEleObj = oSymbol.Element(_XML_SYMBOL_CHILD)
650
                        sChild = oEleObj.Value
651
                        Try
652
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
653
                            sOriginalPoint = oEleObj.Value
654
                        Catch ex As Exception
655

    
656
                        End Try
657
                        'oEleObj = oSymbol.Element(_XML_LINE_CONNS)
658
                        'sConnectionUids = oEleObj.Value
659
                        'sConnArray = sConnectionUids.Split(",")
660
                        'If sConnArray.Length > 4 Then
661
                        '    MessageBox.Show(sConnArray.Length)
662
                        'End If
663
                        'For i = 0 To sConnArray.Length - 1
664
                        '    If i = 0 Then
665
                        '        oAddrow(_XML_SYMBOL_Conn1_Uid) = sConnArray(i)
666
                        '    ElseIf i = 1 Then
667
                        '        oAddrow(_XML_SYMBOL_Conn2_Uid) = sConnArray(i)
668
                        '    ElseIf i = 2 Then
669
                        '        oAddrow(_XML_SYMBOL_Conn3_Uid) = sConnArray(i)
670
                        '    ElseIf i = 3 Then
671
                        '        oAddrow(_XML_SYMBOL_Conn4_Uid) = sConnArray(i)
672
                        '    End If
673
                        'Next
674
                        oAddrow(_XML_SYMBOL_Conn1_Uid) = ""
675
                        oAddrow(_XML_SYMBOL_Conn2_Uid) = ""
676
                        oAddrow(_XML_SYMBOL_Conn3_Uid) = ""
677
                        oAddrow(_XML_SYMBOL_Conn4_Uid) = ""
678
                        ConvertPointBystring(sOriginalPoint, dCenterPos_x, dCenterPos_y)
679
                        dDwgCenterPos_x = dCenterPos_x
680
                        dDwgCenterPos_y = dCenterPos_y
681
                        ConvertPointByImage(dDwgCenterPos_x, dDwgCenterPos_y, _IMG_X, _IMG_Y)
682

    
683
                        oAddrow(_XML_SYMBOL_CENTERPOINT_X) = dCenterPos_x
684
                        oAddrow(_XML_SYMBOL_CENTERPOINT_Y) = dCenterPos_y
685
                        oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_X) = dDwgCenterPos_x
686
                        oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_Y) = dDwgCenterPos_y
687
                        sConnArray = sConnectionPoint.Split("/")
688
                        sSizeArray = sSize.Split(",")
689
                        sLocationArray = sLocation.Split(",")
690
                        If sConnArray.Length > 4 Then
691
                            MessageBox.Show(sConnArray.Length)
692
                        End If
693
                        For i = 0 To sConnArray.Length - 1
694
                            If i = 0 Then
695
                                oAddrow(_XML_SYMBOL_Conn1_Point) = sConnArray(i)
696
                                ConvertPointBystring(sConnArray(i), dConn1Pos_x, dConn1Pos_y)
697
                                dDwg_Conn1Pos_x = dConn1Pos_x
698
                                dDwg_Conn1Pos_y = dConn1Pos_y
699
                                ConvertPointByImage(dDwg_Conn1Pos_x, dDwg_Conn1Pos_y, _IMG_X, _IMG_Y)
700

    
701
                                oAddrow(_XML_SYMBOL_CONN1_POINT_X) = dConn1Pos_x
702
                                oAddrow(_XML_SYMBOL_CONN1_POINT_Y) = dConn1Pos_y
703
                                oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_X) = dDwg_Conn1Pos_x
704
                                oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_Y) = dDwg_Conn1Pos_y
705
                            ElseIf i = 1 Then
706
                                oAddrow(_XML_SYMBOL_Conn2_Point) = sConnArray(i)
707
                                ConvertPointBystring(sConnArray(i), dConn2Pos_x, dConn2Pos_y)
708
                                dDwg_Conn2Pos_x = dConn2Pos_x
709
                                dDwg_Conn2Pos_y = dConn2Pos_y
710
                                ConvertPointByImage(dDwg_Conn2Pos_x, dDwg_Conn2Pos_y, _IMG_X, _IMG_Y)
711
                                oAddrow(_XML_SYMBOL_CONN2_POINT_X) = dConn2Pos_x
712
                                oAddrow(_XML_SYMBOL_CONN2_POINT_Y) = dConn2Pos_y
713
                                oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_X) = dDwg_Conn2Pos_x
714
                                oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_Y) = dDwg_Conn2Pos_y
715
                            ElseIf i = 2 Then
716
                                oAddrow(_XML_SYMBOL_Conn3_Point) = sConnArray(i)
717
                                ConvertPointBystring(sConnArray(i), dConn3Pos_x, dConn3Pos_y)
718
                                dDwg_Conn3Pos_x = dConn3Pos_x
719
                                dDwg_Conn3Pos_y = dConn3Pos_y
720
                                ConvertPointByImage(dDwg_Conn3Pos_x, dDwg_Conn3Pos_y, _IMG_X, _IMG_Y)
721
                                oAddrow(_XML_SYMBOL_CONN3_POINT_X) = dConn3Pos_x
722
                                oAddrow(_XML_SYMBOL_CONN3_POINT_Y) = dConn3Pos_y
723
                                oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_X) = dDwg_Conn3Pos_x
724
                                oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_Y) = dDwg_Conn3Pos_y
725
                            ElseIf i = 3 Then
726
                                oAddrow(_XML_SYMBOL_Conn4_Point) = sConnArray(i)
727
                                ConvertPointBystring(sConnArray(i), dConn4Pos_x, dConn4Pos_y)
728
                                dDwg_Conn4Pos_x = dConn4Pos_x
729
                                dDwg_Conn4Pos_y = dConn4Pos_y
730
                                ConvertPointByImage(dDwg_Conn4Pos_x, dDwg_Conn4Pos_y, _IMG_X, _IMG_Y)
731
                                oAddrow(_XML_SYMBOL_CONN4_POINT_X) = dConn4Pos_x
732
                                oAddrow(_XML_SYMBOL_CONN4_POINT_Y) = dConn4Pos_y
733
                                oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_X) = dDwg_Conn4Pos_x
734
                                oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_Y) = dDwg_Conn4Pos_y
735
                            End If
736
                        Next
737

    
738
                        Dim sXLength As String = ""
739
                        Dim sYLength As String = ""
740

    
741
                        Dim dMin_x As Double = 0
742
                        Dim dMax_x As Double = 0
743
                        Dim dMin_y As Double = 0
744
                        Dim dMax_y As Double = 0
745

    
746
                        For i = 0 To sSizeArray.Length - 1
747
                            If i = 0 Then
748
                                sXLength = sSizeArray(i)
749
                            ElseIf i = 1 Then
750
                                sYLength = sSizeArray(i)
751
                            End If
752
                        Next
753

    
754
                        For i = 0 To sLocationArray.Length - 1
755
                            If i = 0 Then
756
                                dMin_x = sLocationArray(i)
757
                                dMax_x = dMin_x + sXLength
758
                            ElseIf i = 1 Then
759
                                'Y축은 반전
760
                                dMax_y = sLocationArray(i)
761
                                dMin_y = dMax_y + sYLength
762
                            End If
763
                        Next
764
                        ConvertPointByImage(dMin_x, dMin_y, _IMG_X, _IMG_Y)
765
                        ConvertPointByImage(dMax_x, dMax_y, _IMG_X, _IMG_Y)
766

    
767
                        oAddrow(_XML_SYMBOL_MIN_X) = dMin_x
768
                        oAddrow(_XML_SYMBOL_MAX_X) = dMax_x
769
                        oAddrow(_XML_SYMBOL_MIN_Y) = dMin_y
770
                        oAddrow(_XML_SYMBOL_MAX_Y) = dMax_y
771
                        oAddrow(_XML_SYMBOL_UID) = sUid
772
                        oAddrow(_XML_LINE_LINENOUID) = CLineNo.Uid
773
                        oAddrow(_XML_SYMBOL_RUNNAME) = sRunName
774
                        oAddrow(_XML_LINENO_TEXT) = CLineNo.Text
775
                        oAddrow(_XML_SYMBOL_NAME) = IO.Path.GetFileNameWithoutExtension(GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME))
776
                        oAddrow(_XML_SYMBOL_LOCATION) = sLocation
777
                        oAddrow(_XML_SYMBOL_SIZE) = sSize
778
                        oAddrow(_XML_SYMBOL_ANGLE) = sAngle
779
                        oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
780
                        oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
781
                        oAddrow(_XML_SYMBOL_CLASS) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_CLASS)
782
                        oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
783

    
784
                        oAddrow(_XML_SYMBOL_CONNECTIONPOINT) = sConnectionPoint
785
                        oAddrow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
786
                        oAddrow(_XML_SYMBOL_CHILD) = sChild
787
                        '   _AllSymbol_DT.Rows.Add(oAddrow)
788
                        oSymbol_Dt.Rows.Add(oAddrow)
789
                    Catch ex As Exception
790
                    End Try
791
                Next
792

    
793
                For Each oAtrribute As Object In oRun.Elements(_XML_CATEGORY_ATTRIBUTE)
794
                    Try
795
                        Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
796
                        Dim oEleObj As XElement
797
                        Dim sUid As String
798
                        Dim sName As String
799
                        Dim sValue As String
800
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
801
                        sUid = oEleObj.Value
802
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
803
                        sName = oEleObj.Value
804
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
805
                        sValue = oEleObj.Value
806
                        oAddrow(_XML_ATTRIBUTE_UID) = sUid
807
                        oAddrow(_XML_ATTRIBUTE_NAME) = sName
808
                        oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
809
                        oAttribute_Dt.Rows.Add(oAddrow)
810
                    Catch ex As Exception
811
                    End Try
812
                Next
813
            Next
814
            'Line No Attribute
815
            For Each oAtrribute As Object In oLineNo.Elements(_XML_CATEGORY_ATTRIBUTE)
816
                Try
817
                    Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
818
                    Dim oEleObj As XElement
819
                    Dim sUid As String = ""
820
                    Dim sName As String
821
                    Dim sValue As String
822

    
823
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
824
                    sUid = oEleObj.Value
825
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
826
                    sName = oEleObj.Value
827
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
828
                    sValue = oEleObj.Value
829
                    oAddrow(_XML_ATTRIBUTE_UID) = sUid
830
                    oAddrow(_XML_ATTRIBUTE_NAME) = sName
831
                    oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
832
                    oAttribute_Dt.Rows.Add(oAddrow)
833
                Catch ex As Exception
834
                End Try
835
            Next
836
            SetConnectionInfo(oLine_Dt, oSymbol_Dt)
837
            _AllLine_DT.Merge(oLine_Dt)
838
            _AllSymbol_DT.Merge(oSymbol_Dt)
839
            CLineNo.Dt_Line = oLine_Dt
840
            CLineNo.Dt_Symbol = oSymbol_Dt
841
            CLineNo.Dt_Attribute = oAttribute_Dt
842
            oLineno_list.Add(CLineNo)
843
        Next
844
        Return oLineno_list
845
    End Function
846

    
847
    Public Sub ConvertPointByImage(ByRef dX As Double, ByRef dY As Double, ByVal dDwgX As Double, ByVal dDwgY As Double)
848

    
849
        Dim calcx As Double = 0
850
        Dim calcy As Double = 0
851
        calcx = (dX * _DWG_X) / dDwgX 'Math.Round((dX * _DWG_X) / dDwgX, 2)
852
        calcx = Math.Truncate(calcx * 1000) / 1000
853
        calcy = _DWG_Y - ((dY * _DWG_Y) / dDwgY) '_DWG_Y - Math.Round((dY * _DWG_Y) / dDwgY, 2)
854
        calcy = Math.Truncate(calcy * 1000) / 1000
855
        dX = calcx
856
        dY = calcy
857
    End Sub
858
    '@brief Convert To SPPID
859
    '@author : Gyusu Park
860
    '@date : 2018-04-10
861
    '@history:
862
    Private Sub SplitLocation(ByVal sLocation As String, ByRef dX As Double, ByRef dY As Double)
863

    
864
        Dim opointstr As String() = Split(sLocation, ",")
865
        If (opointstr.Length > 1) Then
866
            If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
867
                dX = opointstr(0)
868
                dY = opointstr(1)
869
            End If
870
        End If
871

    
872
    End Sub
873

    
874
    Private Function Load_DB(ByVal sDBPath As String, ByVal sTableName As String) As DataTable
875

    
876
        Try
877
            Dim oDt As New DataTable
878
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
879
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
880
            conn.Open()
881
            Dim sQuery As String = "Select * from " & sTableName
882
            Dim cmd As SQLiteCommand = conn.CreateCommand()
883
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
884
            Dim oDataSet As DataSet = New DataSet()
885
            adapter.Fill(oDataSet)
886
            oDt = oDataSet.Tables(0)
887
            Return oDt
888
        Catch ex As Exception
889
            Return Nothing
890
        End Try
891
    End Function
892

    
893
    Private Function LoadAllDrawing() As DataTable
894
        SetListBoxItems(ListBox_Result, "도면정보 로드중....")
895
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "도면정보 로드중....")
896
        Dim oDt As DataTable = Drawing_Dt()
897
        Dim sHierarchy As String = My.Settings.Plant_Hierarchy
898
        Dim files() As String
899
        files = Directory.GetFiles(sHierarchy, "*.pid", SearchOption.AllDirectories)
900
        For Each FileName As String In files
901
            Dim sName As String = FileName
902
            Dim oAddRow As DataRow = oDt.NewRow()
903
            oAddRow("Name") = Path.GetFileNameWithoutExtension(sName)
904
            oAddRow("Path") = FileName
905
            oDt.Rows.Add(oAddRow)
906
        Next
907
        Return oDt
908
    End Function
909

    
910
    Dim _XMLList As ListView = New ListView()
911

    
912
    Private Function CheckOpenDrawing() As Boolean
913
        Try
914

    
915
            Dim lobjDatasource As Object
916
            _Placement = CreateObject("Plaice.Placement", "")
917
            lobjDatasource = _Placement.PIDDataSource
918
            Return True
919
        Catch ex As Exception
920
            Return False
921
        End Try
922

    
923
    End Function
924

    
925

    
926
    Private Sub Btn_Convert_Click(sender As Object, e As EventArgs) Handles Btn_Convert.Click
927
        Main_Tab.SelectedIndex = 1
928
        ListBox_Result.Items.Clear()
929
        Me.ProgressBar_Status.Visible = True
930
        ProgressBar_Status.Maximum = 100
931
        ProgressBar_Status.Value = 0
932

    
933
        _Main_trd = New Thread(AddressOf ThreadConvert)
934
        _Main_trd.IsBackground = True
935
        _Main_trd.Start()
936
        FineOPCForm()
937
    End Sub
938

    
939
    Private Sub FineOPCForm()
940
        _Opc_trd = New Thread(AddressOf ThreadOPCRemove)
941
        _Opc_trd.IsBackground = True
942
        _Opc_trd.Start()
943
    End Sub
944

    
945

    
946
    Dim _objPIDAutoApp As Object
947

    
948
    Private Function OpenSPPID(ByVal oDwg_Dt As DataTable, ByVal sDwgName As String) As Boolean
949
        Dim bCheckOpen As Boolean = False
950
        '   Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgPath)
951
        SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
952
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, sDwgName & " 도면 Open....")
953
        _objPIDAutoApp = CreateObject("PIDAutomation.Application")
954

    
955
        Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
956
        If sPath <> "" Then
957
            Process.Start(sPath)
958
        Else
959
            Return bCheckOpen
960
        End If
961

    
962
        Dim bCheckOpenDrawing As Boolean = False
963
        While (True)
964
            bCheckOpenDrawing = CheckOpenDrawing()
965
            If bCheckOpenDrawing = True Then
966
                bCheckOpen = True
967
                Exit While
968
            Else
969
                Thread.Sleep(2000)
970
            End If
971
        End While
972

    
973

    
974
        Return bCheckOpen
975
    End Function
976

    
977
    Private Function GetDrawing(ByVal sDwgName As String) As Drawing
978
        For Each CDrawing In _DrawingsList
979
            If CDrawing.DwgName.ToUpper() = sDwgName.ToUpper() Then
980
                Return CDrawing
981
            End If
982
        Next
983
        Return Nothing
984
    End Function
985

    
986
    Private Function GetLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
987
        For Each CLineNo In CDrawing.Line_nos
988
            If CLineNo.Uid = sLineNoUid Then
989
                Return CLineNo
990
            End If
991
        Next
992
        Return Nothing
993
    End Function
994

    
995
    Private Function GetTrimLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
996
        For Each CLineNo In CDrawing.TrimLine_nos
997
            If CLineNo.Uid = sLineNoUid Then
998
                Return CLineNo
999
            End If
1000
        Next
1001
        Return Nothing
1002
    End Function
1003

    
1004

    
1005

    
1006
    Private Function GetPipeFromConnection(ByVal CDrawing As Drawing, ByVal sSymbolUid As String, ByRef sConnTypeNo As String) As DataTable
1007
        For Each CLineNo In CDrawing.Line_nos
1008
            Dim odt As DataTable = CLineNo.Dt_Line
1009
            If odt.Rows.Count > 0 Then
1010
                If odt.Rows(0)(_XML_LINE_Conn1_Uid).ToString = sSymbolUid Then
1011
                    sConnTypeNo = "1"
1012
                    Return odt
1013
                ElseIf odt.Rows(0)(_XML_LINE_Conn2_Uid).ToString() = sSymbolUid Then
1014
                    sConnTypeNo = "2"
1015
                    Return odt
1016
                End If
1017
            End If
1018
        Next
1019
        Return New DataTable
1020
    End Function
1021

    
1022
    Private Function GetSymbolFromConnection(ByVal CDrawing As Drawing, ByVal sSymbolUid As String, ByRef sConnTypeNo As String) As DataTable
1023
        For Each CLineNo In CDrawing.Line_nos
1024
            Dim odt As DataTable = CLineNo.Dt_Symbol
1025
            If odt.Rows.Count > 0 Then
1026
                If odt.Rows(0)(_XML_SYMBOL_Conn1_Uid).ToString = sSymbolUid Then
1027
                    sConnTypeNo = "1"
1028
                    Return odt
1029
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn2_Uid).ToString() = sSymbolUid Then
1030
                    sConnTypeNo = "2"
1031
                    Return odt
1032
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn3_Uid).ToString() = sSymbolUid Then
1033
                    sConnTypeNo = "3"
1034
                    Return odt
1035
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn4_Uid).ToString() = sSymbolUid Then
1036
                    sConnTypeNo = "4"
1037
                    Return odt
1038
                End If
1039
            End If
1040
        Next
1041
        Return New DataTable
1042
    End Function
1043

    
1044
    Private Function GetEqpNo(ByVal CDrawing As Drawing, ByVal sEqpUid As String) As Eqp_no
1045
        For Each CEqpNo In CDrawing.Eqp_nos
1046
            If CEqpNo.Uid = sEqpUid Then
1047
                Return CEqpNo
1048
            End If
1049
        Next
1050
        Return Nothing
1051
    End Function
1052
    Public Function ConvertPointBystring(ByVal sPoint As String, ByRef dX As Double, ByRef dY As Double) As Boolean
1053
        Try
1054
            Dim opointstr As String() = Split(sPoint, ",")
1055
            If (opointstr.Length > 1) Then
1056
                If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
1057
                    dX = opointstr(0)
1058
                    dY = opointstr(1)
1059

    
1060
                Else
1061
                    dX = 0
1062
                    dY = 0
1063
                    Return False
1064
                End If
1065
            End If
1066
            Return True
1067
        Catch ex As Exception
1068
            Return False
1069
        End Try
1070
    End Function
1071

    
1072

    
1073
    Dim _DrawLine_Dt As DataTable = DrawLind_Dt()
1074

    
1075

    
1076
    Private Sub PlaceEquipment(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sEqpName As String)
1077
        Try
1078
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1079
            Dim oAttributeRow() As DataRow
1080
            If oAttribute_Dt.Rows.Count > 0 Then
1081
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1082
            End If
1083
            If oSymbolRow.Length > 0 Then
1084
                Dim oDatasource As Object = _Placement.PIDDataSource
1085
                Dim sSymbolName As String = oSymbolRow(0)(_XML_SYMBOL_NAME).ToString()
1086
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1087
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1088
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1089
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1090
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1091
                Dim dAngle As Double = 0.0
1092
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1093
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1094
                End If
1095
                Dim dLocationX As Double = 0.0
1096
                Dim dLocationY As Double = 0.0
1097
                ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
1098
                Dim dX As Double = dLocationX
1099
                Dim dY As Double = dLocationY
1100
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1101
                Dim oReturnSymbol As LMSymbol = Nothing
1102
                If sSymbolCompType.ToUpper() = "NOZZLE" Then
1103
                    Dim sOwnerUid As String = oSymbolRow(0)(_XML_SYMBOL_OWNER).ToString()
1104
                    Dim oFineRow() As DataRow = _ModelingSymbol_Dt.Select("Uid = '" & sOwnerUid & "'")
1105
                    If oFineRow.Length = 1 Then
1106
                        Dim sEqpModelID As String = oFineRow(0)(_XML_SYMBOL_SPID).ToString()
1107

    
1108
                        Dim objVessel As LMVessel
1109
                        objVessel = _Placement.PIDDataSource.GetVessel(sEqpModelID)
1110
                        Dim oVesselLocation As LMLocations = objVessel.Locations
1111
                        Dim oEqpSymbol As LMSymbol = _Placement.PIDDataSource.GetSymbol(objVessel.Representations.Nth(1).Id)
1112

    
1113
                        Dim objNozzle As LMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY,
1114
                                                    TargetItem:=oEqpSymbol.AsLMRepresentation)
1115
                        SetListBoxItems(ListBox_Result, "Place Nozzle.." & sUid & " (" & dLocationX & "," & dLocationY & ")..." & _iEquipmentcnt & " count ")
1116
                        _iNozzlecnt = _iNozzlecnt + 1
1117
                        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Nozzle : " & sUid)
1118
                        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Nozzle Name : " & sSymbolName)
1119
                        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1120
                        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
1121
                        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Nozzle Count : " & _iNozzlecnt)
1122
                    End If
1123
                Else
1124
                    oReturnSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1125
                    SetListBoxItems(ListBox_Result, "Place Equipment.." & sUid & " (" & dLocationX & "," & dLocationY & ")..." & _iEquipmentcnt & " count ")
1126
                    _iEquipmentcnt = _iEquipmentcnt + 1
1127
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Equipment : " & sUid)
1128
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Equipment Name : " & sSymbolName)
1129
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1130
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
1131
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Equipment Count : " & _iEquipmentcnt)
1132
                End If
1133
                '모델링 된 Symbol 데이터 테이블 저장
1134
                Dim oAddRow As DataRow = _ModelingSymbol_Dt.NewRow
1135
                oAddRow(_XML_SYMBOL_UID) = sUid
1136
                oAddRow(_XML_SYMBOL_SPID) = oReturnSymbol.ModelItemID
1137
                oAddRow(_XML_SYMBOL_LMSYMBOL) = oReturnSymbol
1138
                oAddRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
1139
                oAddRow(_XML_SYMBOL_CENTERPOINT_X) = dLocationX
1140
                oAddRow(_XML_SYMBOL_CENTERPOINT_Y) = dLocationY
1141
                _ModelingSymbol_Dt.Rows.Add(oAddRow)
1142
            End If
1143
        Catch ex As Exception
1144
        End Try
1145
    End Sub
1146

    
1147
    Private Sub AddProgress()
1148
        _Itemcnt = _Itemcnt + 1
1149
        Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1150
        SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1151
        Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1152
    End Sub
1153

    
1154

    
1155
    Dim _라인보정기준값 As Integer = 10
1156

    
1157

    
1158
    Private Function GetAllCheckNodeCount() As Integer
1159
        _allItem = 0
1160
        For i = 0 To Tree_Result.Nodes.Count - 1
1161
            For j = 0 To Tree_Result.Nodes(i).Nodes.Count - 1
1162
                For k = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes.Count - 1
1163
                    For l = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes.Count - 1
1164
                        If Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes(l).Checked = True Then
1165
                            _allItem = _allItem + 1
1166
                        End If
1167
                    Next
1168
                Next
1169
            Next
1170
        Next
1171
        Return _allItem
1172
    End Function
1173

    
1174

    
1175
    Private Sub ManualCheckNode(ByRef oDt As DataTable)
1176
        For Each oDrwing As TreeNode In Tree_Result.Nodes
1177
            For Each oDwgNode As TreeNode In oDrwing.Nodes
1178
                For Each oNode As TreeNode In oDwgNode.Nodes
1179
                    For Each oSymbolNode As TreeNode In oNode.Nodes
1180
                        Dim sUid As String = oSymbolNode.Name
1181
                        'Dim oSelectRows() As DataRow = oDt.Select("[" & _XML_SYMBOL_UID & "] = '" & sUid &
1182
                        '                                      "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False'")
1183
                        If oSymbolNode.Checked Then
1184
                            Dim oSelectRows() As DataRow = oDt.Select("[" & _XML_SYMBOL_UID & "] = '" & sUid & "'")
1185
                            If oSelectRows.Length = 1 Then
1186
                                oSelectRows(0)(_XML_SYMBOL_DRAWING_TF) = "FALSE"
1187
                                If oSymbolNode.Checked Then
1188
                                    oSelectRows(0)(_XML_SYMBOL_Check) = "TRUE"
1189
                                Else
1190
                                    oSelectRows(0)(_XML_SYMBOL_Check) = "FALSE"
1191
                                End If
1192
                            End If
1193
                        End If
1194
                    Next
1195
                Next
1196
            Next
1197
        Next
1198

    
1199
    End Sub
1200

    
1201
    Private Function GetChildSymbolDirection(ByVal sDirection As String) As Double
1202
        Dim sReturnDirection As String = ""
1203
        If sDirection.ToUpper() = "RIGHT" Then
1204
            Return 3.14
1205
        ElseIf sDirection.ToUpper() = "LEFT" Then
1206
            Return 0
1207
        ElseIf sDirection.ToUpper = "DOWN" Then
1208
            Return 1.57
1209
        ElseIf sDirection.ToUpper() = "UP" Then
1210
            Return 4.71
1211
        Else
1212
            Return 0
1213
        End If
1214
    End Function
1215

    
1216
    Private Function CheckExistModeling(ByVal oRow As DataRow) As String
1217
        If oRow(_XML_LINE_DRAWING_TF).ToString() = "FALSE" And oRow(_XML_LINE_Check).ToString() = "TRUE" Then
1218
            Return oRow(_XML_LINE_UID).ToString()
1219
        End If
1220
        Return String.Empty
1221
    End Function
1222

    
1223

    
1224
    Private Sub AddLog(ByVal sUid As String, ByVal sSystemPath As String,
1225
                             ByVal dStart_Dwg_x As Double, ByVal dStart_Dwg_y As Double, ByVal dEnd_Dwg_x As Double, ByVal dEnd_Dwg_y As Double,
1226
                       ByVal sLineNoText As String, ByVal sConn1Uid As String, ByVal sConn2Uid As String)
1227
        SetListBoxItems(ListBox_Result, "Place Pipe.." & sUid & " (" & dStart_Dwg_x & "," & dStart_Dwg_y & ") - (" & dEnd_Dwg_x & "," & dEnd_Dwg_y & ")..." & _iPipecnt & " count ")
1228
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & sUid)
1229
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
1230
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & sConn1Uid)
1231
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & sConn2Uid)
1232
        'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1233
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "StartPoint : " & dStart_Dwg_x & "," & dStart_Dwg_y)
1234
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "EndPoint : " & dEnd_Dwg_x & "," & dEnd_Dwg_y)
1235
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Pipe Count : " & _iPipecnt)
1236
    End Sub
1237

    
1238
    Private Sub AddAttribute(ByVal oPipeRun As LMPipeRun, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String)
1239
        Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
1240
        If oAttributeRow.Length > 0 Then
1241
            For Each oAttribute In oAttributeRow
1242
                Try
1243
                    Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1244
                    Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1245
                    If sPIDValue.Contains("'") Then
1246
                        sPIDValue = sPIDValue.Replace("'", """")
1247
                    End If
1248
                    Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1249
                    oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
1250
                Catch ex As Exception
1251
                End Try
1252
            Next
1253
            oPipeRun.Commit()
1254
        End If
1255
    End Sub
1256

    
1257
    Private Sub AddModelingDT(ByVal sUid As String, ByVal sModelID As String, ByVal oCurrentConnector As LMConnector,
1258
                              ByVal dStart_Dwg_x As Double, ByVal dStart_Dwg_y As Double,
1259
                              ByVal dEnd_Dwg_x As Double, ByVal dEnd_Dwg_y As Double)
1260
        Dim oAddRow As DataRow = _ModelingLine_Dt.NewRow
1261
        oAddRow(_XML_LINE_UID) = sUid
1262
        oAddRow(_XML_LINE_SPID) = sModelID
1263
        oAddRow(_XML_LINE_LMCONNECTOR) = oCurrentConnector
1264
        oAddRow(_XML_LINE_DRAWING_TF) = "TRUE"
1265
        oAddRow(_XML_LINE_DWG_STARTPOINT_X) = dStart_Dwg_x
1266
        oAddRow(_XML_LINE_DWG_STARTPOINT_Y) = dStart_Dwg_y
1267
        oAddRow(_XML_LINE_DWG_ENDPOINT_X) = dEnd_Dwg_x
1268
        oAddRow(_XML_LINE_DWG_ENDPOINT_Y) = dEnd_Dwg_y
1269
        _ModelingLine_Dt.Rows.Add(oAddRow)
1270
    End Sub
1271

    
1272
    Private Function JoinPipeRun(ByVal sID_1 As String, ByVal sID_2 As String) As Boolean
1273
        Try
1274
            Dim objSurvivorItem As LMAItem = Nothing
1275
            Dim oPipeRun1 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_1)
1276
            Dim oPipeRun2 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_2)
1277
            _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
1278
            Return True
1279
        Catch ex As Exception
1280
            Return False
1281
        End Try
1282
    End Function
1283

    
1284

    
1285
    Private Function LineModeling(ByVal objInputs As PlaceRunInputs, ByVal sSystemPath As String) As LMConnector
1286
        Dim oCurrentConnector As LMConnector = Nothing
1287
        Dim objItem As LMAItem
1288
        objItem = _Placement.PIDCreateItem(sSystemPath)
1289
        Try
1290
            oCurrentConnector = _Placement.PIDPlaceRun(objItem, objInputs)
1291
            AddProgress()
1292
        Catch ex As Exception
1293
        End Try
1294
        Return oCurrentConnector
1295
    End Function
1296

    
1297
    Private Sub GetPrimaryLineInNode(ByVal list As List(Of Line), ByVal node As TreeNode)
1298

    
1299
        If node.Tag IsNot Nothing Then
1300
            If TypeOf node.Tag Is Line Then
1301
                Dim line As Line = node.Tag
1302
                If line.TYPE = "Primary" And node.Checked Then
1303
                    list.Add(line)
1304
                End If
1305
            End If
1306
        End If
1307

    
1308
        For Each child As TreeNode In node.Nodes()
1309
            GetPrimaryLineInNode(list, child)
1310
        Next
1311
    End Sub
1312

    
1313
    Private Sub GetSymbolInNode(ByVal list As List(Of Symbol), ByVal node As TreeNode)
1314

    
1315
        If node.Tag IsNot Nothing Then
1316
            If TypeOf node.Tag Is Symbol Then
1317
                Dim symbol As Symbol = node.Tag
1318
                list.Add(symbol)
1319
            End If
1320
        End If
1321

    
1322
        For Each child As TreeNode In node.Nodes()
1323
            GetSymbolInNode(list, child)
1324
        Next
1325
    End Sub
1326

    
1327
    Private Function FindBranchLine(ByVal lines As List(Of Line)) As List(Of Line)
1328
        Dim branchLines As List(Of Line) = New List(Of Line)
1329

    
1330
        For Each line As Line In lines
1331
            For Each conn As Connector In line.CONNECTORS
1332
                If String.IsNullOrEmpty(conn.CONNECTEDITEM) = False Then
1333
                    If IsBranchLine(conn.CONNECTEDITEM, line.UID, lines) Then
1334
                        branchLines.Add(line)
1335
                    End If
1336
                End If
1337
            Next
1338
        Next
1339

    
1340
        Return branchLines
1341
    End Function
1342

    
1343
    Private Function IsBranchLine(ByVal connectedUID As String, ByVal UID As String, ByVal lines As List(Of Line)) As Boolean
1344
        Dim connLine = FindLineByUID(lines, connectedUID)
1345
        If connLine IsNot Nothing Then
1346
            If connLine.CONNECTORS(0).CONNECTEDITEM <> UID And connLine.CONNECTORS(1).CONNECTEDITEM <> UID Then
1347
                Return True
1348
            End If
1349
        End If
1350

    
1351
        Return False
1352
    End Function
1353

    
1354
    Private Function FindLineByUID(ByVal lines As List(Of Line), ByVal uid As String) As Line
1355
        For Each line As Line In lines
1356
            If line.UID = uid Then
1357
                Return line
1358
            End If
1359
        Next
1360

    
1361
        Return Nothing
1362
    End Function
1363

    
1364

    
1365
    Private Function FindSymbolByUID(ByVal symbols As List(Of Symbol), ByVal uid As String) As Symbol
1366
        For Each symbol As Symbol In symbols
1367
            If symbol.UID = uid Then
1368
                Return symbol
1369
            End If
1370
        Next
1371

    
1372
        Return Nothing
1373
    End Function
1374

    
1375
    Private Function IsHorizontal(ByVal line As Line)
1376
        If line.END_X - line.START_X = 0 Then
1377
            Return False
1378
        Else
1379
            Dim angle = Math.Atan(Math.Abs(line.END_Y - line.START_Y) / Math.Abs(line.END_X - line.START_X)) * 180 / Math.PI
1380
            If angle < 10 Then
1381
                Return True
1382
            Else
1383
                Return False
1384
            End If
1385
        End If
1386
    End Function
1387

    
1388
    Private Function IsHorizontal(ByVal point1 As Pointd, ByVal point2 As Pointd)
1389
        If point1.X - point2.X = 0 Then
1390
            Return False
1391
        Else
1392
            Dim angle = Math.Atan(Math.Abs(point2.Y - point1.Y) / Math.Abs(point2.X - point1.X)) * 180 / Math.PI
1393
            If angle < 10 Then
1394
                Return True
1395
            Else
1396
                Return False
1397
            End If
1398
        End If
1399
    End Function
1400

    
1401
    Private Function GetLMConnectorByPoint(ByVal ModelId As String, ByVal point As Pointd) As LMConnector
1402
        Dim objPlacement As Placement = New Placement
1403
        Dim objConnector As LMConnector = Nothing
1404

    
1405
        Dim distance As Double = Double.MaxValue
1406
        Dim lmPipeRun As LMPipeRun = objPlacement.PIDDataSource.GetPipeRun(ModelId)
1407
        For Each oRep As LMRepresentation In lmPipeRun.Representations
1408
            If oRep.Attributes("RepresentationType").Value = "Connector" And oRep.Attributes("ItemStatus").Value = "Active" Then
1409
                Dim _conn As LMConnector = objPlacement.PIDDataSource.GetConnector(oRep.Id)
1410
                For Each vertex As LMConnectorVertex In _conn.ConnectorVertices
1411
                    Dim _distance As Double = CalcPointToPointdDistance(point, New Pointd(vertex.XCoordinate, vertex.YCoordinate))
1412

    
1413
                    If _distance < distance Then
1414
                        distance = _distance
1415
                        objConnector = _conn
1416
                    End If
1417
                Next
1418
            End If
1419
        Next
1420

    
1421
        Return objConnector
1422
    End Function
1423

    
1424
    Private Function GetLMConnectorBySP_ID(ByVal ModelId As String, ByVal SP_ID1 As String, ByVal SP_ID2 As String) As LMConnector
1425
        Dim objPlacement As Placement = New Placement
1426
        Dim objConnector As LMConnector = Nothing
1427

    
1428
        Dim distance As Double = Double.MaxValue
1429
        Dim lmPipeRun As LMPipeRun = objPlacement.PIDDataSource.GetPipeRun(ModelId)
1430
        For Each oRep As LMRepresentation In lmPipeRun.Representations
1431
            If oRep.Attributes("RepresentationType").Value = "Connector" And oRep.Attributes("ItemStatus").Value = "Active" Then
1432
                Dim _conn As LMConnector = objPlacement.PIDDataSource.GetConnector(oRep.Id)
1433

    
1434
                Dim find1 As Boolean = False
1435
                Dim find2 As Boolean = False
1436

    
1437
                If _conn.ConnectItem1SymbolID IsNot Nothing Then
1438
                    If _conn.ConnectItem1SymbolID.ToString = SP_ID1 Or _conn.ConnectItem1SymbolID.ToString = SP_ID2 Then
1439
                        find1 = True
1440
                    End If
1441
                End If
1442

    
1443
                If _conn.ConnectItem2SymbolID IsNot Nothing Then
1444
                    If _conn.ConnectItem2SymbolID.ToString = SP_ID1 Or _conn.ConnectItem2SymbolID.ToString = SP_ID2 Then
1445
                        find2 = True
1446
                    End If
1447
                End If
1448

    
1449
                If find1 And find2 Then
1450
                    Return _conn
1451
                End If
1452
            End If
1453
        Next
1454

    
1455
        If objConnector Is Nothing Then
1456
            Debug.WriteLine("Error At GetLMConnectorBySP_ID")
1457
        End If
1458

    
1459
        Return objConnector
1460
    End Function
1461

    
1462
    Private Function CalcLineToPointdDistance(ByVal point1 As Pointd, ByVal point2 As Pointd, ByVal targetPointd As Pointd) As Double
1463
        If point1.X = point2.X Then
1464
            Return Math.Abs(targetPointd.X - point1.X)
1465
        ElseIf point1.Y = point2.Y Then
1466
            Return Math.Abs(targetPointd.Y - point1.Y)
1467
        Else
1468
            ' y = ax + c
1469
            Dim a As Double = (point2.Y - point1.Y) / (point2.X - point1.X)
1470
            Dim c As Double = point2.Y - a * point2.X
1471

    
1472
            ' ax + by + c = 0
1473
            Dim b As Double = -1
1474
            Return Math.Abs(a * targetPointd.X + b * targetPointd.Y + c) / Math.Pow(a * a + b * b, 0.5)
1475
        End If
1476
    End Function
1477

    
1478
    Private Function CalcPointToPointdDistance(ByVal point1 As Pointd, ByVal point2 As Pointd) As Double
1479

    
1480
        Return Math.Pow(Math.Pow(point1.X - point2.X, 2) + Math.Pow(point1.Y - point2.Y, 2), 0.5)
1481

    
1482
    End Function
1483

    
1484
    Private Function GetConnectorTarget(ByVal Connector_ModelID As String, ByVal targetPoint As Pointd) As LMConnector
1485
        Dim objPlacement As Placement = New Placement
1486

    
1487
        Dim lmPipeRun As LMPipeRun = objPlacement.PIDDataSource.GetPipeRun(Connector_ModelID)
1488

    
1489
        Dim connList As List(Of LMConnector) = New List(Of LMConnector)
1490
        Dim oConnector As LMConnector = Nothing
1491

    
1492
        For Each oRep As LMRepresentation In lmPipeRun.Representations
1493
            If oRep.Attributes("RepresentationType").Value = "Connector" And oRep.Attributes("ItemStatus").Value = "Active" Then
1494
                connList.Add(objPlacement.PIDDataSource.GetConnector(oRep.Id))
1495
            End If
1496
        Next
1497

    
1498
        '' 자기 자신의 Line 찾기
1499
        Dim distance As Double = Double.MaxValue
1500
        For Each lmLine As LMConnector In connList
1501
            '' Connector의 포인트 정리
1502

    
1503
            '' 임시
1504
            oConnector = lmLine
1505
            '_Placement.PIDDataSource.GetPipingPoint()
1506

    
1507
            Dim pointList As List(Of Pointd) = New List(Of Pointd)
1508

    
1509
            For index = 1 To Integer.MaxValue
1510
                Dim point As LMConnectorVertex = lmLine.ConnectorVertices.Nth(index)
1511
                If point IsNot Nothing Then
1512
                    Dim _pointd As Pointd = New Pointd()
1513
                    _pointd.X = point.XCoordinate
1514
                    _pointd.Y = point.YCoordinate
1515
                    pointList.Add(_pointd)
1516
                Else
1517
                    Exit For
1518
                End If
1519
            Next
1520

    
1521
            For index = 0 To pointList.Count - 1
1522
                If pointList.Count > index + 1 Then
1523
                    Dim _tempDistance As Double = CalcLineToPointdDistance(pointList(index), pointList(index + 1), targetPoint)
1524
                    If _tempDistance < distance Then
1525
                        oConnector = lmLine
1526
                        distance = _tempDistance
1527
                    End If
1528
                End If
1529
            Next
1530
        Next
1531

    
1532
        Return oConnector
1533
    End Function
1534

    
1535
    Private Function FindFirstLine(ByVal primaryLineList As List(Of Line), ByVal symbols As List(Of Symbol), ByVal symbol As Symbol, ByVal UID As String) As Line
1536

    
1537
        For Each conn As Connector In symbol.CONNECTORS
1538
            '' 자기 자신일 경우 제외
1539
            If conn.CONNECTEDITEM = UID Then
1540
                Continue For
1541
            End If
1542

    
1543
            Dim _symbol As Symbol = FindSymbolByUID(symbols, conn.CONNECTEDITEM)
1544
            Dim _line As Line = FindLineByUID(primaryLineList, conn.CONNECTEDITEM)
1545

    
1546
            If _line IsNot Nothing Then
1547
                If _line.GROUPING = False Then
1548
                    Return _line
1549
                End If
1550
            ElseIf _symbol IsNot Nothing Then
1551
                Return FindFirstLine(primaryLineList, symbols, _symbol, symbol.UID)
1552
            End If
1553
        Next
1554

    
1555
        Return Nothing
1556

    
1557
    End Function
1558

    
1559
    Structure Pointd
1560
        Public Sub New(ByVal X As Double, ByVal Y As Double)
1561
            Me.X = X
1562
            Me.Y = Y
1563
        End Sub
1564
        Public X As Double
1565
        Public Y As Double
1566
    End Structure
1567

    
1568
    Class PointdInfo
1569
        Public Sub New(ByVal Pointd As Pointd, ByVal Type As String)
1570
            Me.Pointd = Pointd
1571
            Me.Type = Type
1572
        End Sub
1573

    
1574
        Public Sub New(ByVal Pointd As Pointd, ByVal Type As String, ByVal SP_ID As String)
1575
            Me.Pointd = Pointd
1576
            Me.Type = Type
1577
            Me.SP_ID = SP_ID
1578
        End Sub
1579

    
1580
        Public Pointd As Pointd
1581
        Public Type As String
1582
        Public SP_ID As String
1583
    End Class
1584

    
1585
    Private Function CalcDistance(ByVal point1 As Pointd, ByVal point2 As Pointd) As Double
1586
        Return Math.Pow(Math.Sqrt(Math.Abs(point1.X - point2.X)) + Math.Sqrt(Math.Abs(point1.Y - point2.Y)), 0.5)
1587
    End Function
1588

    
1589
    Private Sub FindNearPoint(ByVal oOPCSymbol As LMSymbol, ByRef dNear_x As Double, ByRef dNear_y As Double)
1590
        Dim oConnectionPoints_x(4) As Double
1591
        Dim oConnectionPoints_y(4) As Double
1592

    
1593
        Try
1594
            _Placement.PIDConnectPointLocation(oOPCSymbol, 1, oConnectionPoints_x(0), oConnectionPoints_y(0))
1595
            _Placement.PIDConnectPointLocation(oOPCSymbol, 2, oConnectionPoints_x(1), oConnectionPoints_y(1))
1596
            _Placement.PIDConnectPointLocation(oOPCSymbol, 3, oConnectionPoints_x(2), oConnectionPoints_y(2))
1597
            _Placement.PIDConnectPointLocation(oOPCSymbol, 4, oConnectionPoints_x(3), oConnectionPoints_y(3))
1598
            Dim iNearPoint As Integer = 0
1599
            Dim dGap As Double = 0
1600
            For i = 0 To 3
1601
                If dGap = 0 Then
1602
                    iNearPoint = i
1603
                    dGap = Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y)
1604
                Else
1605
                    If dGap >= Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y) Then
1606
                        iNearPoint = i
1607
                        dGap = Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y)
1608
                    End If
1609
                End If
1610
            Next
1611
            dNear_x = oConnectionPoints_x(iNearPoint)
1612
            dNear_y = oConnectionPoints_y(iNearPoint)
1613
        Catch ex As Exception
1614

    
1615
        End Try
1616

    
1617
    End Sub
1618

    
1619
    Private Function GetPipeType(ByVal sType As String) As String
1620
        Dim sSystempath As String = "\Piping\Routing\Process Lines\Primary Piping.sym" ' oPipeRow(0)(_XML_LINE_SYSTEMPATH).ToString()
1621
        If sType.ToUpper() = "ELECTRIC" Then
1622
            sSystempath = "\Instrumentation\Signal Line\Electric.sym"
1623
        ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
1624
            sSystempath = "\Instrumentation\Signal Line\Connect To Process.sym"
1625
        ElseIf sType.ToUpper() = "SOFTWARE" Then
1626
            sSystempath = "\Instrumentation\Signal Line\Software Link.sym"
1627
        ElseIf sType.ToUpper() = "PNEUMATIC" Then
1628
            sSystempath = "\Instrumentation\Signal Line\Pneumatic.sym"
1629
        End If
1630
        Return sSystempath
1631
    End Function
1632

    
1633
    Private Sub InitAutoRouting()
1634
        For Each oDrwing As TreeNode In Tree_Result.Nodes
1635
            For Each oDwgNode As TreeNode In oDrwing.Nodes
1636
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
1637
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
1638
                If CDrawing IsNot Nothing Then
1639
                    Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
1640
                    Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
1641
                    SetListBoxItems(ListBox_Result, "Place " & CDrawing.DwgName & "....")
1642

    
1643
                    For Each oNode As TreeNode In oDwgNode.Nodes
1644
                        Dim iItemcnt As Integer = 0
1645
                        Dim sNodeUid As String = oNode.Name
1646
                        Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
1647
                        Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
1648
                        If CLineNo IsNot Nothing Then
1649
                            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
1650
                            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
1651

    
1652
                            For Each oLineRow In oLine_Dt.Rows
1653
                                ' oLineRow(_XML_LINE_UID) = ""
1654
                                oLineRow(_XML_LINE_SPID) = ""
1655
                                oLineRow(_XML_LINE_LMCONNECTOR) = Nothing
1656
                                oLineRow(_XML_LINE_LMCONNECTOR_1) = Nothing
1657
                                oLineRow(_XML_LINE_LMCONNECTOR_2) = Nothing
1658
                                oLineRow(_XML_LINE_DRAWING_TF) = "False"
1659
                                oLineRow(_XML_LINE_Check) = "False"
1660
                            Next
1661
                            For Each oSymbolRow In oSymbol_Dt.Rows
1662
                                '   oSymbolRow(_XML_SYMBOL_UID) = ""
1663
                                oSymbolRow(_XML_SYMBOL_SPID) = ""
1664
                                oSymbolRow(_XML_SYMBOL_LMSYMBOL) = Nothing
1665
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_1) = Nothing
1666
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_2) = Nothing
1667
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_3) = Nothing
1668
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_4) = Nothing
1669
                                oSymbolRow(_XML_SYMBOL_Check) = "False"
1670
                                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "False"
1671

    
1672
                            Next
1673

    
1674
                        End If
1675

    
1676
                        Dim CTRIMLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
1677
                        If CTRIMLineNo IsNot Nothing Then
1678
                            Dim oLine_Dt As DataTable = CTRIMLineNo.Dt_Line
1679
                            Dim oSymbol_Dt As DataTable = CTRIMLineNo.Dt_Symbol
1680

    
1681
                            For Each oLineRow In oLine_Dt.Rows
1682
                                ' oLineRow(_XML_LINE_UID) = ""
1683
                                oLineRow(_XML_LINE_SPID) = ""
1684
                                oLineRow(_XML_LINE_LMCONNECTOR) = Nothing
1685
                                oLineRow(_XML_LINE_LMCONNECTOR_1) = Nothing
1686
                                oLineRow(_XML_LINE_LMCONNECTOR_2) = Nothing
1687
                                oLineRow(_XML_LINE_DRAWING_TF) = "False"
1688
                                oLineRow(_XML_LINE_Check) = "False"
1689
                            Next
1690
                            For Each oSymbolRow In oSymbol_Dt.Rows
1691
                                '   oSymbolRow(_XML_SYMBOL_UID) = ""
1692
                                oSymbolRow(_XML_SYMBOL_SPID) = ""
1693
                                oSymbolRow(_XML_SYMBOL_LMSYMBOL) = Nothing
1694
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_1) = Nothing
1695
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_2) = Nothing
1696
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_3) = Nothing
1697
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_4) = Nothing
1698
                                oSymbolRow(_XML_SYMBOL_Check) = "False"
1699
                                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "False"
1700

    
1701
                            Next
1702

    
1703
                        End If
1704
                    Next
1705
                End If
1706
            Next
1707
        Next
1708
    End Sub
1709

    
1710

    
1711

    
1712

    
1713

    
1714
    Private Function UpdateCheckBranchLine(ByRef dX As Double, ByRef dY As Double,
1715
                                  ByRef oLMConnector As LMConnector, ByRef sUid As String) As Boolean
1716
        Dim oDataSource As LMADataSource = _Placement.PIDDataSource
1717
        Dim bCheckBranchItem As Boolean = False
1718
        Dim iGapCheck As Integer = 0
1719
        Try
1720
            For Each oModelrow In _ModelingLine_Dt.Rows
1721
                Dim d기준x As Double = dX
1722
                Dim d기준y As Double = dY
1723
                Dim dGap As Double = 0.001
1724
                Dim oRun As LMPipeRun = Nothing
1725
                Dim dModelStartX As Double
1726
                Dim dModelStartY As Double
1727
                Dim dModelEndX As Double
1728
                Dim dModelEndY As Double
1729
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
1730
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
1731
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
1732
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
1733
                d기준x = (dModelStartX + dModelEndX) / 2
1734
                d기준y = (dModelStartY + dModelEndY) / 2
1735

    
1736
                Dim dMax_X As Double = 0.0
1737
                Dim dMax_Y As Double = 0.0
1738
                Dim dMin_X As Double = 0.0
1739
                Dim dMin_Y As Double = 0.0
1740
                If dModelEndX > dModelStartX Then
1741
                    dMax_X = dModelEndX
1742
                    dMin_X = dModelStartX
1743
                Else
1744
                    dMax_X = dModelStartX
1745
                    dMin_X = dModelEndX
1746
                End If
1747

    
1748
                If dModelEndY > dModelStartY Then
1749
                    dMax_Y = dModelEndY
1750
                    dMin_Y = dModelStartY
1751
                Else
1752
                    dMax_Y = dModelStartY
1753
                    dMin_Y = dModelEndY
1754
                End If
1755

    
1756
                If dX <= dMax_X + dGap And dX >= dMin_X - dGap And
1757
                  dY <= dMax_Y + dGap And dY >= dMin_Y - dGap Then
1758
                    If Math.Abs(dMax_X - dMin_X) > Math.Abs(dMax_Y - dMin_Y) Then
1759
                        dY = dMax_Y
1760
                    Else
1761
                        dX = dMax_X
1762
                    End If
1763

    
1764
                    Try
1765
                        Dim sModelItemID As String = oModelrow(_XML_LINE_SPID).ToString()
1766
                        sUid = oModelrow(_XML_LINE_UID).ToString()
1767
                        oRun = oDataSource.GetPipeRun(sModelItemID)
1768
                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
1769
                    Catch ex As Exception
1770
                    End Try
1771
                    Try
1772
                        If oRun IsNot Nothing Then
1773
                            Dim dResultCalc As Double = -1
1774
                            Dim bBranchFlag As Boolean = False
1775
                            Dim dBranchX As Double = 0
1776
                            Dim dBranchY As Double = 0
1777
                            For Each objRep In oRun.Representations
1778
                                '  Dim sAttriName As String
1779
                                'For Each objAttr In objRep.Attributes
1780
                                '    sAttriName = objAttr.name
1781
                                'Next
1782
                                'MsgBox(objRep.RepresentationType)
1783
                                If objRep.RepresentationType = "Connector" Then
1784
                                    Dim objConnector As LMConnector = oDataSource.GetConnector(objRep.ID)
1785
                                    '     Dim sItemStatus As String = objConnector.Attributes("ItemStatus").Value
1786
                                    '   Dim sModelTypeName As String = objConnector.ModelItemObject.Attributes("ItemTypeName").Value
1787

    
1788
                                    'Dim dConn_SX As Double = 0
1789
                                    'Dim dConn_SY As Double = 0
1790
                                    'Dim dConn_EX As Double = 0
1791
                                    'Dim dConn_EY As Double = 0
1792
                                    Dim dConn_X As Double = 0
1793
                                    Dim dConn_Y As Double = 0
1794
                                    For Each objConnectorVertex In objConnector.ConnectorVertices
1795
                                        dConn_X = objConnectorVertex.Attributes("XCoordinate").Value
1796
                                        dConn_Y = objConnectorVertex.Attributes("YCoordinate").Value
1797
                                        'If dConn_SX = 0 Then
1798
                                        '    dConn_SX = objConnectorVertex.Attributes("XCoordinate").Value
1799
                                        '    dConn_SY = objConnectorVertex.Attributes("YCoordinate").Value
1800
                                        'Else
1801
                                        '    dConn_EX = objConnectorVertex.Attributes("XCoordinate").Value
1802
                                        '    dConn_EY = objConnectorVertex.Attributes("YCoordinate").Value
1803
                                        'End If
1804
                                        Dim dCalc As Double = Math.Abs(dConn_X - dX) + Math.Abs(dConn_Y - dY)
1805
                                        If bBranchFlag = False Then
1806
                                            If dResultCalc = -1 Or dResultCalc > dCalc Then
1807
                                                dResultCalc = dCalc
1808
                                                oLMConnector = objConnector
1809
                                                bCheckBranchItem = True
1810
                                            End If
1811
                                        Else
1812
                                            If (dConn_X >= dX And dBranchX <= dX And dConn_Y >= dY And dBranchY <= dY) Or
1813
                                               (dConn_X <= dX And dBranchX >= dX And dConn_Y <= dY And dBranchY >= dY) Then
1814
                                                If dResultCalc = -1 Or dResultCalc > dCalc Then
1815
                                                    dResultCalc = dCalc
1816
                                                    oLMConnector = objConnector
1817
                                                    bCheckBranchItem = True
1818
                                                End If
1819
                                            End If
1820
                                        End If
1821

    
1822

    
1823
                                        'If dConn_EX <> 0 And dConn_EY <> 0 Then
1824
                                        '    If dConn_SX >= dX And dConn_EX <= dX And dConn_SY >= dY And dConn_EY <= dY Then
1825
                                        '        oLMConnector = objConnector
1826
                                        '        Exit For
1827
                                        '    ElseIf dConn_SX <= dX And dConn_EX >= dX And dConn_SY <= dY And dConn_EY >= dY Then
1828
                                        '        oLMConnector = objConnector
1829
                                        '        Exit For
1830
                                        '    Else
1831
                                        '        If dConn_EX > 0 Then
1832
                                        '            dConn_SX = dConn_EX
1833
                                        '            dConn_SY = dConn_EY
1834
                                        '        End If
1835
                                        '    End If
1836
                                        'End If
1837

    
1838
                                    Next
1839
                                    'If oLMConnector IsNot Nothing Then
1840
                                    '    Exit For
1841
                                    'End If
1842
                                ElseIf objRep.RepresentationType = "Branch" Then
1843
                                    Dim objConnector As LMSymbol = oDataSource.GetSymbol(objRep.ID)
1844
                                    dBranchX = objConnector.Attributes("XCoordinate").Value
1845
                                    dBranchY = objConnector.Attributes("YCoordinate").Value
1846
                                    bBranchFlag = True
1847
                                End If
1848
                                'If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then
1849
                                '    Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
1850
                                '    For Each objConnectorVertex In objConnector.ConnectorVertices
1851
                                '        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
1852
                                '        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
1853
                                '        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
1854
                                '            oLMConnector = objConnector
1855
                                '            dX = dConn_X
1856
                                '            dY = dConn_Y
1857
                                '            bConnectionFlag = True
1858
                                '        End If
1859
                                '    Next
1860
                                'End If
1861
                            Next
1862
                        End If
1863
                    Catch ex As Exception
1864
                    End Try
1865
                    '    oUid = oModelrow(_XML_LINE_UID).ToString()
1866
                    ' Dim oID As String = oModelrow(_XML_LINE_SPID)
1867
                    '    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
1868
                    '    oID = oLMConnector.ModelItemID
1869
                    '  oLMConnector = _Placement.PIDDataSource.GetConnector(oID)
1870
                    'If oLMConnector IsNot Nothing Then
1871
                    '    Exit For
1872
                    'End If
1873
                End If
1874

    
1875

    
1876
            Next
1877
        Catch ex As Exception
1878
            bCheckBranchItem = False
1879
            oLMConnector = Nothing
1880
        End Try
1881
        Return bCheckBranchItem
1882
    End Function
1883

    
1884
    ''' <summary>
1885
    ''' 라인과 특정 포인트에 커넥션을 확인하는 메서드
1886
    ''' </summary>
1887
    ''' <param name="oModelingLineRows"></param>
1888
    ''' <param name="dX"></param>
1889
    ''' <param name="dY"></param>
1890
    ''' <param name="oLMConnector"></param>
1891
    ''' <param name="dPreConnX"></param>
1892
    ''' <param name="dPreConnY"></param>
1893
    ''' <returns></returns>
1894

    
1895
    Private Function CheckConnectionLine(ByRef dX As Double, ByRef dY As Double,
1896
                                  ByRef oLMConnector As LMConnector, ByRef sUid As String) As Boolean
1897
        Dim bConnectionFlag As Boolean = False
1898
        Dim iGapCheck As Integer = 0
1899
        Try
1900
            For Each oModelrow In _ModelingLine_Dt.Rows
1901
                Dim d기준x As Double = dX
1902
                Dim d기준y As Double = dY
1903
                Dim dGap As Double = 0.001
1904
                Dim oRun As LMPipeRun = Nothing
1905
                Dim dModelStartX As Double
1906
                Dim dModelStartY As Double
1907
                Dim dModelEndX As Double
1908
                Dim dModelEndY As Double
1909
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
1910
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
1911
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
1912
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
1913
                d기준x = (dModelStartX + dModelEndX) / 2
1914
                d기준y = (dModelStartY + dModelEndY) / 2
1915

    
1916
                Dim bCheckEqual As Boolean = False
1917
                If dX <= dModelStartX + dGap And dX >= dModelStartX - dGap And
1918
                        dY <= dModelStartY + dGap And dY >= dModelStartY - dGap Then
1919
                    bCheckEqual = True
1920
                ElseIf dX <= dModelEndX + dGap And dX >= dModelEndX - dGap And
1921
                        dY <= dModelEndY + dGap And dY >= dModelEndY - dGap Then
1922
                    bCheckEqual = True
1923
                End If
1924
                If bCheckEqual Then
1925
                    Try
1926
                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
1927
                        sUid = oModelrow(_XML_LINE_UID)
1928
                        oRun = _Placement.PIDDataSource.GetPipeRun(oLMConnector.ModelItemID)
1929
                    Catch ex As Exception
1930
                    End Try
1931
                    Try
1932
                        If oRun IsNot Nothing Then
1933
                            Dim dResultCalc As Double = -1
1934
                            For Each objRep In oRun.Representations
1935
                                If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then
1936
                                    Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
1937
                                    For Each objConnectorVertex In objConnector.ConnectorVertices
1938
                                        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
1939
                                        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
1940
                                        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
1941
                                            oLMConnector = objConnector
1942
                                            dX = dConn_X
1943
                                            dY = dConn_Y
1944
                                            bConnectionFlag = True
1945
                                        End If
1946
                                    Next
1947
                                End If
1948
                            Next
1949
                        End If
1950
                    Catch ex As Exception
1951
                    End Try
1952
                Else
1953
                End If
1954
            Next
1955
        Catch ex As Exception
1956
            bConnectionFlag = False
1957
            oLMConnector = Nothing
1958
        End Try
1959
        Return bConnectionFlag
1960
    End Function
1961

    
1962
    Private Function CheckAlreadyBranchLine(ByVal sSystemPath As String, ByVal dStartX As Double, ByVal dStartY As Double, ByVal dEndX As Double, ByVal dEndY As Double) As Boolean
1963
        '현재선의 방향을 보고 상대라인이 직교되는 방향인지 체크
1964
        '오차범위를 줘서 현재선을 통과하는지 체크
1965
        '통과하는 상대라인 갯수를 먼저 구한다음 라인 갯수만큼 라인을 그린다.
1966
        Dim bCheckBranchLine As Boolean = False
1967
        Dim sCurrentDirection As String = ""
1968

    
1969
        Dim oModel_Dt As New DataTable()
1970
        oModel_Dt.Columns.Add("X")
1971
        oModel_Dt.Columns.Add("Y")
1972
        oModel_Dt.Columns.Add("Type")
1973
        oModel_Dt.Columns.Add("SPID")
1974
        Dim dGap = 0.001
1975
        If Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
1976
            sCurrentDirection = "X"
1977
            If dStartX > dEndX Then
1978
                Dim dTempX As Double = dEndX
1979
                dEndX = dStartX
1980
                dStartX = dTempX
1981
                Dim dTempY As Double = dEndY
1982
                dEndY = dStartY
1983
                dStartY = dTempY
1984
            End If
1985
            '현재선이 X축방향
1986
            Try
1987
                For Each oModelrow In _ModelingLine_Dt.Rows
1988
                    Dim dModelStart_X As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
1989
                    Dim dModelStart_Y As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
1990
                    Dim dModelEnd_X As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
1991
                    Dim dModelEnd_Y As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
1992
                    Dim sSPID As String = oModelrow(_XML_LINE_SPID)
1993
                    If dStartX < dModelStart_X And dStartX < dModelEnd_X And
1994
                       dEndX > dModelStart_X And dEndX > dModelEnd_X Then
1995
                        Dim dAddX As Double = dStartX
1996
                        Dim dAddY As Double = dStartY
1997
                        Dim sType As String = ""
1998
                        Dim dAddLineX As Double = 0
1999
                        Dim dAddLineY As Double = 0
2000
                        If dStartY = dModelStart_Y Then
2001
                            dAddX = 0
2002
                            '    dAddX = dModelStart_X
2003
                        ElseIf dStartY = dModelEnd_Y Then
2004
                            dAddX = 0
2005
                            '      dAddX = dModelEnd_X
2006
                        ElseIf dStartY <= dModelStart_Y + dGap And dStartY >= dModelStart_Y - dGap Then
2007
                            dAddX = dModelStart_X
2008
                            If dStartY <= dModelStart_Y Then
2009
                                sType = "AddLine"
2010
                                dAddLineX = dModelStart_X
2011
                                dAddLineY = dModelStart_Y
2012
                            End If
2013
                        ElseIf dStartY <= dModelEnd_Y + dGap And dStartY >= dModelEnd_Y - dGap Then
2014
                            dAddX = dModelEnd_X
2015
                            If dStartY <= dModelEnd_Y Then
2016
                                sType = "AddLine"
2017
                                dAddLineX = dModelEnd_X
2018
                                dAddLineY = dModelEnd_Y
2019
                            End If
2020
                        End If
2021
                        If sType = "AddLine" Then
2022
                            Dim objInputs As PlaceRunInputs
2023
                            objInputs = New PlaceRunInputs
2024
                            Dim oLMConnector As LMConnector = Nothing
2025
                            CheckConnectionLine(dAddLineX, dAddLineY, oLMConnector, "")
2026
                            objInputs.AddPoint(dAddLineX, dAddY)
2027
                            objInputs.AddConnectorTarget(oLMConnector, dAddLineX, dAddLineY)
2028
                            Dim AddLMConnector As LMConnector = LineModeling(objInputs, sSystemPath)
2029
                            JoinPipeRun(oLMConnector.ModelItemID, AddLMConnector.ModelItemID)
2030
                            dStartY = dAddY
2031
                        End If
2032

    
2033
                        If dAddX <> 0 Then
2034
                            Dim oDatarow As DataRow = oModel_Dt.NewRow()
2035
                            oDatarow("X") = dAddX
2036
                            oDatarow("Y") = dAddY
2037
                            oDatarow("Type") = sType
2038
                            oDatarow("SPID") = sSPID
2039
                            oModel_Dt.Rows.Add(oDatarow)
2040
                        End If
2041
                    End If
2042
                Next
2043
            Catch ex As Exception
2044
            End Try
2045
        Else
2046
            '현재선이 y축방향
2047
            sCurrentDirection = "Y"
2048
            Try
2049
                For Each oModelrow In _ModelingLine_Dt.Rows
2050
                    Dim dModelStart_X As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
2051
                    Dim dModelStart_Y As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
2052
                    Dim dModelEnd_X As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
2053
                    Dim dModelEnd_Y As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
2054
                    Dim sSPID As String = oModelrow(_XML_LINE_SPID)
2055
                    If dStartY < dModelStart_Y And dStartY < dModelEnd_Y And
2056
                       dEndY > dModelStart_Y And dEndY > dModelEnd_Y Then
2057
                        Dim dAddX As Double = dStartX
2058
                        Dim dAddY As Double = dStartY
2059
                        Dim sType As String = ""
2060
                        Dim dAddLineX As Double = 0
2061
                        Dim dAddLineY As Double = 0
2062
                        If dStartX = dModelStart_X Then
2063
                            dAddY = 0
2064
                            '       dAddY = dModelStart_Y
2065
                        ElseIf dStartX = dModelEnd_X Then
2066
                            dAddY = 0
2067
                            '        dAddY = dModelEnd_Y
2068
                        ElseIf dStartX <= dModelStart_X + dGap And dStartX >= dModelStart_X - dGap Then
2069
                            '         dAddY = dModelStart_Y
2070
                            If dStartX <= dModelStart_X Then
2071
                                dAddLineX = dModelStart_X
2072
                                dAddLineY = dModelStart_Y
2073
                                sType = "AddLine"
2074
                            End If
2075
                        ElseIf dStartX <= dModelEnd_X + dGap And dStartX >= dModelEnd_X - dGap Then
2076
                            '        dAddY = dModelEnd_Y
2077
                            If dStartX <= dModelEnd_X Then
2078
                                dAddLineX = dModelEnd_X
2079
                                dAddLineY = dModelEnd_Y
2080
                                sType = "AddLine"
2081
                            End If
2082
                        End If
2083
                        If sType = "AddLine" Then
2084
                            Dim objInputs As PlaceRunInputs
2085
                            objInputs = New PlaceRunInputs
2086
                            Dim oLMConnector As LMConnector = Nothing
2087
                            CheckConnectionLine(dAddLineX, dAddLineY, oLMConnector, "")
2088
                            objInputs.AddPoint(dAddX, dAddLineY)
2089
                            objInputs.AddConnectorTarget(oLMConnector, dAddLineX, dAddLineY)
2090
                            Dim AddLMConnector As LMConnector = LineModeling(objInputs, sSystemPath)
2091
                            JoinPipeRun(oLMConnector.ModelItemID, AddLMConnector.ModelItemID)
2092
                            dStartX = dAddX
2093
                        End If
2094

    
2095
                        If dAddY <> 0 Then
2096
                            Dim oDatarow As DataRow = oModel_Dt.NewRow()
2097
                            oDatarow("X") = dAddX
2098
                            oDatarow("Y") = dAddY
2099
                            oDatarow("Type") = sType
2100
                            oDatarow("SPID") = sSPID
2101
                            oModel_Dt.Rows.Add(oDatarow)
2102
                        End If
2103
                    End If
2104
                Next
2105
            Catch ex As Exception
2106
            End Try
2107
        End If
2108

    
2109
        '//못미치는 라인은 라인길이를 더한후 나머지 모델링(2018.09.27)
2110

    
2111
        If oModel_Dt.Rows.Count > 0 Then
2112
            If sCurrentDirection = "X" Then
2113
                'X좌표 정렬
2114
                oModel_Dt.DefaultView.Sort = "X desc"
2115
                oModel_Dt = oModel_Dt.DefaultView.ToTable(True)
2116
            Else
2117
                'Y좌표 정렬
2118
                oModel_Dt.DefaultView.Sort = "Y desc"
2119
                oModel_Dt = oModel_Dt.DefaultView.ToTable(True)
2120
            End If
2121
            Dim oLMConnector As LMConnector = Nothing
2122
            Dim oPreLMConnector As LMConnector = Nothing
2123
            Dim dStartFlag As Boolean = True
2124
            For Each oModelRow In oModel_Dt.Rows
2125
                Dim objInputs As PlaceRunInputs
2126
                objInputs = New PlaceRunInputs
2127
                Dim dX As Double = oModelRow("X")
2128
                Dim dY As Double = oModelRow("Y")
2129
                Dim sType As String = oModelRow("Type")
2130
                Dim sUid As String = ""
2131

    
2132

    
2133
                CheckConnectionLine(dX, dY, oLMConnector, sUid)
2134
                If oLMConnector IsNot Nothing Then
2135
                    If dStartFlag Then
2136
                        objInputs.AddPoint(dStartX, dStartY)
2137
                        objInputs.AddConnectorTarget(oLMConnector, dX, dY)
2138
                    Else
2139
                        objInputs.AddConnectorTarget(oPreLMConnector, dStartX, dStartY)
2140
                        objInputs.AddConnectorTarget(oLMConnector, dX, dY)
2141
                    End If
2142
                    oPreLMConnector = LineModeling(objInputs, sSystemPath)
2143
                    '모델링후 StartX를 현재 X로 변경
2144
                    dStartX = dX
2145
                    dStartY = dY
2146
                End If
2147
            Next
2148
            If oPreLMConnector IsNot Nothing Then
2149
                Dim objInputs As PlaceRunInputs
2150
                objInputs = New PlaceRunInputs
2151
                objInputs.AddConnectorTarget(oPreLMConnector, dStartX, dStartY)
2152
                objInputs.AddPoint(dEndX, dEndY)
2153
                LineModeling(objInputs, sSystemPath)
2154
            End If
2155
        End If
2156
        Return bCheckBranchLine
2157
    End Function
2158

    
2159

    
2160
    Private Function CheckLineBranch(ByVal oLine_Dt As DataTable, ByRef dX As Double, ByRef dY As Double,
2161
                                     ByVal sDirection As String, ByRef oLMConnector As LMConnector) As Boolean
2162

    
2163
        Dim oModelingLineRows() As DataRow = oLine_Dt.Select(" Then[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And " &
2164
                                                                "[" & _XML_LINE_SPID & "] <> ''")
2165

    
2166
        Dim bConnectionFlag As Boolean = False
2167
        Try
2168
            For Each oModelrow In oModelingLineRows
2169
                Dim sStartPoint As String = oModelrow(_XML_LINE_STARTPOINT)
2170
                Dim sEndPoint As String = oModelrow(_XML_LINE_ENDPOINT)
2171
                Dim dModelStartX As Double
2172
                Dim dModelStartY As Double
2173
                Dim dModelEndX As Double
2174
                Dim dModelEndY As Double
2175
                ConvertPointBystring(sStartPoint, dModelStartX, dModelStartY)
2176
                ConvertPointBystring(sEndPoint, dModelEndX, dModelEndY)
2177
                ConvertPointByImage(dModelStartX, dModelStartY, _IMG_X, _IMG_Y)
2178
                ConvertPointByImage(dModelEndX, dModelEndY, _IMG_X, _IMG_Y)
2179
                Dim dGap As Double = 0.0002
2180

    
2181
                If Math.Abs(dModelStartX - dModelEndX) <= Math.Abs(dModelStartY - dModelEndY) Then
2182
                    'Vertical
2183
                    If sDirection = "X" Then
2184
                        'x Direction Line
2185
                        If (dModelStartY + dGap >= dY And dModelEndY - dGap <= dY) Or
2186
                        (dModelStartY - dGap <= dY And dModelEndY + dGap >= dY) Then
2187
                            If (dX > dModelStartX And dX < dModelEndX) Or (dX > dModelEndX And dX < dModelStartX) Then
2188
                                If Math.Abs(dX - dModelStartX) > Math.Abs(dX - dModelEndX) Then
2189
                                    dX = dModelEndX
2190
                                Else
2191
                                    dX = dModelStartX
2192
                                End If
2193
                                Try
2194
                                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
2195
                                Catch ex As Exception
2196

    
2197
                                End Try
2198
                                bConnectionFlag = True
2199
                            End If
2200
                        End If
2201
                    End If
2202
                Else
2203
                    'Horizontal 
2204
                    If sDirection = "Y" Then
2205
                        If (dModelStartX + dGap >= dX And dModelEndX - dGap <= dX) Or
2206
                       (dModelStartX - dGap <= dX And dModelEndX + dGap >= dX) Then
2207
                            If (dY > dModelStartY And dY < dModelEndY) Or (dY > dModelEndY And dY < dModelStartY) Then
2208
                                If Math.Abs(dY - dModelStartY) > Math.Abs(dY - dModelEndY) Then
2209
                                    dY = dModelEndY
2210
                                Else
2211
                                    dY = dModelStartY
2212
                                End If
2213
                                Try
2214
                                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
2215
                                Catch ex As Exception
2216
                                End Try
2217
                                bConnectionFlag = True
2218
                            End If
2219
                        End If
2220
                    End If
2221
                End If
2222
            Next
2223
        Catch ex As Exception
2224
        End Try
2225
        Return bConnectionFlag
2226
    End Function
2227
    Private Function LineModeling(ByVal oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sStartLineUid As String, ByVal sEndLineUid As String, ByVal dStart_x As Double, ByVal dStart_y As Double, ByVal dEnd_x As Double, ByVal dEnd_y As Double,
2228
                              ByVal sLineNoUid As String, ByVal sLineUid As String, ByVal sSystemPath As String, ByRef oLMConnector As LMConnector) As Boolean
2229
        'Try
2230
        '    Dim oDatasource As Object = _Placement.PIDDataSource
2231
        '    Dim oPipeRun As LMPipeRun = Nothing
2232
        '    Dim objInputs As PlaceRunInputs
2233
        '    objInputs = New PlaceRunInputs
2234
        '    Dim objItem As LMAItem
2235
        '    '       Dim objConnector As LMConnector
2236

    
2237
        '    Dim oStartLineRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sStartLineUid & "' And " &
2238
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
2239
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
2240
        '    If oStartLineRow.Length = 0 Then
2241
        '        oStartLineRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sStartLineUid & "' And " &
2242
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
2243
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
2244
        '    End If
2245
        '    Dim oEndLineRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sEndLineUid & "' And " &
2246
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
2247
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
2248

    
2249
        '    oEndLineRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sEndLineUid & "' And " &
2250
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
2251
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
2252
        '    Dim sStartConnectionType As String = ""
2253
        '    Dim sEndConnectionType As String = ""
2254

    
2255
        '    Dim oStartLMConnector As LMConnector = Nothing
2256
        '    Dim oEndLMConnector As LMConnector = Nothing
2257
        '    Dim oDirectionLine As String = ""
2258

    
2259
        '    If Math.Abs(dStart_x - dEnd_x) > Math.Abs(dStart_y - dEnd_y) Then
2260
        '        oDirectionLine = "X"
2261
        '    Else
2262
        '        oDirectionLine = "Y"
2263
        '    End If
2264

    
2265
        '    Dim bCheckFlag As Boolean = False
2266

    
2267
        '    Dim bStartCheckFlag As Boolean = CheckConnectionLine(oStartLineRow, dStart_x, dStart_y, oStartLMConnector)
2268
        '    If bStartCheckFlag = False Then
2269
        '        bStartCheckFlag = CheckConnectionLine(oStartLineRow, dEnd_x, dEnd_y, oStartLMConnector)
2270
        '        bCheckFlag = True
2271
        '    End If
2272
        '    Dim bEndCheckFlag As Boolean = CheckConnectionLine(oEndLineRow, dEnd_x, dEnd_y, oEndLMConnector)
2273

    
2274
        '    If bEndCheckFlag = False Then
2275

    
2276
        '        bEndCheckFlag = CheckConnectionLine(oEndLineRow, dStart_x, dStart_y, oEndLMConnector)
2277
        '        bCheckFlag = True
2278
        '    End If
2279

    
2280
        '    If bStartCheckFlag = True And bEndCheckFlag = False Then
2281
        '        If bCheckFlag Then
2282
        '            objInputs.AddConnectorTarget(oStartLMConnector, dEnd_x, dEnd_y)
2283
        '            objInputs.AddPoint(dStart_x, dStart_y)
2284
        '        Else
2285
        '            objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
2286
        '            objInputs.AddPoint(dEnd_x, dEnd_y)
2287
        '        End If
2288

    
2289
        '    ElseIf bStartCheckFlag = False And bEndCheckFlag = True Then
2290
        '        If bCheckFlag Then
2291

    
2292
        '            objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
2293
        '            objInputs.AddPoint(dEnd_x, dEnd_y)
2294
        '        Else
2295
        '            objInputs.AddPoint(dStart_x, dStart_y)
2296
        '            objInputs.AddConnectorTarget(oStartLMConnector, dEnd_x, dEnd_y)
2297
        '        End If
2298

    
2299
        '    ElseIf bStartCheckFlag = True And bEndCheckFlag = True Then
2300
        '        objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
2301
        '        objInputs.AddConnectorTarget(oEndLMConnector, dEnd_x, dEnd_y)
2302
        '    Else
2303
        '        objInputs.AddPoint(dStart_x, dStart_y)
2304
        '        objInputs.AddPoint(dEnd_x, dEnd_y)
2305
        '    End If
2306
        '    SetListBoxItems(ListBox_Result, "Place Pipe..(" & dStart_x & "," & dStart_y & ") - (" & dEnd_x & "," & dEnd_y & ")..." & _iPipecnt & " count ")
2307
        '    _iPipecnt = _iPipecnt + 1
2308
        '    objItem = _Placement.PIDCreateItem(sSystemPath)
2309
        '    oLMConnector = _Placement.PIDPlaceRun(objItem, objInputs)
2310

    
2311
        '    Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + sLineUid + "'")
2312
        '    If oUpdateRow.Length = 1 Then
2313
        '        oUpdateRow(0)(_XML_LINE_SPID) = oLMConnector.ModelItemID
2314
        '        oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = oLMConnector
2315

    
2316
        '        oUpdateRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2317
        '    End If
2318

    
2319
        '    oPipeRun = oDatasource.GetPipeRun(oLMConnector.ModelItemID)
2320

    
2321
        '    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
2322
        '    If oAttributeRow.Length > 0 Then
2323
        '        For Each oAttribute In oAttributeRow
2324
        '            Try
2325
        '                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2326
        '                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2327
        '                If sPIDValue.Contains("'") Then
2328
        '                    sPIDValue = sPIDValue.Replace("'", """")
2329
        '                End If
2330
        '                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2331
        '                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
2332
        '            Catch ex As Exception
2333
        '            End Try
2334
        '        Next
2335
        '        oPipeRun.Commit()
2336
        '    End If
2337
        '    Dim sID_1 As String = ""
2338
        '    Dim sID_2 As String = ""
2339
        '    If oStartLMConnector IsNot Nothing Then
2340
        '        sID_1 = oStartLMConnector.ModelItemID
2341
        '        sID_2 = oLMConnector.ModelItemID
2342
        '    ElseIf oEndLMConnector IsNot Nothing Then
2343
        '        sID_1 = oEndLMConnector.ModelItemID
2344
        '        sID_2 = oLMConnector.ModelItemID
2345
        '    End If
2346
        '    If sID_1 <> "" And sID_2 <> "" Then
2347
        '        Dim objSurvivorItem As LMAItem = Nothing
2348
        '        Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(sID_1)
2349
        '        Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(sID_2)
2350
        '        _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
2351
        '    End If
2352
        '    Return True
2353
        'Catch ex As Exception
2354
        '    Return False
2355
        'End Try
2356

    
2357
    End Function
2358

    
2359
    Private Function LineToLineModeling(ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
2360
                                        ByVal oAttribute_Dt As DataTable, ByVal sConnLineUid As String, ByVal sType As String,
2361
                                        ByRef oLMConnector As LMConnector) As String
2362
        Dim sReturnUid As String = ""
2363
        Try
2364
            Dim sLineUid As String = ""
2365

    
2366
            Dim iConnType As Integer = 0
2367

    
2368
            Dim sStartpoint As String = ""
2369
            Dim sEndpoint As String = ""
2370
            Dim dOriginalStart_x As Double = 0.0
2371
            Dim dOriginalStart_y As Double = 0.0
2372
            Dim dOriginalEnd_x As Double = 0.0
2373
            Dim dOriginalEnd_y As Double = 0.0
2374

    
2375
            Dim dStart_x As Double = 0
2376
            Dim dStart_y As Double = 0
2377
            Dim dEnd_x As Double = 0
2378
            Dim dEnd_y As Double = 0
2379
            Dim sStartLineUid As String = sConnLineUid
2380
            Dim sEndLineUid As String = ""
2381
            Dim sDirection As String = ""
2382
            Dim sSystemPath As String = GetPipeType(sType)
2383

    
2384
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" & sConnLineUid & "' And " &
2385
                                                                    "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
2386
                                                                     "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
2387
                                                                     "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
2388
            If oPipeRow.Length > 0 Then
2389
                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
2390
                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
2391
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2392
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2393
                ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
2394
                ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
2395
                If dStart_x = 0 And dStart_y = 0 Then
2396
                    dStart_x = dOriginalStart_x
2397
                    dStart_y = dOriginalStart_y
2398
                    dEnd_x = dOriginalEnd_x
2399
                    dEnd_y = dOriginalEnd_y
2400
                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
2401
                        sDirection = "X"
2402
                    Else
2403
                        sDirection = "Y"
2404
                    End If
2405
                    oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2406
                    sLineUid = sConnLineUid
2407
                End If
2408
            End If
2409

    
2410
            While True
2411
                sLineUid = ""
2412
                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sConnLineUid + "' And " &
2413
                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
2414
                                            "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
2415
                                            "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
2416

    
2417
                If oPipeRow.Length = 0 Then
2418
                    oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sConnLineUid + "' And " &
2419
                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
2420
                                            "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
2421
                                            "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
2422
                Else
2423
                    'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2424
                    'sConnLineUid = sLineUid
2425
                    sLineUid = sConnLineUid
2426
                    sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2427
                    iConnType = 1
2428
                End If
2429

    
2430
                If oPipeRow.Length > 0 Then
2431
                    If sLineUid = "" Then
2432
                        'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2433
                        'sConnLineUid = sLineUid
2434
                        sLineUid = sConnLineUid
2435
                        sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2436
                        iConnType = 2
2437
                    End If
2438
                    If iConnType = 1 Then
2439

    
2440
                    ElseIf iConnType = 2 Then
2441

    
2442
                    End If
2443
                    sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
2444
                    sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
2445
                    ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2446
                    ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2447
                    ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
2448
                    ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
2449

    
2450
                    If dStart_x = 0 And dStart_y = 0 Then
2451
                        dStart_x = dOriginalStart_x
2452
                        dStart_y = dOriginalStart_y
2453
                        dEnd_x = dOriginalEnd_x
2454
                        dEnd_y = dOriginalEnd_y
2455
                        If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
2456
                            sDirection = "X"
2457
                        Else
2458
                            sDirection = "Y"
2459
                        End If
2460
                        sType = oPipeRow(0)(_XML_LINE_TYPE).ToString()
2461
                        sSystemPath = GetPipeType(sType)
2462
                    Else
2463
                        If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
2464
                            If sDirection = "Y" Then
2465
                                '방향이 바꼈음 Y - > X
2466
                                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2467
                                sLineNoUid, sLineUid, sSystemPath, oLMConnector)
2468
                                dStart_x = dOriginalStart_x
2469
                                dStart_y = dOriginalStart_y
2470
                                dEnd_x = dOriginalEnd_x
2471
                                dEnd_y = dOriginalEnd_y
2472
                                sStartLineUid = sConnLineUid
2473
                            Else
2474
                                dEnd_x = dOriginalEnd_x
2475
                                dEnd_y = dOriginalEnd_y
2476
                            End If
2477
                            sDirection = "X"
2478
                        Else
2479
                            If sDirection = "X" Then
2480
                                '방향이 바꼈음 X - > Y
2481
                                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2482
                                sLineNoUid, sLineUid, sSystemPath, oLMConnector)
2483
                                dStart_x = dOriginalStart_x
2484
                                dStart_y = dOriginalStart_y
2485
                                dEnd_x = dOriginalEnd_x
2486
                                dEnd_y = dOriginalEnd_y
2487
                                sStartLineUid = sConnLineUid
2488
                            Else
2489

    
2490
                                dEnd_x = dOriginalEnd_x
2491
                                dEnd_y = dOriginalEnd_y
2492
                            End If
2493
                            sDirection = "Y"
2494
                        End If
2495
                    End If
2496
                    '            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2497
                Else
2498
                    If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
2499
                        LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2500
                         sLineNoUid, sLineUid, sSystemPath, oLMConnector)
2501
                    End If
2502
                    sReturnUid = sConnLineUid
2503
                    Exit While
2504
                End If
2505
            End While
2506

    
2507
            If sStartLineUid <> "" And sEndLineUid <> "" Then
2508
                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2509
                             sLineNoUid, sLineUid, sSystemPath, oLMConnector)
2510
                dStart_x = 0
2511
                dStart_y = 0
2512
                dEnd_x = 0
2513
                dEnd_y = 0
2514
            End If
2515
        Catch ex As Exception
2516

    
2517
        End Try
2518

    
2519
        Return sReturnUid
2520
    End Function
2521

    
2522

    
2523
    'Private Function LineToLineModeling(ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
2524
    '                                    ByVal oAttribute_Dt As DataTable, ByVal sConnLineUid As String, ByVal sType As String) As String
2525
    '    Dim sReturnUid As String = ""
2526
    '    Try
2527
    '        Dim sLineUid As String = ""
2528

    
2529
    '        Dim iConnType As Integer = 0
2530

    
2531
    '        Dim sStartpoint As String = ""
2532
    '        Dim sEndpoint As String = ""
2533
    '        Dim dOriginalStart_x As Double = 0.0
2534
    '        Dim dOriginalStart_y As Double = 0.0
2535
    '        Dim dOriginalEnd_x As Double = 0.0
2536
    '        Dim dOriginalEnd_y As Double = 0.0
2537

    
2538
    '        Dim dStart_x As Double = 0
2539
    '        Dim dStart_y As Double = 0
2540
    '        Dim dEnd_x As Double = 0
2541
    '        Dim dEnd_y As Double = 0
2542
    '        Dim sStartLineUid As String = sConnLineUid
2543
    '        Dim sEndLineUid As String = ""
2544
    '        Dim sDirection As String = ""
2545
    '        Dim sSystemPath As String = GetPipeType(sType)
2546

    
2547
    '        Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" & sConnLineUid & "' And " &
2548
    '                                                                "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
2549
    '                                                                 "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
2550
    '                                                                 "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
2551
    '        If oPipeRow.Length > 0 Then
2552
    '            sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
2553
    '            sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
2554
    '            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2555
    '            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2556
    '            ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
2557
    '            ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
2558
    '            If dStart_x = 0 And dStart_y = 0 Then
2559
    '                dStart_x = dOriginalStart_x
2560
    '                dStart_y = dOriginalStart_y
2561
    '                dEnd_x = dOriginalEnd_x
2562
    '                dEnd_y = dOriginalEnd_y
2563
    '                If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
2564
    '                    sDirection = "X"
2565
    '                Else
2566
    '                    sDirection = "Y"
2567
    '                End If
2568
    '                oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2569
    '                sLineUid = sConnLineUid
2570
    '            End If
2571
    '        End If
2572

    
2573
    '        While True
2574
    '            sLineUid = ""
2575
    '            oPipeRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sConnLineUid + "' And " &
2576
    '                                                                "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
2577
    '                                                                         "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
2578
    '                                                                         "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
2579

    
2580
    '            If oPipeRow.Length = 0 Then
2581
    '                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sConnLineUid + "' And " &
2582
    '                                         "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
2583
    '                                       "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
2584
    '                                      "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
2585
    '            Else
2586
    '                'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2587
    '                'sConnLineUid = sLineUid
2588
    '                sLineUid = sConnLineUid
2589
    '                sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2590
    '                iConnType = 1
2591
    '            End If
2592

    
2593
    '            If oPipeRow.Length > 0 Then
2594
    '                If sLineUid = "" Then
2595
    '                    'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2596
    '                    'sConnLineUid = sLineUid
2597
    '                    sLineUid = sConnLineUid
2598
    '                    sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2599
    '                    iConnType = 2
2600
    '                End If
2601
    '                If iConnType = 1 Then
2602

    
2603
    '                ElseIf iConnType = 2 Then
2604

    
2605
    '                End If
2606
    '                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
2607
    '                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
2608
    '                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2609
    '                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2610
    '                ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
2611
    '                ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
2612

    
2613

    
2614

    
2615
    '                If dStart_x = 0 And dStart_y = 0 Then
2616
    '                    dStart_x = dOriginalStart_x
2617
    '                    dStart_y = dOriginalStart_y
2618
    '                    dEnd_x = dOriginalEnd_x
2619
    '                    dEnd_y = dOriginalEnd_y
2620
    '                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
2621
    '                        sDirection = "X"
2622
    '                    Else
2623
    '                        sDirection = "Y"
2624
    '                    End If
2625
    '                    sType = oPipeRow(0)(_XML_LINE_TYPE).ToString()
2626
    '                    sSystemPath = GetPipeType(sType)
2627
    '                Else
2628
    '                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
2629
    '                        If sDirection = "Y" Then
2630
    '                            '방향이 바꼈음 Y - > X
2631
    '                            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2632
    '                            sLineNoUid, sLineUid, sSystemPath)
2633
    '                            dStart_x = dOriginalStart_x
2634
    '                            dStart_y = dOriginalStart_y
2635
    '                            dEnd_x = dOriginalEnd_x
2636
    '                            dEnd_y = dOriginalEnd_y
2637
    '                            sStartLineUid = sConnLineUid
2638
    '                        Else
2639
    '                            dEnd_x = dOriginalEnd_x
2640
    '                            dEnd_y = dOriginalEnd_y
2641
    '                        End If
2642
    '                        sDirection = "X"
2643
    '                    Else
2644
    '                        If sDirection = "X" Then
2645
    '                            '방향이 바꼈음 X - > Y
2646
    '                            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2647
    '                            sLineNoUid, sLineUid, sSystemPath)
2648
    '                            dStart_x = dOriginalStart_x
2649
    '                            dStart_y = dOriginalStart_y
2650
    '                            dEnd_x = dOriginalEnd_x
2651
    '                            dEnd_y = dOriginalEnd_y
2652
    '                            sStartLineUid = sConnLineUid
2653
    '                        Else
2654

    
2655
    '                            dEnd_x = dOriginalEnd_x
2656
    '                            dEnd_y = dOriginalEnd_y
2657
    '                        End If
2658
    '                        sDirection = "Y"
2659
    '                    End If
2660
    '                End If
2661
    '                '            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2662
    '            Else
2663
    '                If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
2664
    '                    LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2665
    '                     sLineNoUid, sLineUid, sSystemPath)
2666
    '                End If
2667

    
2668

    
2669
    '                sReturnUid = sConnLineUid
2670
    '                Exit While
2671
    '            End If
2672
    '        End While
2673

    
2674
    '        If sStartLineUid <> "" And sEndLineUid <> "" Then
2675
    '            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
2676
    '                         sLineNoUid, sLineUid, sSystemPath)
2677
    '            dStart_x = 0
2678
    '            dStart_y = 0
2679
    '            dEnd_x = 0
2680
    '            dEnd_y = 0
2681
    '        End If
2682
    '    Catch ex As Exception
2683

    
2684
    '    End Try
2685

    
2686
    '    Return sReturnUid
2687
    'End Function
2688

    
2689

    
2690
    Private Function SymbolToLine_Modeling(ByVal oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String,
2691
                                       ByVal sSymbolUid As String, ByVal oLMSymbol As LMSymbol) As String
2692

    
2693

    
2694
        Dim oDatasource As Object = _Placement.PIDDataSource
2695
        Dim oPipeRun As LMPipeRun = Nothing
2696
        Dim objItem As LMAItem
2697
        Dim objConnector As LMConnector
2698
        Dim objInputs As PlaceRunInputs
2699
        objInputs = New PlaceRunInputs
2700

    
2701

    
2702
        Dim sPipeUid As String = ""
2703
        Dim iConnType As Integer = 0
2704
        Dim sStartpoint As String = ""
2705
        Dim sEndpoint As String = ""
2706
        Dim dOriginalStart_x As Double = 0.0
2707
        Dim dOriginalStart_y As Double = 0.0
2708
        Dim dOriginalEnd_x As Double = 0.0
2709
        Dim dOriginalEnd_y As Double = 0.0
2710
        Dim dStart_x As Double = 0.0
2711
        Dim dStart_y As Double = 0.0
2712
        Dim dEnd_x As Double = 0.0
2713
        Dim dEnd_y As Double = 0.0
2714

    
2715
        Dim sReturnUid As String = ""
2716
        Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sSymbolUid + "' And " &
2717
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
2718
                                                                                  _XML_SYMBOL_Check & "] = 'TRUE'")
2719
        If oPipeRow.Length = 0 Then
2720
            oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sSymbolUid + "' And " &
2721
                                     "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
2722
                                    _XML_SYMBOL_Check & "] = 'TRUE'")
2723
        Else
2724
            sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2725
            iConnType = 1
2726
        End If
2727

    
2728
        If oPipeRow.Length = 1 Then
2729
            If sPipeUid = "" Then
2730
                sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2731
                iConnType = 2
2732
            End If
2733
            sReturnUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2734
            sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
2735
            sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
2736
            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2737
            dStart_x = dOriginalStart_x
2738
            dStart_y = dOriginalStart_y
2739
            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2740
            dEnd_x = dOriginalEnd_x
2741
            dEnd_y = dOriginalEnd_y
2742
            ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
2743
            ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
2744
            'OPC Connection Point가져와서 연결(2018-07-12)
2745
            If iConnType = 1 Then
2746
                FindNearPoint(oLMSymbol, dStart_x, dStart_y)
2747
                objInputs.AddSymbolTarget(oLMSymbol, dStart_x, dStart_y)
2748
                objInputs.AddPoint(dEnd_x, dEnd_y)
2749
            Else
2750
                FindNearPoint(oLMSymbol, dEnd_x, dEnd_y)
2751
                objInputs.AddSymbolTarget(oLMSymbol, dEnd_x, dEnd_y)
2752
                objInputs.AddPoint(dStart_x, dStart_y)
2753
            End If
2754
            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2755

    
2756
            Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
2757
            Dim sSystemPath As String = GetPipeType(sType)
2758

    
2759

    
2760

    
2761

    
2762
            objItem = _Placement.PIDCreateItem(sSystemPath)
2763
            objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
2764
            oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
2765
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
2766
            If oAttributeRow.Length > 0 Then
2767
                For Each oAttribute In oAttributeRow
2768
                    Try
2769
                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2770
                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2771
                        If sPIDValue.Contains("'") Then
2772
                            sPIDValue = sPIDValue.Replace("'", """")
2773
                        End If
2774
                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2775
                        oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
2776
                    Catch ex As Exception
2777
                    End Try
2778
                Next
2779
                oPipeRun.Commit()
2780
            End If
2781
        End If
2782
        Return sReturnUid
2783
    End Function
2784

    
2785
    Private Function LineToSymbol_Modeling(ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String,
2786
                                       ByVal sLineUid As String, ByVal oLMConnector As LMConnector, ByRef oLMSymbol As LMSymbol) As String
2787

    
2788

    
2789
        Dim oDatasource As Object = _Placement.PIDDataSource
2790
        Dim objItem As LMAItem
2791
        Dim objConnector As LMConnector
2792
        Dim objInputs As PlaceRunInputs
2793
        objInputs = New PlaceRunInputs
2794

    
2795

    
2796
        Dim sSymbolUid As String = ""
2797
        Dim iConnType As Integer = 0
2798
        Dim dOriginalPoint_x As Double = 0.0
2799
        Dim dORiginalPoint_y As Double = 0.0
2800
        Dim dX As Double = 0.0
2801
        Dim dY As Double = 0.0
2802
        Dim sReturnUid As String = ""
2803
        Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn1_Uid & " = '" + sLineUid + "' And " &
2804
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
2805
                                                                                  _XML_SYMBOL_Check & "] = 'TRUE'")
2806
        If oSymbolRow.Length = 0 Then
2807
            oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
2808
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
2809
                                                                                 _XML_SYMBOL_Check & "] = 'TRUE'")
2810
            If oSymbolRow.Length = 0 Then
2811
                oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
2812
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
2813
                                                                          _XML_SYMBOL_Check & "] = 'TRUE'")
2814
                If oSymbolRow.Length = 0 Then
2815
                    oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
2816
                                                   "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
2817
                                                            _XML_SYMBOL_Check & "] = 'TRUE'")
2818
                    If oSymbolRow.Length = 0 Then
2819

    
2820
                    Else
2821
                        sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
2822
                        iConnType = 4
2823
                    End If
2824
                Else
2825
                    sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
2826
                    iConnType = 3
2827
                End If
2828
            Else
2829
                sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
2830
                iConnType = 2
2831
            End If
2832

    
2833
        Else
2834
            sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
2835
            iConnType = 1
2836
        End If
2837

    
2838
        If oSymbolRow.Length = 1 Then
2839
            If sSymbolUid = "" Then
2840
                sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
2841
                iConnType = 2
2842
            End If
2843
            sReturnUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
2844
            Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
2845
            ConvertPointBystring(sOriginalPoint, dOriginalPoint_x, dORiginalPoint_y)
2846
            dX = dOriginalPoint_x
2847
            dY = dORiginalPoint_y
2848
            ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
2849
            'OPC Connection Point가져와서 연결(2018-07-12)
2850

    
2851
            oSymbolRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2852

    
2853
            Dim sType As String = oSymbolRow(0)(_XML_LINE_TYPE).ToString()
2854
            Dim sSystemPath As String = GetPipeType(sType)
2855

    
2856
            oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, ExistingItem:=oLMConnector.AsLMAItem,
2857
          TargetItem:=oLMSymbol.AsLMAItem)
2858

    
2859
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
2860
            If oAttributeRow.Length > 0 Then
2861
                For Each oAttribute In oAttributeRow
2862
                    Try
2863
                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2864
                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2865
                        If sPIDValue.Contains("'") Then
2866
                            sPIDValue = sPIDValue.Replace("'", """")
2867
                        End If
2868
                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2869
                        oLMSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
2870
                    Catch ex As Exception
2871
                    End Try
2872
                Next
2873
            End If
2874
        End If
2875
        Return sReturnUid
2876
    End Function
2877

    
2878

    
2879
    Private Sub OPCTOLineRouting(ByRef oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal oOPCSymbol As LMSymbol,
2880
                            ByVal sOPCUid As String, ByVal sLineNoUid As String)
2881
        Try
2882
            Dim oDatasource As Object = _Placement.PIDDataSource
2883
            Dim objItem As LMAItem
2884
            Dim objConnector As LMConnector
2885
            Dim objInputs As PlaceRunInputs
2886
            objInputs = New PlaceRunInputs
2887
            Dim dOriginalStart_x As Double = 0.0
2888
            Dim dOriginalStart_y As Double = 0.0
2889
            Dim dOriginalEnd_x As Double = 0.0
2890
            Dim dOriginalEnd_y As Double = 0.0
2891
            Dim dStart_x As Double = 0.0
2892
            Dim dStart_y As Double = 0.0
2893
            Dim dEnd_x As Double = 0.0
2894
            Dim dEnd_y As Double = 0.0
2895

    
2896
            Dim oPipeRun As LMPipeRun = Nothing
2897
            Dim sStartpoint As String = ""
2898
            Dim sEndpoint As String = ""
2899
            Dim iConnType As Integer = 0
2900
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sOPCUid + "' And [" &
2901
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
2902
            Dim sPipeUid As String = ""
2903
            If oPipeRow.Length = 0 Then
2904
                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sOPCUid + "' And [" &
2905
                        _XML_SYMBOL_Check & "] = 'TRUE'")
2906
            Else
2907
                sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2908
                iConnType = 1
2909
            End If
2910
            Dim oAddUid_List As New List(Of String)
2911
            If oPipeRow.Length = 1 Then
2912
                If sPipeUid = "" Then
2913
                    sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
2914
                    iConnType = 2
2915
                End If
2916
                oAddUid_List.Add(sPipeUid)
2917
                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
2918
                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
2919
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2920
                dStart_x = dOriginalStart_x
2921
                dStart_y = dOriginalStart_y
2922
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2923
                dEnd_x = dOriginalEnd_x
2924
                dEnd_y = dOriginalEnd_y
2925
                ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
2926
                ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
2927

    
2928
                'OPC Connection Point가져와서 연결(2018-07-12)
2929
                If iConnType = 1 Then
2930
                    FindNearPoint(oOPCSymbol, dStart_x, dStart_y)
2931
                    objInputs.AddSymbolTarget(oOPCSymbol, dStart_x, dStart_y)
2932
                    objInputs.AddPoint(dEnd_x, dEnd_y)
2933
                Else
2934
                    FindNearPoint(oOPCSymbol, dEnd_x, dEnd_y)
2935
                    objInputs.AddSymbolTarget(oOPCSymbol, dEnd_x, dEnd_y)
2936
                    objInputs.AddPoint(dStart_x, dStart_y)
2937
                End If
2938
                oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2939

    
2940
                While True
2941
                    '    objInputs.Clear()
2942
                    Dim oAddPipeRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" + sPipeUid + "' and " &
2943
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
2944
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
2945
                    If oAddPipeRow.Length = 0 Then
2946
                        oAddPipeRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" + sPipeUid + "' and " &
2947
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
2948
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
2949
                        sPipeUid = ""
2950
                    Else
2951
                        iConnType = 1
2952
                        sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
2953
                    End If
2954
                    If oAddPipeRow.Length = 1 Then
2955
                        If sPipeUid = "" Then
2956
                            sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
2957
                            iConnType = 2
2958
                        End If
2959
                        oAddUid_List.Add(sPipeUid)
2960
                        sStartpoint = oAddPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
2961
                        sEndpoint = oAddPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
2962
                        ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2963
                        dStart_x = dOriginalStart_x
2964
                        dStart_y = dOriginalStart_y
2965
                        ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2966
                        dEnd_x = dOriginalEnd_x
2967
                        dEnd_y = dOriginalEnd_y
2968
                        ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
2969
                        ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
2970
                        If iConnType = 1 Then
2971
                            objInputs.AddPoint(dEnd_x, dEnd_y)
2972
                            ' objInputs.AddPoint(dStart_x, dStart_y)
2973
                        Else
2974
                            'objInputs.AddConnectorTarget(objConnector, dStart_x, dStart_y)
2975
                            '  objInputs.AddPoint(dStart_x, dStart_y)
2976
                            '  objInputs.AddPoint(dEnd_x, dEnd_y)
2977
                            objInputs.AddPoint(dStart_x, dStart_y)
2978
                        End If
2979

    
2980
                        oAddPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
2981
                    Else
2982
                        Exit While
2983
                    End If
2984

    
2985
                End While
2986
                Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
2987
                Dim sSystemPath As String = GetPipeType(sType)
2988

    
2989
                objItem = _Placement.PIDCreateItem(sSystemPath)
2990
                objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
2991
                For i = 0 To oAddUid_List.Count - 1
2992
                    Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + oAddUid_List(i) + "'")
2993
                    If oUpdateRow.Length = 1 Then
2994
                        oUpdateRow(0)(_XML_LINE_SPID) = objConnector.ModelItemID
2995
                        oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = objConnector
2996
                    End If
2997
                Next
2998

    
2999

    
3000
                oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
3001
                Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
3002
                If oAttributeRow.Length > 0 Then
3003
                    For Each oAttribute In oAttributeRow
3004
                        Try
3005
                            Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
3006
                            Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
3007
                            If sPIDValue.Contains("'") Then
3008
                                sPIDValue = sPIDValue.Replace("'", """")
3009
                            End If
3010
                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3011
                            oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
3012
                        Catch ex As Exception
3013
                        End Try
3014
                    Next
3015
                    oPipeRun.Commit()
3016
                End If
3017

    
3018
            End If
3019

    
3020
        Catch ex As Exception
3021
        End Try
3022
    End Sub
3023

    
3024
    Private Function AddUidList중복체크(ByVal sUidList As List(Of String), ByVal sAddUid As String) As Boolean
3025

    
3026
        For Each sUid In sUidList
3027
            If sUid = sAddUid Then
3028
                Return False
3029
            End If
3030
        Next
3031
        Return True
3032
    End Function
3033

    
3034
    Private Sub LineRouting(ByRef oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String, ByVal sLineNoText As String)
3035
        Try
3036
            Dim oDatasource As Object = _Placement.PIDDataSource
3037
            Dim objItem As LMAItem
3038
            Dim objConnector As LMConnector
3039
            Dim objInputs As PlaceRunInputs
3040
            objInputs = New PlaceRunInputs
3041
            Dim dOriginalStart_x As Double = 0.0
3042
            Dim dOriginalStart_y As Double = 0.0
3043
            Dim dOriginalEnd_x As Double = 0.0
3044
            Dim dOriginalEnd_y As Double = 0.0
3045
            Dim dStart_x As Double = 0.0
3046
            Dim dStart_y As Double = 0.0
3047
            Dim dEnd_x As Double = 0.0
3048
            Dim dEnd_y As Double = 0.0
3049
            Dim oPipeRun As LMPipeRun = Nothing
3050
            Dim sStartpoint As String = ""
3051
            Dim sEndpoint As String = ""
3052
            Dim iConnType As Integer = 0
3053
            Dim pLMConnector As LMConnector = Nothing
3054
            For Each oLinerow In oLine_Dt.Rows
3055
                objInputs.Clear()
3056
                Dim sCheck As String = oLinerow(_XML_LINE_DRAWING_TF).ToString()
3057
                If sCheck = "FALSE" Then
3058
                    Dim sUid As String = oLinerow(_XML_LINE_UID).ToString()
3059
                    sStartpoint = oLinerow(_XML_LINE_STARTPOINT).ToString()
3060
                    sEndpoint = oLinerow(_XML_LINE_ENDPOINT).ToString()
3061
                    ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
3062
                    dStart_x = dOriginalStart_x
3063
                    dStart_y = dOriginalStart_y
3064
                    ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
3065
                    dEnd_x = dOriginalEnd_x
3066
                    dEnd_y = dOriginalEnd_y
3067
                    ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
3068
                    ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
3069

    
3070
                    objInputs.AddPoint(dStart_x, dStart_y)
3071
                    objInputs.AddPoint(dEnd_x, dEnd_y)
3072
                    Dim sType As String = oLinerow(_XML_LINE_TYPE).ToString()
3073
                    Dim sSystemPath As String = GetPipeType(sType)
3074
                    objItem = _Placement.PIDCreateItem(sSystemPath)
3075
                    objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
3076
                    SetListBoxItems(ListBox_Result, "Place Pipe.." & sUid & " (" & dOriginalStart_x & "," & dOriginalStart_y & ") - (" & dOriginalEnd_x & "," & dOriginalEnd_y & ")..." & _iPipecnt & " count ")
3077

    
3078
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & sUid)
3079
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
3080
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oLinerow(_XML_SYMBOL_Conn1_Uid).ToString())
3081
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oLinerow(_XML_SYMBOL_Conn2_Uid).ToString())
3082
                    'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
3083
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "StartPoint : " & dOriginalStart_x & "," & dOriginalStart_y)
3084
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "EndPoint : " & dOriginalEnd_x & "," & dOriginalEnd_y)
3085
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Pipe Count : " & _iPipecnt)
3086

    
3087
                    _iPipecnt = _iPipecnt + 1
3088
                    oLinerow(_XML_LINE_SPID) = objConnector.ModelItemID
3089
                    oLinerow(_XML_LINE_LMCONNECTOR) = objConnector
3090

    
3091
                    oLinerow(_XML_LINE_DRAWING_TF) = "TRUE"
3092
                    oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
3093

    
3094
                    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
3095
                    If oAttributeRow.Length > 0 Then
3096
                        For Each oAttribute In oAttributeRow
3097
                            Try
3098
                                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
3099
                                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
3100
                                If sPIDValue.Contains("'") Then
3101
                                    sPIDValue = sPIDValue.Replace("'", """")
3102
                                End If
3103
                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3104
                                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
3105
                            Catch ex As Exception
3106
                            End Try
3107
                        Next
3108
                        oPipeRun.Commit()
3109
                    End If
3110
                End If
3111

    
3112

    
3113

    
3114

    
3115

    
3116
                'Dim sPipeUid As String = oLinerow(_XML_LINE_UID).ToString()
3117
                'Dim sCheckModeling As Boolean = False
3118
                'objInputs.Clear()
3119
                'Dim oAddUid_List As New List(Of String)
3120
                'Try
3121
                '    Dim oAddPipeRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" + sPipeUid + "' and " &
3122
                '                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
3123
                '                                            _XML_SYMBOL_Check & "] = 'TRUE'")
3124
                '    If oAddPipeRow.Length = 0 Then
3125
                '        oAddPipeRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" + sPipeUid + "' and " &
3126
                '                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
3127
                '                                        _XML_SYMBOL_Check & "] = 'TRUE'")
3128
                '        sPipeUid = ""
3129
                '    Else
3130
                '        iConnType = 1
3131
                '        sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
3132
                '    End If
3133
                '    If oAddPipeRow.Length = 1 Then
3134
                '        sCheckModeling = True
3135
                '        If sPipeUid = "" Then
3136
                '            sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
3137
                '            iConnType = 2
3138
                '        End If
3139
                '        If AddUidList중복체크(oAddUid_List, sPipeUid) Then
3140
                '            oAddUid_List.Add(sPipeUid)
3141
                '        End If
3142
                '        sStartpoint = oAddPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
3143
                '        sEndpoint = oAddPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
3144
                '        ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
3145
                '        dStart_x = dOriginalStart_x
3146
                '        dStart_y = dOriginalStart_y
3147
                '        ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
3148
                '        dEnd_x = dOriginalEnd_x
3149
                '        dEnd_y = dOriginalEnd_y
3150
                '        ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
3151
                '        ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
3152
                '        Dim sBranchType As String = ""
3153
                '        If (CheckBranchLine(oLine_Dt, dStart_x, dStart_y, dEnd_x, dEnd_y, sBranchType, pLMConnector)) Then
3154
                '            Try
3155
                '                If pLMConnector Is Nothing Then
3156
                '                    objInputs.AddPoint(dStart_x, dStart_y)
3157
                '                    objInputs.AddPoint(dEnd_x, dEnd_y)
3158
                '                Else
3159
                '                    If sBranchType = "1" Then
3160
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
3161
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
3162
                '                    ElseIf sBranchType = "2" Then
3163
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
3164
                '                        objInputs.AddPoint(dStart_x, dStart_y)
3165
                '                    ElseIf sBranchType = "3" Then
3166
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
3167
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
3168
                '                    ElseIf sBranchType = "4" Then
3169
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
3170
                '                        objInputs.AddPoint(dStart_x, dStart_y)
3171
                '                    End If
3172
                '                End If
3173
                '            Catch ex As Exception
3174
                '            End Try
3175
                '        Else
3176
                '            objInputs.AddPoint(dStart_x, dStart_y)
3177
                '            objInputs.AddPoint(dEnd_x, dEnd_y)
3178
                '        End If
3179
                '        oAddPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
3180
                '    Else
3181
                '        Dim CheckTF As String = oLinerow(_XML_LINE_DRAWING_TF).ToString()
3182
                '        Dim CheckSelect As String = oLinerow(_XML_LINE_Check).ToString()
3183
                '        If CheckTF = "FALSE" And CheckSelect = "TRUE" Then
3184
                '            sPipeUid = oLinerow(_XML_LINE_UID).ToString()
3185
                '            oAddUid_List.Clear()
3186
                '            oAddUid_List.Add(sPipeUid)
3187
                '            sCheckModeling = True
3188
                '            sStartpoint = oLinerow(_XML_LINE_STARTPOINT).ToString()
3189
                '            sEndpoint = oLinerow(_XML_LINE_ENDPOINT).ToString()
3190
                '            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
3191
                '            dStart_x = dOriginalStart_x
3192
                '            dStart_y = dOriginalStart_y
3193
                '            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
3194
                '            dEnd_x = dOriginalEnd_x
3195
                '            dEnd_y = dOriginalEnd_y
3196
                '            ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
3197
                '            ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
3198
                '            Dim sBranchType As String = ""
3199
                '            If (CheckBranchLine(oLine_Dt, dStart_x, dStart_y, dEnd_x, dEnd_y, sBranchType, pLMConnector)) Then
3200
                '                Try
3201
                '                    If sBranchType = "1" Then
3202
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
3203
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
3204
                '                    ElseIf sBranchType = "2" Then
3205
                '                        objInputs.AddPoint(dStart_x, dStart_y)
3206
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
3207
                '                    ElseIf sBranchType = "3" Then
3208
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
3209
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
3210
                '                    ElseIf sBranchType = "4" Then
3211
                '                        objInputs.AddPoint(dStart_x, dStart_y)
3212
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
3213
                '                    End If
3214
                '                Catch ex As Exception
3215

    
3216
                '                End Try
3217
                '            Else
3218
                '                objInputs.AddPoint(dStart_x, dStart_y)
3219
                '                objInputs.AddPoint(dEnd_x, dEnd_y)
3220
                '            End If
3221
                '            oLinerow(_XML_LINE_DRAWING_TF) = "TRUE"
3222
                '        End If
3223
                '    End If
3224
                'Catch ex As Exception
3225
                'End Try
3226
                'If sCheckModeling Then
3227
                '    Dim sType As String = oLinerow(_XML_LINE_TYPE).ToString()
3228
                '    Dim sSystemPath As String = GetPipeType(sType)
3229
                '    objItem = _Placement.PIDCreateItem(sSystemPath)
3230
                '    objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
3231
                '    For i = 0 To oAddUid_List.Count - 1
3232
                '        Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + oAddUid_List(i) + "'")
3233
                '        If oUpdateRow.Length = 1 Then
3234
                '            oUpdateRow(0)(_XML_LINE_SPID) = objConnector.ModelItemID
3235
                '            oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = objConnector
3236
                '        End If
3237
                '    Next
3238

    
3239
                '    oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
3240
                '    oAddUid_List.Clear()
3241

    
3242
                '    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
3243
                '    If oAttributeRow.Length > 0 Then
3244
                '        For Each oAttribute In oAttributeRow
3245
                '            Try
3246
                '                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
3247
                '                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
3248
                '                If sPIDValue.Contains("'") Then
3249
                '                    sPIDValue = sPIDValue.Replace("'", """")
3250
                '                End If
3251
                '                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3252
                '                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
3253
                '            Catch ex As Exception
3254
                '            End Try
3255
                '        Next
3256
                '        oPipeRun.Commit()
3257
                '    End If
3258

    
3259
                '    If pLMConnector IsNot Nothing Then
3260
                '        Dim sID_1 As String = pLMConnector.ModelItemID
3261
                '        Dim sID_2 As String = objConnector.ModelItemID
3262
                '        Dim objSurvivorItem As LMAItem = Nothing
3263
                '        Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(sID_1)
3264
                '        Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(sID_2)
3265
                '        _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
3266
                '        '     oDatasource.CommitTransaction()
3267
                '        '_Placement.PIDAutoJoin(oPipeRun1.AsLMAItem, AutoJoinEndConstants.autoJoin_End, objSurvivorItem)
3268
                '        'oPipeRun1.Commit()
3269
                '        'oDatasource.CommitTransaction()
3270
                '        'objSurvivorItem = Nothing
3271
                '        '_Placement.PIDAutoJoin(oPipeRun2.AsLMAItem, AutoJoinEndConstants.autoJoin_Start, objSurvivorItem)
3272
                '        'oPipeRun2.Commit()
3273
                '        'oDatasource.CommitTransaction()
3274
                '    End If
3275
                '    sCheckModeling = False
3276
                '  End If
3277
            Next
3278
        Catch ex As Exception
3279
        End Try
3280
    End Sub
3281

    
3282

    
3283
    Private Sub SymbolModeling(ByVal CDrawing As Drawing, ByVal oLine_DT As DataTable, ByVal oSymbolRow As DataRow, ByVal oAttribute_Dt As DataTable,
3284
                               ByVal sLineNoText As String)
3285
        Try
3286

    
3287
            Dim sCheckModeling As String = oSymbolRow(_XML_SYMBOL_DRAWING_TF).ToString()
3288
            If sCheckModeling = "FALSE" Then
3289
                Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
3290
                Dim oSymbol As LMSymbol = Nothing
3291
                Dim sSPID As String = oSymbolRow(_XML_SYMBOL_SPID).ToString()
3292
                Dim sSystemPath As String = oSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
3293
                Dim oDatasource As Object = _Placement.PIDDataSource
3294
                Dim sSymbolCompType As String = oSymbolRow(_XML_SYMBOL_TYPE).ToString()
3295
                Dim dLocationX As Double = 0.0
3296
                Dim dLocationY As Double = 0.0
3297
                Dim dX As Double = 0.0
3298
                Dim dY As Double = 0.0
3299
                Dim sOriginalPoint As String = oSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
3300
                ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
3301
                dX = dLocationX
3302
                dY = dLocationY
3303
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
3304

    
3305
                Dim dAngle As Double = oSymbolRow(_XML_SYMBOL_ANGLE)
3306

    
3307

    
3308
                'Dim oDatarow() As DataRow = oLine_DT.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sSymbolUid & "'")
3309
                'If oDatarow.Length = 0 Then
3310
                '    oDatarow = oLine_DT.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sSymbolUid & "'")
3311
                'End If
3312
                'Dim dFix_X As Double = 0.0
3313
                'Dim dFix_Y As Double = 0.0
3314
                'If oDatarow.Length > 0 Then
3315
                '    If dAngle <> 0 Then
3316
                '        sOriginalPoint = oDatarow(0)(_XML_LINE_STARTPOINT).ToString()
3317
                '        ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
3318

    
3319
                '        ConvertPointByImage(dLocationX, dLocationY, _IMG_X, _IMG_Y)
3320
                '        dX = dLocationX
3321
                '    Else
3322
                '        sOriginalPoint = oDatarow(0)(_XML_LINE_STARTPOINT).ToString()
3323
                '        ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
3324
                '        ConvertPointByImage(dLocationX, dLocationY, _IMG_X, _IMG_Y)
3325
                '        dY = dLocationY
3326
                '    End If
3327

    
3328
                'End If
3329

    
3330

    
3331

    
3332
                oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY,, dAngle)
3333
                SetListBoxItems(ListBox_Result, "Place Fitting.." & sSymbolUid & " (" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
3334

    
3335
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Fitting : " & sSymbolUid)
3336
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
3337
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oSymbolRow(_XML_SYMBOL_Conn1_Uid).ToString())
3338
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oSymbolRow(_XML_SYMBOL_Conn2_Uid).ToString())
3339
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection3 : " & oSymbolRow(_XML_SYMBOL_Conn3_Uid).ToString())
3340
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection4 : " & oSymbolRow(_XML_SYMBOL_Conn4_Uid).ToString())
3341
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
3342
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
3343
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Fitting Count : " & _iFittingcnt)
3344

    
3345

    
3346
                _iFittingcnt = _iFittingcnt + 1
3347
                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
3348
                Dim oAttributeRow() As DataRow
3349
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sSymbolUid + "'")
3350
                If oAttribute_Dt.Rows.Count > 0 Then
3351

    
3352
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
3353
                        Dim oInstrument As LMInstrument
3354
                        oInstrument = oDatasource.GetInstrument(oSymbol.ModelItemID)
3355
                        Try
3356
                            If oAttributeRow.Length > 0 Then
3357
                                For Each oAttribute In oAttributeRow
3358
                                    Try
3359
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
3360
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
3361
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3362
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
3363
                                    Catch ex As Exception
3364
                                    End Try
3365
                                Next
3366
                                oInstrument.Commit()
3367
                            End If
3368
                        Catch ex As Exception
3369
                        End Try
3370
                    Else
3371
                        Try
3372
                            If oAttributeRow.Length > 0 And oSymbol IsNot Nothing Then
3373
                                For Each oAttribute In oAttributeRow
3374
                                    Try
3375
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
3376
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
3377

    
3378
                                        If sPIDAttribute = "SIZE" Then
3379

    
3380
                                            'Nominal diamter1,2속성이름뭔지 찾아봐야됨 (2018-07-20)
3381
                                            If sPIDValue.Contains("x") Then
3382
                                                Dim sSplitSize() As String = sPIDValue.Split("x")
3383
                                                If sSplitSize.Count > 1 Then
3384
                                                    'Connection Point와 연결되어 있는 라인을 가져와서 라인프로퍼티를 변경
3385
                                                    Dim oConnector_1 As LMConnector = Nothing
3386
                                                    Dim oConnector_2 As LMConnector = Nothing
3387
                                                    If oSymbol IsNot Nothing Then
3388
                                                        If oSymbol.Connect1Connectors.Count >= 1 Then
3389
                                                            For Each Tconnector In oSymbol.Connect1Connectors
3390
                                                                If Tconnector.ItemStatus = "Active" Then
3391
                                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
3392
                                                                        oConnector_1 = Tconnector
3393
                                                                    End If
3394
                                                                End If
3395
                                                            Next
3396
                                                        End If
3397
                                                        If oSymbol.Connect1Connectors.Count >= 1 Then
3398
                                                            For Each Tconnector In oSymbol.Connect1Connectors
3399
                                                                If Tconnector.ItemStatus = "Active" Then
3400
                                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
3401
                                                                        oConnector_2 = Tconnector
3402
                                                                    End If
3403
                                                                End If
3404
                                                            Next
3405
                                                        End If
3406
                                                    End If
3407
                                                    Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(oConnector_1.ModelItemID)
3408
                                                    Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(oConnector_2.ModelItemID)
3409
                                                    If dAngle = 3.14 Then
3410
                                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(1)
3411
                                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(0)
3412
                                                    Else
3413
                                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(0)
3414
                                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(1)
3415
                                                    End If
3416

    
3417

    
3418
                                                End If
3419

    
3420
                                            Else
3421
                                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3422
                                                oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
3423
                                            End If
3424
                                        Else
3425
                                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3426
                                            oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
3427
                                        End If
3428

    
3429
                                    Catch ex As Exception
3430
                                    End Try
3431
                                Next
3432
                                oSymbol.Commit()
3433
                            End If
3434
                        Catch ex As Exception
3435
                        End Try
3436
                    End If
3437
                End If
3438

    
3439

    
3440

    
3441
            End If
3442

    
3443

    
3444

    
3445
            'Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
3446
            'Dim sConnTypeNo As String = ""
3447
            '' Line과 연결되어있는 Symbol인지 확인
3448
            'Dim oLine_Dt As DataTable = GetPipeFromConnection(CDrawing, sSymbolUid, sConnTypeNo)
3449
            ''Symbol과 연결되어 있는 Symbol인지 확인
3450
            'Dim oSymbol_Dt As DataTable = GetSymbolFromConnection(CDrawing, sSymbolUid, sConnTypeNo)
3451
            'Dim oSymbol As LMSymbol = Nothing
3452
            'Dim sSPID As String = oSymbolRow(_XML_SYMBOL_SPID).ToString()
3453
            'Dim sSystemPath As String = oSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
3454
            'Dim oDatasource As Object = _Placement.PIDDataSource
3455
            'Dim sSymbolCompType As String = oSymbolRow(_XML_SYMBOL_TYPE).ToString()
3456

    
3457
            'Dim dAngle As Double = 0.0
3458
            'If IsNumeric(oSymbolRow(_XML_SYMBOL_ANGLE).ToString()) Then
3459
            '    dAngle = Double.Parse(oSymbolRow(_XML_SYMBOL_ANGLE).ToString())
3460
            'End If
3461

    
3462
            'Dim dLocationX As Double = 0.0
3463
            'Dim dLocationY As Double = 0.0
3464
            'Dim dX As Double = 0.0
3465
            'Dim dY As Double = 0.0
3466
            'Dim sOriginalPoint As String = oSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
3467
            'ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
3468
            'dX = dLocationX
3469
            'dY = dLocationY
3470
            'ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
3471
            'Dim bCheckModeling As Boolean = False
3472

    
3473
            'If oLine_Dt.Rows.Count > 0 Then
3474

    
3475
            '    If sSPID <> "" Then
3476
            '        Dim dX1 As Double = 0
3477
            '        Dim dX2 As Double = 0
3478
            '        Dim dY1 As Double = 0
3479
            '        Dim dY2 As Double = 0
3480
            '        Dim oLMSymbol As LMSymbol = oDatasource.GetSymbol(sSPID)
3481
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
3482
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
3483

    
3484
            '        Dim dCalcPoint As Double = -1
3485
            '        Dim dModeling_X As Double = 0
3486
            '        Dim dModeling_Y As Double = 0
3487
            '        If dX1 <> 0 And dY1 <> 0 Then
3488
            '            dCalcPoint = Math.Abs(dX1 - dX) + Math.Abs(dY1 - dY)
3489
            '            dModeling_X = dX1
3490
            '            dModeling_Y = dY1
3491
            '        End If
3492
            '        If dX2 <> 0 And dY2 <> 0 Then
3493

    
3494
            '            If (Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY) > dCalcPoint) Then
3495
            '                dCalcPoint = Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY)
3496
            '                dModeling_X = dX2
3497
            '                dModeling_Y = dY2
3498
            '            End If
3499
            '        End If
3500

    
3501

    
3502

    
3503
            '        If dModeling_X <> 0 And dModeling_Y <> 0 Then
3504
            '            oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dModeling_X, dModeling_Y,, dAngle, ExistingItem:=oLMSymbol.AsLMAItem,
3505
            '                TargetItem:=oLMSymbol.AsLMRepresentation)
3506
            '            bCheckModeling = True
3507
            '        End If
3508

    
3509

    
3510
            '    End If
3511
            'End If
3512
            'If oSymbol_Dt.Rows.Count > 0 Then
3513
            '    If sSPID <> "" Then
3514
            '        Dim dX1 As Double = 0
3515
            '        Dim dX2 As Double = 0
3516
            '        Dim dX3 As Double = 0
3517
            '        Dim dX4 As Double = 0
3518
            '        Dim dY1 As Double = 0
3519
            '        Dim dY2 As Double = 0
3520
            '        Dim dY3 As Double = 0
3521
            '        Dim dY4 As Double = 0
3522
            '        Dim oLMSymbol As LMSymbol = oDatasource.GetSymbol(sSPID)
3523
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
3524
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
3525
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 3, dX3, dY3)
3526
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 4, dX4, dY4)
3527

    
3528
            '        Dim dCalcPoint As Double = -1
3529
            '        Dim dModeling_X As Double = 0
3530
            '        Dim dModeling_Y As Double = 0
3531
            '        If dX1 <> 0 And dY1 <> 0 Then
3532
            '            dCalcPoint = Math.Abs(dX1 - dX) + Math.Abs(dY1 - dY)
3533
            '            dModeling_X = dX1
3534
            '            dModeling_Y = dY1
3535
            '        End If
3536
            '        If dX2 <> 0 And dY2 <> 0 Then
3537

    
3538
            '            If (Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY) > dCalcPoint) Then
3539
            '                dCalcPoint = Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY)
3540
            '                dModeling_X = dX2
3541
            '                dModeling_Y = dY2
3542
            '            End If
3543
            '        End If
3544
            '        If dX3 <> 0 And dY3 <> 0 Then
3545
            '            If (Math.Abs(dX3 - dX) + Math.Abs(dY3 - dY) > dCalcPoint) Then
3546
            '                dCalcPoint = Math.Abs(dX3 - dX) + Math.Abs(dY3 - dY)
3547
            '                dModeling_X = dX3
3548
            '                dModeling_Y = dY3
3549
            '            End If
3550
            '        End If
3551
            '        If dX4 <> 0 And dY4 <> 0 Then
3552
            '            If (Math.Abs(dX4 - dX) + Math.Abs(dY4 - dY) > dCalcPoint) Then
3553
            '                dCalcPoint = Math.Abs(dX4 - dX) + Math.Abs(dY4 - dY)
3554
            '                dModeling_X = dX4
3555
            '                dModeling_Y = dY4
3556
            '            End If
3557
            '        End If
3558
            '        If dModeling_X <> 0 And dModeling_Y <> 0 Then
3559
            '            oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dModeling_X, dModeling_Y,, dAngle, ExistingItem:=oLMSymbol.AsLMAItem,
3560
            '                TargetItem:=oLMSymbol.AsLMRepresentation)
3561
            '            bCheckModeling = True
3562
            '        End If
3563

    
3564

    
3565
            '    End If
3566

    
3567
            'End If
3568

    
3569
            'If (oLine_Dt.Rows.Count = 0 And oSymbol_Dt.Rows.Count = 0) Or bCheckModeling = False Then
3570
            '    oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
3571
            '    SetListBoxItems(ListBox_Result, "Place Fittings..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
3572
            '    _iFittingcnt = _iFittingcnt + 1
3573
            'End If
3574
            'Dim oAttributeRow() As DataRow
3575
            'oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sSymbolUid + "'")
3576
            'If oAttribute_Dt.Rows.Count > 0 Then
3577

    
3578
            '    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
3579
            '        Dim oInstrument As LMInstrument
3580
            '        oInstrument = oDatasource.GetInstrument(oSymbol.ModelItemID)
3581
            '        Try
3582
            '            If oAttributeRow.Length > 0 Then
3583
            '                For Each oAttribute In oAttributeRow
3584
            '                    Try
3585
            '                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
3586
            '                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
3587
            '                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3588
            '                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
3589
            '                    Catch ex As Exception
3590
            '                    End Try
3591
            '                Next
3592
            '                oInstrument.Commit()
3593
            '            End If
3594
            '        Catch ex As Exception
3595
            '        End Try
3596
            '    Else
3597
            '        Try
3598
            '            If oAttributeRow.Length > 0 And oSymbol IsNot Nothing Then
3599
            '                For Each oAttribute In oAttributeRow
3600
            '                    Try
3601
            '                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
3602
            '                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
3603

    
3604
            '                        If sPIDAttribute = "SIZE" Then
3605

    
3606
            '                            'Nominal diamter1,2속성이름뭔지 찾아봐야됨 (2018-07-20)
3607
            '                            If sPIDValue.Contains("x") Then
3608
            '                                Dim sSplitSize() As String = sPIDValue.Split("x")
3609
            '                                If sSplitSize.Count > 1 Then
3610
            '                                    'Connection Point와 연결되어 있는 라인을 가져와서 라인프로퍼티를 변경
3611
            '                                    Dim oConnector_1 As LMConnector = Nothing
3612
            '                                    Dim oConnector_2 As LMConnector = Nothing
3613
            '                                    If oSymbol IsNot Nothing Then
3614
            '                                        If oSymbol.Connect1Connectors.Count >= 1 Then
3615
            '                                            For Each Tconnector In oSymbol.Connect1Connectors
3616
            '                                                If Tconnector.ItemStatus = "Active" Then
3617
            '                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
3618
            '                                                        oConnector_1 = Tconnector
3619
            '                                                    End If
3620
            '                                                End If
3621
            '                                            Next
3622
            '                                        End If
3623
            '                                        If oSymbol.Connect1Connectors.Count >= 1 Then
3624
            '                                            For Each Tconnector In oSymbol.Connect1Connectors
3625
            '                                                If Tconnector.ItemStatus = "Active" Then
3626
            '                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
3627
            '                                                        oConnector_2 = Tconnector
3628
            '                                                    End If
3629
            '                                                End If
3630
            '                                            Next
3631
            '                                        End If
3632
            '                                    End If
3633
            '                                    Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(oConnector_1.ModelItemID)
3634
            '                                    Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(oConnector_2.ModelItemID)
3635
            '                                    If dAngle = 3.14 Then
3636
            '                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(1)
3637
            '                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(0)
3638
            '                                    Else
3639
            '                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(0)
3640
            '                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(1)
3641
            '                                    End If
3642

    
3643

    
3644
            '                                End If
3645

    
3646
            '                            Else
3647
            '                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3648
            '                                oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
3649
            '                            End If
3650
            '                        Else
3651
            '                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
3652
            '                            oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
3653
            '                        End If
3654

    
3655
            '                    Catch ex As Exception
3656
            '                    End Try
3657
            '                Next
3658
            '                oSymbol.Commit()
3659
            '            End If
3660
            '        Catch ex As Exception
3661
            '        End Try
3662
            '    End If
3663
            'End If
3664
        Catch ex As Exception
3665
        End Try
3666
    End Sub
3667

    
3668
    Private Function AutoModeling() As Boolean
3669
        Try
3670
            '_AllLine_DT = Line_Dt()
3671
            '_AllSymbol_DT = Symbol_Dt()
3672
            _ModelingLine_Dt = Line_Dt()
3673
            _ModelingSymbol_Dt = Symbol_Dt()
3674
            _CompleteConvert = False
3675
            Label_Progress.Text = "0%"
3676
            SetListBoxItems(ListBox_Result, " Auto converting 시작....")
3677
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 시작....")
3678
            Dim oDwg_Dt As DataTable = LoadAllDrawing()
3679
            _Log_File = "AutoConverting_" + DateTime.Now.ToString("yyyyMMdd") + "_" + DateTime.Now.ToString("HHmmss")
3680
            _allItem = GetAllCheckNodeCount()
3681
            _Itemcnt = 0
3682
            '1.Equipment
3683
            '2.Piping OPC
3684
            '3.OPC 시작되는 Line
3685

    
3686
            'InitAutoRouting()
3687
            'EquipmentModeling(oDwg_Dt)
3688
            'PipingModeling()
3689

    
3690
            '' 1. Primary Line만 먼저 그림
3691
            'PrimaryPipeModeling()
3692
            '' 2. Draw Symbols Prinmary에 붙는 Symbol만 / Reducer 제외
3693
            'PrimarySymbolModeling()
3694

    
3695
            ''
3696
            Dim auto As AutoModeling = New AutoModeling(_DrawingsList(0), ListBox_Result)
3697
            auto.StartModeling()
3698

    
3699

    
3700

    
3701

    
3702
            '   PipeLine_Fitting_Modeling()
3703

    
3704
            SetProgressbar(ProgressBar_Status, 100)
3705
            Label_Progress.Text = "100%"
3706
            SetListBoxItems(ListBox_Result, " Auto converting 완료")
3707
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 완료")
3708
            _CompleteConvert = True
3709
            Return True
3710
        Catch ex As Exception
3711
            Return False
3712
        End Try
3713
    End Function
3714

    
3715
    Private Sub ThreadConvert()
3716
        If _DrawingsList IsNot Nothing Then
3717
            If _DrawingsList.Count > 0 Then
3718
                'TestBranchLine()
3719
                AutoModeling()
3720
            End If
3721
        End If
3722
    End Sub
3723

    
3724
    Private Sub ThreadOPCRemove()
3725
        While _CompleteConvert = False
3726
            Dim oFindOPC As New FindOpc
3727
            oFindOPC.RemoveOPCDlg()
3728
        End While
3729

    
3730
    End Sub
3731

    
3732
    Private Function OpenDrawing(ByVal oDt As DataTable, ByVal sDwgName As String) As String
3733
        Dim oRows As DataRow() = oDt.Select("[Name] = '" & sDwgName & "'")
3734
        Dim oPath As String = ""
3735
        If oRows.Length > 0 Then
3736
            oPath = oRows(0).Item("Path").ToString()
3737
        End If
3738
        Return oPath
3739
    End Function
3740

    
3741
    Private Sub LoadXmlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LoadXmlToolStripMenuItem.Click
3742

    
3743
        If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
3744
            LoadDB()
3745
            LoadXmlItem(FolderBrowserDialog1.SelectedPath)
3746
        End If
3747
    End Sub
3748
    Private Sub LoadXmlItem(ByVal sFolderPath As String)
3749
        _DrawingsList = New List(Of Drawing)
3750
        Dim sfileEntries As String() = Directory.GetFiles(sFolderPath)
3751
        If Tree_Result.Nodes.Count > 0 Then
3752
            Tree_Result.Nodes(0).Nodes.Clear()
3753
            For Each sfileName In sfileEntries
3754
                Dim sExtension As String = Path.GetExtension(sfileName)
3755
                If sExtension = ".xml" Then
3756
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(sfileName)
3757
                    Dim sDwgPath As String = sfileName
3758
                    Dim oNode As TreeNode = Tree_Result.Nodes(0).Nodes.Add(sDwgPath, sDwgName, 15)
3759
                    Dim oDwg As Drawing = AddSymbolItem(sDwgPath, oNode)
3760

    
3761
                    _DrawingsList.Add(oDwg)
3762
                End If
3763
            Next
3764
            Tree_Result.Nodes(0).Expand()
3765
        End If
3766
    End Sub
3767

    
3768
    Private Sub GenerateRelation(ByRef oDwg_Ds As Drawing)
3769
        Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
3770
        Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
3771
        Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
3772
        Dim oRelation As New GenerateRelation()
3773
        For Each oLinelist In oLineLists
3774
            oRelation.CalcLineConnectionItem_Equal(oLinelist.Dt_Line, oLineLists)
3775
            oRelation.CalcLineConnectionItem_NonEqual(oLinelist.Dt_Line, oLineLists)
3776
            oRelation.CalcSymbolConnectionItem_Equal(oLinelist.Dt_Symbol, oLineLists)
3777
            oRelation.CalcSymbolConnectionItem_NonEqual(oLinelist.Dt_Symbol, oLineLists)
3778
        Next
3779
    End Sub
3780

    
3781
    Private Sub SetSymbol_LineNumberByUID(ByVal symbols As List(Of Symbol), ByVal lineNumber As LineNumber, ByVal uid As String)
3782
        For Each symbol As Symbol In symbols
3783
            If symbol.UID = uid Then
3784
                symbol.LINENUMBER = lineNumber
3785
                Exit For
3786
            End If
3787
        Next
3788
    End Sub
3789

    
3790
    Private Sub SetLine_LineNumberByUID(ByVal lines As List(Of Line), ByVal lineNumber As LineNumber, ByVal uid As String)
3791
        For Each line As Line In lines
3792
            If line.UID = uid Then
3793
                line.LINENUMBER = lineNumber
3794
                Exit For
3795
            End If
3796
        Next
3797
    End Sub
3798

    
3799
    ''' <summary>
3800
    '''  XML Tree 구조 생성 
3801
    ''' </summary>
3802
    ''' <param name="sDwgPath"></param>
3803
    Private Function AddSymbolItem(ByVal sDwgPath As String, ByVal oParentNode As TreeNode) As Drawing
3804
        Dim oDwg_Ds As Drawing = LoadSymbolInXml(sDwgPath)
3805

    
3806
        If oDwg_Ds IsNot Nothing Then
3807

    
3808
            Dim oLineNos As List(Of LineNumber) = oDwg_Ds.LINENUMBERS
3809

    
3810
            Dim oTrimLines As List(Of LineNumber) = oDwg_Ds.TRIMLINES
3811

    
3812
            Dim oSymbols As List(Of Symbol) = oDwg_Ds.SYMBOLS
3813

    
3814
            Dim oLines As List(Of Line) = oDwg_Ds.LINES
3815

    
3816
            '' TreeView 구성 및 하위 아이템 상위 구성
3817
            ' LIne Number
3818
            For Each lineNo As LineNumber In oLineNos
3819
                Dim node As TreeNode = New TreeNode(lineNo.TEXT)
3820
                node.Name = lineNo.UID
3821
                node.Tag = lineNo
3822

    
3823
                oParentNode.Nodes.Add(node)
3824

    
3825
                For Each uid In lineNo.SYMBOLRUNITEMS
3826
                    SetSymbol_LineNumberByUID(oSymbols, lineNo, uid)
3827
                Next
3828

    
3829
                For Each uid In lineNo.LINERUNITEMS
3830
                    SetLine_LineNumberByUID(oLines, lineNo, uid)
3831
                Next
3832
            Next
3833

    
3834
            ' Trim Line
3835
            For index = 0 To oTrimLines.Count - 1
3836
                Dim trimLine As LineNumber = oTrimLines(index)
3837

    
3838
                Dim node As TreeNode = New TreeNode("TrimLine" + index.ToString)
3839
                node.Name = trimLine.UID
3840
                node.Tag = trimLine
3841

    
3842
                oParentNode.Nodes.Add(node)
3843

    
3844
                For Each uid In trimLine.SYMBOLRUNITEMS
3845
                    SetSymbol_LineNumberByUID(oSymbols, trimLine, uid)
3846
                Next
3847

    
3848
                For Each uid In trimLine.LINERUNITEMS
3849
                    SetLine_LineNumberByUID(oLines, trimLine, uid)
3850
                Next
3851
            Next
3852
            ' symbol
3853
            For Each symbol As Symbol In oSymbols
3854

    
3855
                Dim node As TreeNode = New TreeNode(symbol.PARENT)
3856
                node.Name = symbol.UID
3857
                node.Tag = symbol
3858

    
3859
                If symbol.SPPIDMAPPINGNAME = "" Then
3860
                    node.ForeColor = Color.Red
3861
                End If
3862

    
3863
                If symbol.LINENUMBER IsNot Nothing Then
3864
                    Dim nodeIndex As Integer = oParentNode.Nodes.IndexOfKey(symbol.LINENUMBER.UID)
3865
                    oParentNode.Nodes.Item(nodeIndex).Nodes.Add(node)
3866
                Else
3867
                    oParentNode.Nodes.Add(node)
3868
                End If
3869
            Next
3870
            ' line
3871
            For Each line As Line In oLines
3872

    
3873
                Dim node As TreeNode = New TreeNode(line.TYPE)
3874
                node.Name = line.UID
3875
                node.Tag = line
3876

    
3877
                If line.LINENUMBER IsNot Nothing Then
3878
                    Dim nodeIndex As Integer = oParentNode.Nodes.IndexOfKey(line.LINENUMBER.UID)
3879
                    oParentNode.Nodes.Item(nodeIndex).Nodes.Add(node)
3880
                Else
3881
                    oParentNode.Nodes.Add(node)
3882
                End If
3883

    
3884
                For index = 0 To 1
3885
                    If line.CONNECTORS(index).CONNECTEDITEM = line.UID Then
3886
                        Console.WriteLine("")
3887
                    End If
3888
                Next
3889
            Next
3890

    
3891
        End If
3892

    
3893
        Return oDwg_Ds
3894
    End Function
3895
    Private Sub Tree_Result_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles Tree_Result.AfterCheck
3896
        If e.Node.Checked = True Then
3897
            For Each oNode As TreeNode In e.Node.Nodes
3898
                oNode.Checked = True
3899
            Next
3900
        Else
3901
            For Each oNode As TreeNode In e.Node.Nodes
3902
                oNode.Checked = False
3903
            Next
3904
        End If
3905
    End Sub
3906

    
3907
    Private Sub Btn_Setting_Click(sender As Object, e As EventArgs) Handles Btn_Setting.Click
3908
        Dim oSettings As Settings = New Settings()
3909
        oSettings.ShowDialog()
3910
    End Sub
3911

    
3912

    
3913
    Private Sub TestBranchLine()
3914
        Dim objPlacement As Placement
3915
        objPlacement = New Placement
3916
        Dim PipeRunLocation As String
3917
        Dim objItem As LMAItem
3918
        Dim objConnector As LMConnector
3919
        Dim objInputs As PlaceRunInputs
3920
        Dim objSymbol As LMSymbol
3921
        Dim ValveLocation As String
3922
        PipeRunLocation = "\Piping\Routing\Process Lines\Primary Piping.sym"
3923
        objInputs = New PlaceRunInputs
3924
        objInputs.AddPoint(0.1, 0.1)
3925
        objInputs.AddPoint(0.2, 0.1)
3926
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
3927
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
3928
        ValveLocation = "\Piping\Valves\2 Way Common\Ball Valve.sym"
3929
        objSymbol = objPlacement.PIDPlaceSymbol(ValveLocation, 0.15, 0.3, , 1.57)
3930
        objInputs = New PlaceRunInputs
3931
        objInputs.AddConnectorTarget(objConnector, 0.15, 0.1)
3932
        '   objInputs.AddConnectorTarget(objConnector, 0.12, 0.1)
3933
        objInputs.AddPoint(0.15, 0.15)
3934
        objInputs.AddPoint(0.12, 0.15)
3935
        objInputs.AddPoint(0.12, 0.2)
3936
        objInputs.AddPoint(0.15, 0.2)
3937
        objInputs.AddSymbolTarget(objSymbol, 0.15, 0.3)
3938
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
3939
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
3940

    
3941
        objInputs = New PlaceRunInputs
3942
        objInputs.AddConnectorTarget(objConnector, 0.17, 0.1)
3943
        objInputs.AddPoint(0.17, 0.15)
3944
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
3945
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
3946

    
3947
        objInputs = New PlaceRunInputs
3948
        objInputs.AddConnectorTarget(objConnector, 0.19, 0.1)
3949
        objInputs.AddPoint(0.19, 0.15)
3950
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
3951
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
3952

    
3953
        objInputs = New PlaceRunInputs
3954
        objInputs.AddConnectorTarget(objConnector, 0.12, 0.1)
3955
        objInputs.AddPoint(0.12, 0.15)
3956
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
3957
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
3958
    End Sub
3959

    
3960
    Private Sub Btn_TestNozzle_Click(sender As Object, e As EventArgs) Handles Btn_TestNozzle.Click
3961

    
3962
        Dim sVessel_ID As String = "841D5E640AE5421B9A017DDC2E87FF11"
3963
        Dim objVessel As LMVessel
3964
        objVessel = _Placement.PIDDataSource.GetVessel(sVessel_ID)
3965
        Dim oVesselLocation As LMLocations = objVessel.Locations
3966
        Dim symVessel As LMSymbol = _Placement.PIDDataSource.GetSymbol(objVessel.Representations.Nth(1).Id)
3967
        Dim XCoordinate As String = symVessel.Attributes("XCoordinate").Value
3968
        Dim YCoordinate As String = symVessel.Attributes("YCoordinate").Value
3969
        symVessel.Attributes("XCoordinate").Value = XCoordinate + 0.01
3970
        symVessel.Attributes("YCoordinate").Value = YCoordinate + 0.01
3971
        symVessel.Commit()
3972
        Dim sValve_ID As String = "DB7B0CA8A2664A6BA7A9615764BA62B0"
3973
        Dim objValve As LMSymbol
3974
        Dim objValves As LMPipingComp = _Placement.PIDDataSource.GetPipingComp(sValve_ID)
3975
        objValve = _Placement.PIDDataSource.GetSymbol(objValves.Representations.Nth(1).Id)
3976
        objValve.Commit()
3977
        Dim dVesselX As Double = XCoordinate
3978
        Dim dVesselY As Double = YCoordinate
3979
        Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
3980

    
3981
        _Placement.PIDConnectPointLocation(objValve, 1, X1, Y1)
3982

    
3983
        _Placement.PIDConnectPointLocation(objValve, 2, X2, Y2)
3984

    
3985
        Dim nozzlename As String = "\Equipment Components\Nozzles\Flanged Nozzle.sym"
3986
        Dim dCalc_x As Double = 0
3987
        Dim dCalc_y As Double = 0
3988

    
3989
        If dVesselX - X2 > 0 Then
3990
            dCalc_x = dVesselX - (dVesselX - X2)
3991
        Else
3992
            dCalc_x = dVesselX + (X2 - dVesselX)
3993
        End If
3994
        If dVesselY - Y2 > 0 Then
3995
            dCalc_y = dVesselY - (dVesselY - Y2)
3996
        Else
3997
            dCalc_y = dVesselY + (Y2 - dVesselY)
3998
        End If
3999

    
4000
        Dim objNozzle As LMSymbol = _Placement.PIDPlaceSymbol(nozzlename, dCalc_x, dCalc_y,
4001
            TargetItem:=symVessel.AsLMRepresentation)
4002

    
4003
        Dim blnSuccess As Boolean = _Placement.PIDConnectPointLocation(objNozzle, 1, X1, Y1)
4004
        blnSuccess = _Placement.PIDConnectPointLocation(objNozzle, 2, X1, Y1)
4005

    
4006
        objValve = _Placement.PIDPlaceSymbol(objValve.FileName, X1, Y1, ExistingItem:=objValve.AsLMAItem,
4007
          TargetItem:=objNozzle.AsLMRepresentation)
4008

    
4009

    
4010

    
4011
    End Sub
4012

    
4013
    Private Sub Btn_SymbolLibrary_Click(sender As Object, e As EventArgs) Handles Btn_SymbolLibrary.Click
4014
        Dim oMapping As New Mapping(_PIDSymbol_DB)
4015
        oMapping.Show()
4016
    End Sub
4017

    
4018
    Private Sub Btn_Stop_Click(sender As Object, e As EventArgs) Handles Btn_Stop.Click
4019
        Try
4020
            SetListBoxItems(ListBox_Result, " Auto converting 중지....")
4021
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 중지....")
4022
            _Main_trd.Abort()
4023
            _Opc_trd.Abort()
4024
        Catch ex As Exception
4025

    
4026
        End Try
4027
    End Sub
4028

    
4029
    Private Sub AutoCheckTreeNode(ByVal iType As Integer, ByVal bCheck As Boolean)
4030

    
4031
        For Each oDrwing As TreeNode In Tree_Result.Nodes
4032
            For Each oDwgNode As TreeNode In oDrwing.Nodes
4033
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
4034
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
4035
                If CDrawing IsNot Nothing Then
4036
                    Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
4037
                    Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
4038
                    For Each oNode As TreeNode In oDwgNode.Nodes
4039
                        Dim iItemcnt As Integer = 0
4040
                        Dim sNodeUid As String = oNode.Name
4041
                        Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
4042

    
4043
                        If iType = 0 Then 'Symbol
4044
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
4045
                            If CLineNo IsNot Nothing Then
4046
                                Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
4047
                                For Each oSymbolRow In oSymbol_Dt.Rows
4048
                                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
4049
                                    For Each oSymbolNode As TreeNode In oNode.Nodes
4050
                                        Dim sSymbolNodeUid As String = oSymbolNode.Name
4051
                                        If sSymbolNodeUid = sSymbolUid Then
4052
                                            oSymbolNode.Checked = bCheck
4053
                                            Exit For
4054
                                        End If
4055
                                    Next
4056
                                Next
4057
                            End If
4058
                            Dim TrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
4059
                            If TrimLineNo IsNot Nothing Then
4060
                                Dim oSymbol_Dt As DataTable = TrimLineNo.Dt_Symbol
4061
                                For Each oSymbolRow In oSymbol_Dt.Rows
4062
                                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
4063
                                    For Each oSymbolNode As TreeNode In oNode.Nodes
4064
                                        Dim sSymbolNodeUid As String = oSymbolNode.Name
4065
                                        If sSymbolNodeUid = sSymbolUid Then
4066
                                            oSymbolNode.Checked = bCheck
4067
                                            Exit For
4068
                                        End If
4069
                                    Next
4070
                                Next
4071
                            End If
4072
                        End If
4073
                        If iType = 1 Then 'Line
4074
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
4075
                            If CLineNo IsNot Nothing Then
4076
                                Dim oLine_Dt As DataTable = CLineNo.Dt_Line
4077
                                For Each oLineRow In oLine_Dt.Rows
4078
                                    Dim sLineUid As String = oLineRow(_XML_LINE_UID).ToString()
4079
                                    For Each oLineNode As TreeNode In oNode.Nodes
4080
                                        Dim sLineNodeUid As String = oLineNode.Name
4081
                                        If sLineNodeUid = sLineUid Then
4082
                                            oLineNode.Checked = bCheck
4083
                                            Exit For
4084
                                        End If
4085
                                    Next
4086
                                Next
4087
                            End If
4088
                            Dim TrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
4089
                            If TrimLineNo IsNot Nothing Then
4090
                                Dim oLine_Dt As DataTable = TrimLineNo.Dt_Line
4091
                                For Each oLineRow In oLine_Dt.Rows
4092
                                    Dim sLineUid As String = oLineRow(_XML_SYMBOL_UID).ToString()
4093
                                    For Each oLineNode As TreeNode In oNode.Nodes
4094
                                        Dim sLineNodeUid As String = oLineNode.Name
4095
                                        If sLineNodeUid = sLineUid Then
4096
                                            oLineNode.Checked = bCheck
4097
                                            Exit For
4098
                                        End If
4099
                                    Next
4100
                                Next
4101
                            End If
4102
                        End If
4103
                        If iType = 2 Then 'Equipment
4104
                            Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
4105
                            If CEqpNo IsNot Nothing Then
4106
                                Dim oEqp_Dt As DataTable = CEqpNo.Dt_Equipment
4107
                                For Each oEqpRow In oEqp_Dt.Rows
4108
                                    Dim sEqpUid As String = oEqpRow(_XML_LINE_UID).ToString()
4109
                                    For Each oEqpNode As TreeNode In oNode.Nodes
4110
                                        Dim sEqpNodeUid As String = oEqpNode.Name
4111
                                        If sEqpNodeUid = sEqpUid Then
4112
                                            oEqpNode.Checked = bCheck
4113
                                            Exit For
4114
                                        End If
4115
                                    Next
4116
                                Next
4117
                            End If
4118
                        End If
4119
                    Next
4120
                End If
4121
            Next
4122
        Next
4123

    
4124

    
4125
    End Sub
4126

    
4127

    
4128

    
4129
    Private Sub Chk_Symbol_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Symbol.CheckedChanged
4130
        AutoCheckTreeNode(0, Chk_Symbol.Checked)
4131
    End Sub
4132

    
4133
    Private Sub Chk_Line_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Line.CheckedChanged
4134
        AutoCheckTreeNode(1, Chk_Line.Checked)
4135
    End Sub
4136

    
4137
    Private Sub Chk_Equipment_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Equipment.CheckedChanged
4138
        AutoCheckTreeNode(2, Chk_Equipment.Checked)
4139
    End Sub
4140
End Class
4141

    
4142

    
4143
Public Class DrawingInfo
4144
    Public mDrawingName As String
4145
    Public mSpID As String
4146
    Public mPath As String
4147
End Class