프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / SPPIDConverter / Main.vb @ 79326880

이력 | 보기 | 이력해설 | 다운로드 (310 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

    
12
    'Dim _Mapping_DB As DataTable = New DataTable()
13
    Dim _Mapping_DB As DataSet = New DataSet()
14
    Dim _Attribute_DB As DataTable = New DataTable()
15
    Dim _PIDSymbol_DB As DataTable = New DataTable()
16
    Dim _ResultModeling_DT As DataTable = New DataTable()
17

    
18
    Dim _AllLine_DT As New DataTable()
19
    Dim _AllSymbol_DT As New DataTable()
20

    
21
    Dim _ModelingLine_Dt As New DataTable()
22

    
23
    Dim _Placement As New Placement
24
    Dim _DWG_X = 0.875 '0.695 '1 '
25
    Dim _DWG_Y = 0.617 '0.585 '0.8 '
26
    'Dim _DWG_X = 0.842 '0.695 '1 '
27
    'Dim _DWG_Y = 0.614 '0.585 '0.8 '
28
    Dim _IMG_X = 0
29
    Dim _IMG_Y = 0
30

    
31
    Dim _Unit As String
32

    
33
    'Drawing 전역변수
34
    Dim _objPIDADrawing As Object
35
    '현재선택한 폴더경로
36
    Dim _selectFolderPath As String
37

    
38
    Private _Main_trd As Thread
39
    Private _Opc_trd As Thread
40

    
41
    Private _CompleteConvert As Boolean = False
42

    
43
    Private _DrawingsList As List(Of Drawing)
44

    
45

    
46
    Private _iPipeLineNocnt As Integer
47
    Private _iPipecnt As Integer
48
    Private _iFittingcnt As Integer
49
    Private _iValvecnt As Integer
50
    Private _iInstrumentcnt As Integer
51
    Private _iEquipmentcnt As Integer
52
    Private _iNozzlecnt As Integer
53
    Private _iPipintOpccnt As Integer
54

    
55
    Private _allItem As Integer
56
    Private _Itemcnt As Integer
57

    
58
    Dim _Gembox As New CGembox()
59
    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
60
        LoadDB()
61
    End Sub
62

    
63
    Private Sub LoadDB()
64
        If My.Settings.DBPath <> "" And My.Settings.Plant_Hierarchy <> "" Then
65
            Dim sDBPath As String = My.Settings.DBPath
66

    
67
            _Gembox.isLoadFile(My.Settings.SymbolLibrary)
68
            _Mapping_DB = _Gembox.LoadFileFunc()
69
            _Attribute_DB = Load_DB(sDBPath, _DB_TABLE_ATTRIBUTE)
70
            _PIDSymbol_DB = Load_DB(sDBPath, _DB_TABLE_SYMBOLNAME)
71
            _ResultModeling_DT = ModelingResult_Dt()
72
        Else
73
            MessageBox.Show("설정값을 먼저 확인해주세요")
74
        End If
75
    End Sub
76

    
77

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

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

    
112

    
113

    
114
    Private Function LoadSymbolInXml(ByVal sXmlPath As String) As Drawing
115
        Try
116
            ''  _TempSymbolDt = Symbol_Dt()
117
            Dim CDrawing As Drawing = New Drawing()
118
            Dim oDt As DataTable = LoadSymbol_DT()
119
            Dim oElement As XElement = XElement.Load(sXmlPath)
120

    
121
            If oElement IsNot Nothing Then
122
                CDrawing.DwgName = oElement.Element(_XML_DWGNAME).Value
123
                CDrawing.Size = oElement.Element(_XML_DWGSIZE).Value
124
                SplitLocation(CDrawing.Size, _IMG_X, _IMG_Y)
125
                CDrawing.Unit = oElement.Element(_XML_UNIT).Value
126

    
127
                Dim oLineno_list As New List(Of Line_no)
128
                Dim oEqp_list As New List(Of Eqp_no)
129
                Dim oTrim_Lineno_list As New List(Of Line_no)
130
                oLineno_list = LoadLineNo(oElement, _XML_CATEGORY_LINENO)
131
                For Each oEqpNo As Object In oElement.Elements(_XML_CATEGORY_EQUIPMENT)
132
                    Dim CEqp_no As Eqp_no = New Eqp_no()
133
                    Dim oSymbol_Dt As DataTable = Symbol_Dt()
134
                    Dim oAttribute_Dt As DataTable = Attribute_Dt()
135
                    Dim sUid As String = ""
136
                    For Each oSymbol As Object In oEqpNo.Elements(_XML_CATEGORY_SYMBOL)
137
                        Try
138
                            Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
139
                            Dim oEleObj As XElement
140
                            Dim sName As String
141
                            Dim sLocation As String
142
                            Dim sSize As String
143
                            Dim sAngle As String
144
                            Dim sOriginalPoint As String = ""
145
                            Dim sConnectionPoint As String = ""
146
                            Dim sConnectionUids As String = ""
147
                            Dim sConnArray As String()
148
                            Dim sConnPointArray As String()
149

    
150
                            oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
151
                            sUid = oEleObj.Value
152
                            oEleObj = oSymbol.Element(_XML_SYMBOL_NAME)
153
                            sName = oEleObj.Value
154
                            oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
155
                            sLocation = oEleObj.Value
156
                            oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
157
                            sSize = oEleObj.Value
158
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
159
                            sAngle = oEleObj.Value
160
                            oEleObj = oSymbol.Element(_XML_SYMBOL_CONNECTIONPOINT)
161
                            sConnectionPoint = oEleObj.Value
162
                            sConnPointArray = sConnectionPoint.Split("/")
163

    
164
                            If sConnPointArray.Length > 4 Then
165
                                MessageBox.Show(sConnPointArray.Length)
166
                            End If
167
                            For i = 0 To sConnPointArray.Length - 1
168
                                If i = 0 Then
169
                                    oAddrow(_XML_SYMBOL_Conn1_Point) = sConnPointArray(i)
170
                                ElseIf i = 1 Then
171
                                    oAddrow(_XML_SYMBOL_Conn2_Point) = sConnPointArray(i)
172
                                ElseIf i = 2 Then
173
                                    oAddrow(_XML_SYMBOL_Conn3_Point) = sConnPointArray(i)
174
                                ElseIf i = 3 Then
175
                                    oAddrow(_XML_SYMBOL_Conn4_Point) = sConnPointArray(i)
176
                                End If
177
                            Next
178

    
179
                            oEleObj = oSymbol.Element(_XML_SYMBOL_CONNS)
180
                            sConnectionUids = oEleObj.Value
181
                            sConnArray = sConnectionUids.Split(",")
182
                            Try
183
                                oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
184
                                sOriginalPoint = oEleObj.Value
185
                            Catch ex As Exception
186
                            End Try
187

    
188

    
189

    
190
                            oAddrow(_XML_SYMBOL_UID) = sUid
191
                            oAddrow(_XML_SYMBOL_LINENOUID) = sUid
192
                            oAddrow(_XML_SYMBOL_NAME) = sName
193
                            oAddrow(_XML_SYMBOL_LOCATION) = sLocation
194
                            oAddrow(_XML_SYMBOL_SIZE) = sSize
195
                            oAddrow(_XML_SYMBOL_ANGLE) = sAngle
196
                            oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
197
                            oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
198
                            oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
199
                            oAddrow(_XML_SYMBOL_CONNECTIONPOINT) = sConnectionPoint
200

    
201
                            If sConnArray.Length > 4 Then
202
                                MessageBox.Show(sConnArray.Length)
203
                            End If
204
                            For i = 0 To sConnArray.Length - 1
205
                                If i = 0 Then
206
                                    oAddrow(_XML_SYMBOL_Conn1_Uid) = sConnArray(i)
207
                                ElseIf i = 1 Then
208
                                    oAddrow(_XML_SYMBOL_Conn2_Uid) = sConnArray(i)
209
                                ElseIf i = 2 Then
210
                                    oAddrow(_XML_SYMBOL_Conn3_Uid) = sConnArray(i)
211
                                ElseIf i = 3 Then
212
                                    oAddrow(_XML_SYMBOL_Conn4_Uid) = sConnArray(i)
213
                                End If
214
                            Next
215

    
216
                            oAddrow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
217
                            oSymbol_Dt.Rows.Add(oAddrow)
218
                        Catch ex As Exception
219

    
220
                        End Try
221
                    Next
222
                    For Each oAtrribute As Object In oEqpNo.Elements(_XML_CATEGORY_ATTRIBUTE)
223
                        Try
224
                            Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
225
                            Dim oEleObj As XElement
226
                            Dim sAttUid As String
227
                            Dim sName As String
228
                            Dim sValue As String
229
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
230
                            sAttUid = oEleObj.Value
231
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
232
                            sName = oEleObj.Value
233
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
234
                            sValue = oEleObj.Value
235
                            oAddrow(_XML_ATTRIBUTE_UID) = sAttUid
236
                            oAddrow(_XML_ATTRIBUTE_NAME) = sName
237
                            oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
238
                            oAttribute_Dt.Rows.Add(oAddrow)
239
                        Catch ex As Exception
240
                        End Try
241
                    Next
242
                    CEqp_no.Uid = sUid
243
                    CEqp_no.Dt_Equipment = oSymbol_Dt
244
                    CEqp_no.Dt_Attribute = oAttribute_Dt
245
                    oEqp_list.Add(CEqp_no)
246
                Next
247
                oTrim_Lineno_list = LoadLineNo(oElement, _XML_CATEGORY_TRIM_LINENO)
248
                CDrawing.Line_nos = oLineno_list
249
                CDrawing.Eqp_nos = oEqp_list
250
                CDrawing.TrimLine_nos = oTrim_Lineno_list
251

    
252
            End If
253
            Return CDrawing
254
        Catch ex As Exception
255
            Return Nothing
256
        End Try
257

    
258
    End Function
259

    
260
    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
261

    
262
        Dim sReturnUid As String = ""
263
        Try
264
            Dim oFindLineRow As DataRow() = oLine_Dt.Select(
265
            "[" & _XML_LINE_DWG_STARTPOINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
266
            "[" & _XML_LINE_DWG_STARTPOINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
267
            "[" & _XML_LINE_DWG_STARTPOINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
268
            "[" & _XML_LINE_DWG_STARTPOINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
269
            "[" & _XML_LINE_UID & "] <> '" & sUid & "' And " &
270
            "[" & _XML_LINE_Conn1_Uid & "] = ''")
271
            If oFindLineRow.Length = 0 Then
272
                oFindLineRow = oLine_Dt.Select(
273
                "[" & _XML_LINE_DWG_ENDPOINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
274
                "[" & _XML_LINE_DWG_ENDPOINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
275
                "[" & _XML_LINE_DWG_ENDPOINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
276
                "[" & _XML_LINE_DWG_ENDPOINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
277
                "[" & _XML_LINE_UID & "] <> '" & sUid & "' And " &
278
                "[" & _XML_LINE_Conn2_Uid & "] = ''")
279
                If oFindLineRow.Length = 0 Then
280
                    oFindLineRow = oSymbol_Dt.Select(
281
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
282
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
283
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
284
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
285
              "[" & _XML_SYMBOL_UID & "] <> '" & sUid & "' And " &
286
              "[" & _XML_SYMBOL_Conn1_Uid & "] = ''")
287
                    If oFindLineRow.Length = 0 Then
288
                        oFindLineRow = oSymbol_Dt.Select(
289
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
290
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
291
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
292
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
293
                   "[" & _XML_SYMBOL_UID & "] <> '" & sUid & "' And " &
294
                   "[" & _XML_SYMBOL_Conn2_Uid & "] = ''")
295
                        If oFindLineRow.Length = 0 Then
296
                        Else
297
                            oFindLineRow(0)(_XML_SYMBOL_Conn2_Uid) = sUid
298
                            sReturnUid = oFindLineRow(0)(_XML_SYMBOL_UID).ToString()
299
                        End If
300
                    Else
301
                        oFindLineRow(0)(_XML_SYMBOL_Conn1_Uid) = sUid
302
                        sReturnUid = oFindLineRow(0)(_XML_SYMBOL_UID).ToString()
303
                    End If
304
                Else
305
                    oFindLineRow(0)(_XML_LINE_Conn2_Uid) = sUid
306
                    sReturnUid = oFindLineRow(0)(_XML_LINE_UID).ToString()
307
                End If
308
            Else
309
                oFindLineRow(0)(_XML_LINE_Conn1_Uid) = sUid
310
                sReturnUid = oFindLineRow(0)(_XML_LINE_UID).ToString()
311
            End If
312
        Catch ex As Exception
313

    
314
        End Try
315

    
316
        Return sReturnUid
317
    End Function
318

    
319

    
320
    Private Function SetConnectionInfo(ByRef oLine_Dt As DataTable, ByRef oSymbol_Dt As DataTable)
321
        Try
322
            For Each oLineInfo In oLine_Dt.Rows
323
                Dim sLineUid As String = oLineInfo(_XML_LINE_UID).ToString()
324
                Dim dStartPos_x As Double = oLineInfo(_XML_LINE_DWG_STARTPOINT_X)
325
                Dim dStartPos_y As Double = oLineInfo(_XML_LINE_DWG_STARTPOINT_Y)
326
                Dim dEndPos_x As Double = oLineInfo(_XML_LINE_DWG_ENDPOINT_X)
327
                Dim dEndPos_y As Double = oLineInfo(_XML_LINE_DWG_ENDPOINT_Y)
328
                Dim sConn1Uid As String = ""
329
                Dim sConn2Uid As String = ""
330
                sConn1Uid = FindConnection(oLine_Dt, oSymbol_Dt, sLineUid, dStartPos_x, dStartPos_y)
331
                If sConn1Uid <> "" Then
332
                    oLineInfo(_XML_LINE_Conn1_Uid) = sConn1Uid
333
                End If
334
                sConn2Uid = FindConnection(oLine_Dt, oSymbol_Dt, sLineUid, dEndPos_x, dEndPos_y)
335
                If sConn2Uid <> "" Then
336
                    oLineInfo(_XML_LINE_Conn2_Uid) = sConn2Uid
337
                End If
338
            Next
339
            For Each oSymbolInfo In oSymbol_Dt.Rows
340
                Dim sSymbolUid As String = oSymbolInfo(_XML_SYMBOL_UID).ToString()
341
                Dim dConn1Pos_x As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN1_POINT_X)
342
                Dim dConn1Pos_y As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN1_POINT_Y)
343

    
344
                Dim sConn1Uid As String = ""
345
                Dim sConn2Uid As String = ""
346

    
347
                sConn1Uid = FindConnection(oLine_Dt, oSymbol_Dt, sSymbolUid, dConn1Pos_x, dConn1Pos_y)
348
                If sConn1Uid <> "" Then
349
                    oSymbolInfo(_XML_SYMBOL_Conn1_Uid) = sConn1Uid
350
                End If
351
                Try
352
                    Dim dConn2Pos_x As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN2_POINT_X)
353
                    Dim dConn2Pos_y As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN2_POINT_Y)
354
                    sConn2Uid = FindConnection(oLine_Dt, oSymbol_Dt, sSymbolUid, dConn2Pos_x, dConn2Pos_y)
355
                    If sConn2Uid <> "" Then
356
                        oSymbolInfo(_XML_SYMBOL_Conn2_Uid) = sConn2Uid
357
                    End If
358
                Catch ex As Exception
359
                End Try
360
            Next
361
        Catch ex As Exception
362
        End Try
363
    End Function
364

    
365
    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
366
        Dim bValidLine As Boolean = True
367
        If Math.Abs(dStart_x - dEnd_x) > Math.Abs(dStart_y - dEnd_y) Then
368
            If dStart_x > dEnd_x Then
369
                sDirection = "X"
370
                sFlowdirection = "Left_x"
371
                If Math.Abs(dStart_y - dEnd_y) < 5 Then
372
                    dEnd_y = dStart_y
373
                End If
374
            Else
375
                sDirection = "X"
376
                sFlowdirection = "Right_x"
377
                If Math.Abs(dStart_y - dEnd_y) < 5 Then
378
                    dEnd_y = dStart_y
379
                End If
380
            End If
381
            If Math.Abs(dStart_x - dEnd_x) <= 15 Then
382
                bValidLine = False
383
            End If
384
        Else
385
            If dStart_y > dEnd_y Then
386
                sDirection = "Y"
387
                sFlowdirection = "Down_y"
388
                If Math.Abs(dStart_x - dEnd_x) < 5 Then
389
                    dEnd_x = dStart_x
390
                End If
391

    
392
            Else
393
                sDirection = "Y"
394
                sFlowdirection = "Up_y"
395
                If Math.Abs(dStart_x - dEnd_x) < 5 Then
396
                    dEnd_x = dStart_x
397
                End If
398
            End If
399
            If Math.Abs(dStart_y - dEnd_y) <= 20 Then
400
                bValidLine = False
401
            End If
402
        End If
403
        Return bValidLine
404
    End Function
405

    
406
    Private Function LoadLineNo(ByVal oElement As XElement, ByVal sLineType As String) As List(Of Line_no)
407

    
408
        Dim oLineno_list As New List(Of Line_no)
409

    
410
        For Each oLineNo As Object In oElement.Elements(sLineType)
411

    
412
            Dim CLineNo As Line_no = New Line_no()
413
            Try
414
                CLineNo.Uid = oLineNo.Element(_XML_LINENO_UID).Value
415
                CLineNo.Text = oLineNo.Element(_XML_LINENO_TEXT).Value
416
                CLineNo.Location = oLineNo.Element(_XML_LINENO_LOCATION).Value
417
                CLineNo.Angle = oLineNo.Element(_XML_LINENO_ANGLE).Value
418
                CLineNo.SystemPath = "\Piping\Labels - Piping Segments\Kemya Line Number.sym" 'GetDataFromMappingDB(_XML_CATEGORY_LINENO, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
419
            Catch ex As Exception
420
            End Try
421
            Dim oLine_Dt As DataTable = Line_Dt()
422
            Dim oSymbol_Dt As DataTable = Symbol_Dt()
423
            Dim oAttribute_Dt As DataTable = Attribute_Dt()
424
            Dim iRunCnt As Integer = 0
425
            For Each oRun As Object In oLineNo.Elements(_XML_CATEGORY_RUN)
426
                iRunCnt = iRunCnt + 1
427
                Dim sRunName As String = CLineNo.Text & "_" & iRunCnt
428
                For Each oMERGEDLine As Object In oRun.Elements(_XML_CATEGORY_MERGEDLINE)
429
                    For Each oLine As Object In oMERGEDLine.Elements(_XML_CATEGORY_LINE)
430
                        Try
431
                            Dim oAddrow As DataRow = oLine_Dt.NewRow()
432
                            Dim oEleObj As XElement
433
                            Dim sUid As String
434
                            Dim sStartpoint As String
435
                            Dim sEndpoint As String
436
                            Dim sType As String
437
                            Dim sConnectionUids As String = ""
438
                            Dim dStartPos_x As Double = 0.0
439
                            Dim dStartPos_y As Double = 0.0
440
                            Dim dEndPos_x As Double = 0.0
441
                            Dim dEndPos_y As Double = 0.0
442
                            Dim dDWG_StartPos_x As Double = 0.0
443
                            Dim dDWG_StartPos_y As Double = 0.0
444
                            Dim dDWG_EndPos_x As Double = 0.0
445
                            Dim dDWG_EndPos_y As Double = 0.0
446
                            oEleObj = oLine.Element(_XML_LINE_UID)
447
                            sUid = oEleObj.Value
448

    
449
                            If oLine_Dt.Select(_XML_LINE_UID & "='" & sUid & "'").Length = 0 Then
450
                                oEleObj = oLine.Element(_XML_LINE_STARTPOINT)
451
                                sStartpoint = oEleObj.Value
452
                                oEleObj = oLine.Element(_XML_LINE_ENDPOINT)
453
                                sEndpoint = oEleObj.Value
454
                                oEleObj = oLine.Element(_XML_LINE_TYPE)
455
                                sType = oEleObj.Value
456
                                'oEleObj = oLine.Element(_XML_LINE_CONNS)
457
                                'sConnectionUids = oEleObj.Value
458
                                'sConnArray = sConnectionUids.Split(",")
459
                                'For i = 0 To sConnArray.Length - 1
460
                                '    If i = 0 Then
461
                                '        oAddrow(_XML_LINE_Conn1_Uid) = sConnArray(i)
462
                                '    ElseIf i = 1 Then
463
                                '        oAddrow(_XML_LINE_Conn2_Uid) = sConnArray(i)
464
                                '    End If
465
                                'Next
466
                                'If sConnArray.Length > 2 Then
467
                                '    MessageBox.Show(sConnArray.Length)
468
                                'End If
469
                                oAddrow(_XML_LINE_Conn1_Uid) = ""
470
                                oAddrow(_XML_LINE_Conn2_Uid) = ""
471
                                oAddrow(_XML_LINE_UID) = sUid
472
                                oAddrow(_XML_LINE_RUNNAME) = sRunName
473
                                oAddrow(_XML_LINE_LINENOUID) = CLineNo.Uid
474
                                oAddrow(_XML_LINENO_TEXT) = CLineNo.Text
475
                                oAddrow(_XML_LINE_STARTPOINT) = sStartpoint
476
                                oAddrow(_XML_LINE_ENDPOINT) = sEndpoint
477

    
478
                                ConvertPointBystring(sStartpoint, dStartPos_x, dStartPos_y)
479
                                ConvertPointBystring(sEndpoint, dEndPos_x, dEndPos_y)
480
                                Dim sDirection As String = ""
481
                                Dim sFlowDirection As String = ""
482
                                Dim bValidLine As Boolean = GetFlowDirection(dStartPos_x, dStartPos_y, dEndPos_x, dEndPos_y, sDirection, sFlowDirection)
483
                                oAddrow(_XML_LINE_FlowDirection) = sFlowDirection
484
                                oAddrow(_XML_LINE_Direction) = sDirection
485
                                oAddrow(_XML_LINE_ValieLine) = bValidLine
486
                                dDWG_StartPos_x = dStartPos_x
487
                                dDWG_StartPos_y = dStartPos_y
488
                                ConvertPointByImage(dDWG_StartPos_x, dDWG_StartPos_y, _IMG_X, _IMG_Y)
489
                                dDWG_EndPos_x = dEndPos_x
490
                                dDWG_EndPos_y = dEndPos_y
491
                                ConvertPointByImage(dDWG_EndPos_x, dDWG_EndPos_y, _IMG_X, _IMG_Y)
492

    
493
                                oAddrow(_XML_LINE_STARTPOINT_X) = dStartPos_x
494
                                oAddrow(_XML_LINE_STARTPOINT_Y) = dStartPos_y
495
                                oAddrow(_XML_LINE_ENDPOINT_X) = dEndPos_x
496
                                oAddrow(_XML_LINE_ENDPOINT_Y) = dEndPos_y
497

    
498
                                oAddrow(_XML_LINE_DWG_STARTPOINT_X) = dDWG_StartPos_x
499
                                oAddrow(_XML_LINE_DWG_STARTPOINT_Y) = dDWG_StartPos_y
500
                                oAddrow(_XML_LINE_DWG_ENDPOINT_X) = dDWG_EndPos_x
501
                                oAddrow(_XML_LINE_DWG_ENDPOINT_Y) = dDWG_EndPos_y
502

    
503
                                oAddrow(_XML_LINE_SYSTEMPATH) = GetDataFromMappingDB(_XML_CATEGORY_LINE, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
504
                                If oAddrow(_XML_LINE_SYSTEMPATH) = "" Then
505
                                    MessageBox.Show("")
506
                                End If
507
                                oAddrow(_XML_LINE_DRAWING_TF) = "FALSE"
508
                                oAddrow(_XML_LINE_TYPE) = sType
509
                                '  _AllLine_DT.Rows.Add(oAddrow)
510
                                oLine_Dt.Rows.Add(oAddrow)
511
                            Else
512
                            End If
513
                        Catch ex As Exception
514
                        End Try
515
                    Next
516
                Next
517

    
518
                For Each oSymbol As Object In oRun.Elements(_XML_CATEGORY_SYMBOL)
519
                    Try
520

    
521
                        Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
522
                        Dim oEleObj As XElement
523
                        Dim sUid As String
524
                        Dim sName As String
525
                        Dim sLocation As String
526
                        Dim sSize As String
527
                        Dim sAngle As String
528
                        Dim sOriginalPoint As String = ""
529
                        Dim sConnectionPoint As String = ""
530
                        Dim sConnectionUids As String = ""
531
                        Dim sConnArray As String()
532
                        Dim sChild As String = ""
533
                        Dim dCenterPos_x As Double = 0.0
534
                        Dim dCenterPos_y As Double = 0.0
535
                        Dim dDwgCenterPos_x As Double = 0.0
536
                        Dim dDwgCenterPos_y As Double = 0.0
537

    
538

    
539
                        Dim dConn1Pos_x As Double = 0.0
540
                        Dim dConn1Pos_y As Double = 0.0
541
                        Dim dConn2Pos_x As Double = 0.0
542
                        Dim dConn2Pos_y As Double = 0.0
543
                        Dim dConn3Pos_x As Double = 0.0
544
                        Dim dConn3Pos_y As Double = 0.0
545
                        Dim dConn4Pos_x As Double = 0.0
546
                        Dim dConn4Pos_y As Double = 0.0
547

    
548
                        Dim dDwg_Conn1Pos_x As Double = 0.0
549
                        Dim dDwg_Conn1Pos_y As Double = 0.0
550
                        Dim dDwg_Conn2Pos_x As Double = 0.0
551
                        Dim dDwg_Conn2Pos_y As Double = 0.0
552
                        Dim dDwg_Conn3Pos_x As Double = 0.0
553
                        Dim dDwg_Conn3Pos_y As Double = 0.0
554
                        Dim dDwg_Conn4Pos_x As Double = 0.0
555
                        Dim dDwg_Conn4Pos_y As Double = 0.0
556

    
557
                        oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
558
                        sUid = oEleObj.Value
559
                        oEleObj = oSymbol.Element(_XML_SYMBOL_PARENT)
560
                        sName = oEleObj.Value
561
                        oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
562
                        sLocation = oEleObj.Value
563
                        oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
564
                        sSize = oEleObj.Value
565
                        oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
566
                        sAngle = oEleObj.Value
567
                        oEleObj = oSymbol.Element(_XML_SYMBOL_CONNECTIONPOINT)
568
                        sConnectionPoint = oEleObj.Value
569
                        oEleObj = oSymbol.Element(_XML_SYMBOL_CHILD)
570
                        sChild = oEleObj.Value
571
                        Try
572
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
573
                            sOriginalPoint = oEleObj.Value
574
                        Catch ex As Exception
575

    
576
                        End Try
577
                        'oEleObj = oSymbol.Element(_XML_LINE_CONNS)
578
                        'sConnectionUids = oEleObj.Value
579
                        'sConnArray = sConnectionUids.Split(",")
580
                        'If sConnArray.Length > 4 Then
581
                        '    MessageBox.Show(sConnArray.Length)
582
                        'End If
583
                        'For i = 0 To sConnArray.Length - 1
584
                        '    If i = 0 Then
585
                        '        oAddrow(_XML_SYMBOL_Conn1_Uid) = sConnArray(i)
586
                        '    ElseIf i = 1 Then
587
                        '        oAddrow(_XML_SYMBOL_Conn2_Uid) = sConnArray(i)
588
                        '    ElseIf i = 2 Then
589
                        '        oAddrow(_XML_SYMBOL_Conn3_Uid) = sConnArray(i)
590
                        '    ElseIf i = 3 Then
591
                        '        oAddrow(_XML_SYMBOL_Conn4_Uid) = sConnArray(i)
592
                        '    End If
593
                        'Next
594
                        oAddrow(_XML_SYMBOL_Conn1_Uid) = ""
595
                        oAddrow(_XML_SYMBOL_Conn2_Uid) = ""
596
                        oAddrow(_XML_SYMBOL_Conn3_Uid) = ""
597
                        oAddrow(_XML_SYMBOL_Conn4_Uid) = ""
598
                        ConvertPointBystring(sOriginalPoint, dCenterPos_x, dCenterPos_y)
599
                        dDwgCenterPos_x = dCenterPos_x
600
                        dDwgCenterPos_y = dCenterPos_y
601
                        ConvertPointByImage(dDwgCenterPos_x, dDwgCenterPos_y, _IMG_X, _IMG_Y)
602

    
603
                        oAddrow(_XML_SYMBOL_CENTERPOINT_X) = dCenterPos_x
604
                        oAddrow(_XML_SYMBOL_CENTERPOINT_Y) = dCenterPos_y
605
                        oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_X) = dDwgCenterPos_x
606
                        oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_Y) = dDwgCenterPos_y
607
                        sConnArray = sConnectionPoint.Split("/")
608
                        If sConnArray.Length > 4 Then
609
                            MessageBox.Show(sConnArray.Length)
610
                        End If
611
                        For i = 0 To sConnArray.Length - 1
612
                            If i = 0 Then
613
                                oAddrow(_XML_SYMBOL_Conn1_Point) = sConnArray(i)
614
                                ConvertPointBystring(sConnArray(i), dConn1Pos_x, dConn1Pos_y)
615
                                dDwg_Conn1Pos_x = dConn1Pos_x
616
                                dDwg_Conn1Pos_y = dConn1Pos_y
617
                                ConvertPointByImage(dDwg_Conn1Pos_x, dDwg_Conn1Pos_y, _IMG_X, _IMG_Y)
618

    
619
                                oAddrow(_XML_SYMBOL_CONN1_POINT_X) = dConn1Pos_x
620
                                oAddrow(_XML_SYMBOL_CONN1_POINT_Y) = dConn1Pos_y
621
                                oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_X) = dDwg_Conn1Pos_x
622
                                oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_Y) = dDwg_Conn1Pos_y
623
                            ElseIf i = 1 Then
624
                                oAddrow(_XML_SYMBOL_Conn2_Point) = sConnArray(i)
625
                                ConvertPointBystring(sConnArray(i), dConn2Pos_x, dConn2Pos_y)
626
                                dDwg_Conn2Pos_x = dConn2Pos_x
627
                                dDwg_Conn2Pos_y = dConn2Pos_y
628
                                ConvertPointByImage(dDwg_Conn2Pos_x, dDwg_Conn2Pos_y, _IMG_X, _IMG_Y)
629
                                oAddrow(_XML_SYMBOL_CONN2_POINT_X) = dConn2Pos_x
630
                                oAddrow(_XML_SYMBOL_CONN2_POINT_Y) = dConn2Pos_y
631
                                oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_X) = dDwg_Conn2Pos_x
632
                                oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_Y) = dDwg_Conn2Pos_y
633
                            ElseIf i = 2 Then
634
                                oAddrow(_XML_SYMBOL_Conn3_Point) = sConnArray(i)
635
                                ConvertPointBystring(sConnArray(i), dConn3Pos_x, dConn3Pos_y)
636
                                dDwg_Conn3Pos_x = dConn3Pos_x
637
                                dDwg_Conn3Pos_y = dConn3Pos_y
638
                                ConvertPointByImage(dDwg_Conn3Pos_x, dDwg_Conn3Pos_y, _IMG_X, _IMG_Y)
639
                                oAddrow(_XML_SYMBOL_CONN3_POINT_X) = dConn3Pos_x
640
                                oAddrow(_XML_SYMBOL_CONN3_POINT_Y) = dConn3Pos_y
641
                                oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_X) = dDwg_Conn3Pos_x
642
                                oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_Y) = dDwg_Conn3Pos_y
643
                            ElseIf i = 3 Then
644
                                oAddrow(_XML_SYMBOL_Conn4_Point) = sConnArray(i)
645
                                ConvertPointBystring(sConnArray(i), dConn4Pos_x, dConn4Pos_y)
646
                                dDwg_Conn4Pos_x = dConn4Pos_x
647
                                dDwg_Conn4Pos_y = dConn4Pos_y
648
                                ConvertPointByImage(dDwg_Conn4Pos_x, dDwg_Conn4Pos_y, _IMG_X, _IMG_Y)
649
                                oAddrow(_XML_SYMBOL_CONN4_POINT_X) = dConn4Pos_x
650
                                oAddrow(_XML_SYMBOL_CONN4_POINT_Y) = dConn4Pos_y
651
                                oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_X) = dDwg_Conn4Pos_x
652
                                oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_Y) = dDwg_Conn4Pos_y
653
                            End If
654
                        Next
655

    
656
                        oAddrow(_XML_SYMBOL_UID) = sUid
657
                        oAddrow(_XML_LINE_LINENOUID) = CLineNo.Uid
658
                        oAddrow(_XML_SYMBOL_RUNNAME) = sRunName
659
                        oAddrow(_XML_LINENO_TEXT) = CLineNo.Text
660
                        oAddrow(_XML_SYMBOL_NAME) = IO.Path.GetFileNameWithoutExtension(GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME))
661
                        oAddrow(_XML_SYMBOL_LOCATION) = sLocation
662
                        oAddrow(_XML_SYMBOL_SIZE) = sSize
663
                        oAddrow(_XML_SYMBOL_ANGLE) = sAngle
664
                        oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
665
                        oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
666
                        oAddrow(_XML_SYMBOL_CLASS) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_CLASS)
667
                        oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
668

    
669
                        oAddrow(_XML_SYMBOL_CONNECTIONPOINT) = sConnectionPoint
670
                        oAddrow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
671
                        oAddrow(_XML_SYMBOL_CHILD) = sChild
672
                        '   _AllSymbol_DT.Rows.Add(oAddrow)
673
                        oSymbol_Dt.Rows.Add(oAddrow)
674
                    Catch ex As Exception
675
                    End Try
676
                Next
677

    
678
                For Each oAtrribute As Object In oRun.Elements(_XML_CATEGORY_ATTRIBUTE)
679
                    Try
680
                        Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
681
                        Dim oEleObj As XElement
682
                        Dim sUid As String
683
                        Dim sName As String
684
                        Dim sValue As String
685
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
686
                        sUid = oEleObj.Value
687
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
688
                        sName = oEleObj.Value
689
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
690
                        sValue = oEleObj.Value
691
                        oAddrow(_XML_ATTRIBUTE_UID) = sUid
692
                        oAddrow(_XML_ATTRIBUTE_NAME) = sName
693
                        oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
694
                        oAttribute_Dt.Rows.Add(oAddrow)
695
                    Catch ex As Exception
696
                    End Try
697
                Next
698
            Next
699
            'Line No Attribute
700
            For Each oAtrribute As Object In oLineNo.Elements(_XML_CATEGORY_ATTRIBUTE)
701
                Try
702
                    Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
703
                    Dim oEleObj As XElement
704
                    Dim sUid As String = ""
705
                    Dim sName As String
706
                    Dim sValue As String
707

    
708
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
709
                    sUid = oEleObj.Value
710
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
711
                    sName = oEleObj.Value
712
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
713
                    sValue = oEleObj.Value
714
                    oAddrow(_XML_ATTRIBUTE_UID) = sUid
715
                    oAddrow(_XML_ATTRIBUTE_NAME) = sName
716
                    oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
717
                    oAttribute_Dt.Rows.Add(oAddrow)
718
                Catch ex As Exception
719
                End Try
720
            Next
721

    
722
            SetConnectionInfo(oLine_Dt, oSymbol_Dt)
723
            _AllLine_DT.Merge(oLine_Dt)
724
            _AllSymbol_DT.Merge(oSymbol_Dt)
725
            CLineNo.Dt_Line = oLine_Dt
726
            CLineNo.Dt_Symbol = oSymbol_Dt
727
            CLineNo.Dt_Attribute = oAttribute_Dt
728
            oLineno_list.Add(CLineNo)
729
        Next
730
        Return oLineno_list
731
    End Function
732

    
733

    
734
    Private Sub ConvertPointByImage(ByRef dX As Double, ByRef dY As Double, ByVal dDwgX As Double, ByVal dDwgY As Double)
735

    
736
        Dim calcx As Double = 0
737
        Dim calcy As Double = 0
738
        calcx = (dX * _DWG_X) / dDwgX 'Math.Round((dX * _DWG_X) / dDwgX, 2)
739
        'calcx = Math.Round(calcx, 4, MidpointRounding.)
740
        calcx = Math.Truncate(calcx * 1000) / 1000
741
        calcy = _DWG_Y - ((dY * _DWG_Y) / dDwgY) '_DWG_Y - Math.Round((dY * _DWG_Y) / dDwgY, 2)
742
        '   calcy = Math.Round(calcy, 4)
743
        calcy = Math.Truncate(calcy * 1000) / 1000
744
        dX = calcx
745
        dY = calcy
746
    End Sub
747

    
748

    
749
    '@brief Convert To SPPID
750
    '@author : Gyusu Park
751
    '@date : 2018-04-10
752
    '@history:
753

    
754
    Private Sub SplitLocation(ByVal sLocation As String, ByRef dX As Double, ByRef dY As Double)
755

    
756
        Dim opointstr As String() = Split(sLocation, ",")
757
        If (opointstr.Length > 1) Then
758
            If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
759
                dX = opointstr(0)
760
                dY = opointstr(1)
761
            End If
762
        End If
763

    
764
    End Sub
765

    
766
    Private Function Load_DB(ByVal sDBPath As String, ByVal sTableName As String) As DataTable
767

    
768
        Try
769
            Dim oDt As New DataTable
770
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
771
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
772
            conn.Open()
773
            Dim sQuery As String = "Select * from " & sTableName
774
            Dim cmd As SQLiteCommand = conn.CreateCommand()
775
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
776
            Dim oDataSet As DataSet = New DataSet()
777
            adapter.Fill(oDataSet)
778
            oDt = oDataSet.Tables(0)
779
            Return oDt
780
        Catch ex As Exception
781
            Return Nothing
782
        End Try
783

    
784

    
785
    End Function
786

    
787
    Private Function LoadAllDrawing() As DataTable
788

    
789

    
790
        SetListBoxItems(ListBox_Result, "도면정보 로드중....")
791
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "도면정보 로드중....")
792
        Dim oDt As DataTable = Drawing_Dt()
793
        Dim sHierarchy As String = My.Settings.Plant_Hierarchy
794

    
795

    
796
        Dim files() As String
797
        files = Directory.GetFiles(sHierarchy, "*.pid", SearchOption.AllDirectories)
798
        For Each FileName As String In files
799
            Dim sName As String = FileName
800
            Dim oAddRow As DataRow = oDt.NewRow()
801
            oAddRow("Name") = Path.GetFileNameWithoutExtension(sName)
802
            oAddRow("Path") = FileName
803
            oDt.Rows.Add(oAddRow)
804
        Next
805
        Return oDt
806
    End Function
807

    
808

    
809
    Dim _XMLList As ListView = New ListView()
810

    
811

    
812

    
813

    
814

    
815

    
816
    Private Function CheckOpenDrawing() As Boolean
817
        Try
818

    
819
            Dim lobjDatasource As Object
820
            _Placement = CreateObject("Plaice.Placement", "")
821
            lobjDatasource = _Placement.PIDDataSource
822
            Return True
823
        Catch ex As Exception
824
            Return False
825
        End Try
826

    
827
    End Function
828

    
829

    
830
    Private Sub Btn_Convert_Click(sender As Object, e As EventArgs) Handles Btn_Convert.Click
831

    
832
        Main_Tab.SelectedIndex = 1
833
        ListBox_Result.Items.Clear()
834
        ' DataGrid_Result.DataSource = New DataTable()
835
        Me.ProgressBar_Status.Visible = True
836
        ProgressBar_Status.Maximum = 100
837
        ProgressBar_Status.Value = 0
838
        InitItemCount()
839
        ' _selectFolderPath = Tree_XMLFiles.SelectedNode.FullPath.Replace("\\", "\")
840
        _Main_trd = New Thread(AddressOf ThreadConvert)
841
        _Main_trd.IsBackground = True
842
        _Main_trd.Start()
843
        FineOPCForm()
844
    End Sub
845

    
846
    Private Sub FineOPCForm()
847
        _Opc_trd = New Thread(AddressOf ThreadOPCRemove)
848
        _Opc_trd.IsBackground = True
849
        _Opc_trd.Start()
850
    End Sub
851

    
852

    
853
    Dim _objPIDAutoApp As Object
854

    
855
    Private Function OpenSPPID(ByVal oDwg_Dt As DataTable, ByVal sDwgName As String) As Boolean
856
        Dim bCheckOpen As Boolean = False
857
        '   Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgPath)
858
        SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
859
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, sDwgName & " 도면 Open....")
860
        _objPIDAutoApp = CreateObject("PIDAutomation.Application")
861

    
862
        Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
863
        If sPath <> "" Then
864
            Process.Start(sPath)
865
        Else
866
            Return bCheckOpen
867
        End If
868

    
869
            Dim bCheckOpenDrawing As Boolean = False
870
            While (True)
871
                bCheckOpenDrawing = CheckOpenDrawing()
872
                If bCheckOpenDrawing = True Then
873
                    bCheckOpen = True
874
                    Exit While
875
                Else
876
                    Thread.Sleep(2000)
877
                End If
878
            End While
879

    
880

    
881
            Return bCheckOpen
882
    End Function
883

    
884
    Private Function GetDrawing(ByVal sDwgName As String) As Drawing
885
        For Each CDrawing In _DrawingsList
886
            If CDrawing.DwgName.ToUpper() = sDwgName.ToUpper() Then
887
                Return CDrawing
888
            End If
889
        Next
890
        Return Nothing
891
    End Function
892

    
893
    Private Function GetLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
894
        For Each CLineNo In CDrawing.Line_nos
895
            If CLineNo.Uid = sLineNoUid Then
896
                Return CLineNo
897
            End If
898
        Next
899
        Return Nothing
900
    End Function
901

    
902
    Private Function GetTrimLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
903
        For Each CLineNo In CDrawing.TrimLine_nos
904
            If CLineNo.Uid = sLineNoUid Then
905
                Return CLineNo
906
            End If
907
        Next
908
        Return Nothing
909
    End Function
910

    
911

    
912

    
913
    Private Function GetPipeFromConnection(ByVal CDrawing As Drawing, ByVal sSymbolUid As String, ByRef sConnTypeNo As String) As DataTable
914
        For Each CLineNo In CDrawing.Line_nos
915
            Dim odt As DataTable = CLineNo.Dt_Line
916
            If odt.Rows.Count > 0 Then
917
                If odt.Rows(0)(_XML_LINE_Conn1_Uid).ToString = sSymbolUid Then
918
                    sConnTypeNo = "1"
919
                    Return odt
920
                ElseIf odt.Rows(0)(_XML_LINE_Conn2_Uid).ToString() = sSymbolUid Then
921
                    sConnTypeNo = "2"
922
                    Return odt
923
                End If
924
            End If
925
        Next
926
        Return New DataTable
927
    End Function
928

    
929
    Private Function GetSymbolFromConnection(ByVal CDrawing As Drawing, ByVal sSymbolUid As String, ByRef sConnTypeNo As String) As DataTable
930
        For Each CLineNo In CDrawing.Line_nos
931
            Dim odt As DataTable = CLineNo.Dt_Symbol
932
            If odt.Rows.Count > 0 Then
933
                If odt.Rows(0)(_XML_SYMBOL_Conn1_Uid).ToString = sSymbolUid Then
934
                    sConnTypeNo = "1"
935
                    Return odt
936
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn2_Uid).ToString() = sSymbolUid Then
937
                    sConnTypeNo = "2"
938
                    Return odt
939
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn3_Uid).ToString() = sSymbolUid Then
940
                    sConnTypeNo = "3"
941
                    Return odt
942
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn4_Uid).ToString() = sSymbolUid Then
943
                    sConnTypeNo = "4"
944
                    Return odt
945
                End If
946
            End If
947
        Next
948
        Return New DataTable
949
    End Function
950

    
951
    Private Function GetEqpNo(ByVal CDrawing As Drawing, ByVal sEqpUid As String) As Eqp_no
952
        For Each CEqpNo In CDrawing.Eqp_nos
953
            If CEqpNo.Uid = sEqpUid Then
954
                Return CEqpNo
955
            End If
956
        Next
957
        Return Nothing
958
    End Function
959
    Private Function ConvertPointBystring(ByVal sPoint As String, ByRef dX As Double, ByRef dY As Double) As Boolean
960
        Try
961
            Dim opointstr As String() = Split(sPoint, ",")
962
            If (opointstr.Length > 1) Then
963
                If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
964
                    dX = opointstr(0)
965
                    dY = opointstr(1)
966

    
967
                Else
968
                    dX = 0
969
                    dY = 0
970
                    Return False
971
                End If
972
            End If
973
            Return True
974
        Catch ex As Exception
975
            Return False
976
        End Try
977
    End Function
978

    
979

    
980
    Dim _DrawLine_Dt As DataTable = DrawLind_Dt()
981

    
982

    
983
    Private Sub AddModelingLine(ByVal dStart_x As Double, ByVal dStart_y As Double, ByVal dEnd_x As Double, ByVal dEnd_y As Double, ByVal sUid As String)
984
        Dim oAddRow = _DrawLine_Dt.NewRow()
985
        oAddRow(_XML_LINE_UID) = sUid
986
        oAddRow(_XML_LINE_STARTPOINT_X) = dStart_x
987
        oAddRow(_XML_LINE_STARTPOINT_Y) = dStart_y
988
        oAddRow(_XML_LINE_ENDPOINT_X) = dEnd_x
989
        oAddRow(_XML_LINE_ENDPOINT_Y) = dEnd_y
990
        _DrawLine_Dt.Rows.Add(oAddRow)
991
    End Sub
992

    
993

    
994

    
995
    Private Sub PlaceEquipment(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sEqpName As String)
996
        Try
997
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
998
            Dim oAttributeRow() As DataRow
999
            If oAttribute_Dt.Rows.Count > 0 Then
1000
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1001
            End If
1002
            If oSymbolRow.Length > 0 Then
1003
                Dim oDatasource As Object = _Placement.PIDDataSource
1004
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1005
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1006
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1007
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1008
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1009
                Dim dAngle As Double = 0.0
1010
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1011
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1012
                End If
1013
                Dim dLocationX As Double = 0.0
1014
                Dim dLocationY As Double = 0.0
1015
                Dim dX As Double = 0.0
1016
                Dim dY As Double = 0.0
1017

    
1018
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1019
                    dX = dLocationX
1020
                    dY = dLocationY
1021
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1022
                    _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1023
                    SetListBoxItems(ListBox_Result, "Place Equipment.." & sUid & " (" & dLocationX & "," & dLocationY & ")..." & _iEquipmentcnt & " count ")
1024

    
1025
                    _iEquipmentcnt = _iEquipmentcnt + 1
1026
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Equipment : " & sUid)
1027
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Equipment Name : " & sEqpName)
1028
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1029
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
1030
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Equipment Count : " & _iEquipmentcnt)
1031

    
1032

    
1033
                End If
1034
            End If
1035
        Catch ex As Exception
1036

    
1037
        End Try
1038

    
1039

    
1040
    End Sub
1041

    
1042
    Private Function PlacePipingOPC(ByVal sUid As String, ByVal oOPCRow As DataRow, ByVal oAttribute_Dt As DataTable, ByVal sLineNoText As String) As LMSymbol
1043
        Try
1044
            Dim oAttributeRow() As DataRow
1045
            If oAttribute_Dt.Rows.Count > 0 Then
1046
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1047
            End If
1048
            Dim oDatasource As Object = _Placement.PIDDataSource
1049
            Dim sSymbolCompType As String = oOPCRow(_XML_SYMBOL_TYPE).ToString()
1050
            Dim sSystemPath As String = oOPCRow(_XML_SYMBOL_SYSTEMPATH).ToString()
1051
            Dim sClass As String = oOPCRow(_XML_SYMBOL_CLASS).ToString()
1052
            Dim sLocation As String = oOPCRow(_XML_SYMBOL_LOCATION).ToString()
1053
            Dim sOriginalPoint As String = oOPCRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
1054
            Dim dAngle As Double = 0.0
1055
            If IsNumeric(oOPCRow(_XML_SYMBOL_ANGLE).ToString()) Then
1056
                dAngle = Double.Parse(oOPCRow(_XML_SYMBOL_ANGLE).ToString())
1057
            End If
1058

    
1059
            Dim dLocationX As Double = 0.0
1060
            Dim dLocationY As Double = 0.0
1061
            Dim dX As Double = 0.0
1062
            Dim dY As Double = 0.0
1063
            Dim oLMSymbol As LMSymbol = Nothing
1064
            If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1065
                dX = dLocationX
1066
                dY = dLocationY
1067
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1068
                _iPipintOpccnt = _iPipintOpccnt + 1
1069
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1070
                '모델링된 형상은 Drawing True 로 처리
1071
                oOPCRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
1072
                SetListBoxItems(ListBox_Result, "Place Piping OPC.." & sUid & " (" & dLocationX & "," & dLocationY & ")..." & _iPipintOpccnt & " count ")
1073
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Piping OPC : " & sUid & "")
1074
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
1075
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oOPCRow(_XML_SYMBOL_Conn1_Uid).ToString())
1076
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oOPCRow(_XML_SYMBOL_Conn2_Uid).ToString())
1077
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1078
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
1079
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OPC Count : " & _iPipintOpccnt)
1080

    
1081
                Dim dConn_X1 As Double, dConn_Y1 As Double, dConn_X2 As Double, dConn_Y2 As Double
1082
                _Placement.PIDConnectPointLocation(oLMSymbol, 1, dConn_X1, dConn_Y1)
1083
                _Placement.PIDConnectPointLocation(oLMSymbol, 2, dConn_X2, dConn_Y2)
1084

    
1085
                'Dim oAddrow As DataRow = _ResultModeling_DT.NewRow()
1086
                'oAddrow(_Modeling_Uid) = sUid
1087
                'oAddrow(_Modeling_Location_X) = dLocationX
1088
                'oAddrow(_Modeling_Location_Y) = dLocationY
1089
                'oAddrow(_Modeling_LineNoUid) = sLineUid
1090
                'oAddrow(_Modeling_Type) = sSymbolCompType
1091
                'oAddrow(_Modeling_Connection1_X) = dConn_X1
1092
                'oAddrow(_Modeling_Connection1_Y) = dConn_Y1
1093
                'oAddrow(_Modeling_Connection2_X) = dConn_X2
1094
                'oAddrow(_Modeling_Connection2_X) = dConn_Y2
1095
                'oAddrow(_Modeling_LMSymbol) = oLMSymbol
1096

    
1097
                '_ResultModeling_DT.Rows.Add(oAddrow)
1098
            End If
1099
            _Itemcnt = _Itemcnt + 1
1100
            Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1101
            SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1102
            Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1103
            Return oLMSymbol
1104
        Catch ex As Exception
1105

    
1106
        End Try
1107
        Return Nothing
1108

    
1109
    End Function
1110

    
1111
    Private Sub AddProgress()
1112
        _Itemcnt = _Itemcnt + 1
1113
        Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1114
        SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1115
        Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1116
    End Sub
1117
    Private Function DrawSymbol(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal oLine_Dt As DataTable) As Boolean
1118
        Try
1119

    
1120
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1121
                Dim oAttributeRow() As DataRow
1122
            If oAttribute_Dt.Rows.Count > 0 Then
1123
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1124
            End If
1125

    
1126
            If oSymbolRow.Length > 0 Then
1127
                Dim oDatasource As Object = _Placement.PIDDataSource
1128
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1129
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1130
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1131
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1132
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1133
                Dim dAngle As Double = 0.0
1134
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1135
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1136
                End If
1137

    
1138
                Dim objSymbol As LMSymbol
1139
                Dim dLocationX As Double = 0.0
1140
                Dim dLocationY As Double = 0.0
1141
                Dim dX As Double = 0.0
1142
                Dim dY As Double = 0.0
1143

    
1144
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1145
                    dX = dLocationX
1146
                    dY = dLocationY
1147
                    If sSymbolCompType = "" Or sSymbolCompType = "Piping OPC's" Then
1148
                        FindConnectionLine(oLine_Dt, dX, dY)
1149
                    End If
1150

    
1151
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1152
                    Dim oInstrument As LMInstrument
1153
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
1154
                        _iInstrumentcnt = _iInstrumentcnt + 1
1155
                        objSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1156
                        SetListBoxItems(ListBox_Result, "Place Instrument..(" & dLocationX & "," & dLocationY & ")..." & _iInstrumentcnt & " count ")
1157
                        oInstrument = oDatasource.GetInstrument(objSymbol.ModelItemID)
1158
                        Try
1159
                            If oAttributeRow.Length > 0 Then
1160
                                For Each oAttribute In oAttributeRow
1161
                                    Try
1162
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1163
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1164
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1165
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
1166
                                    Catch ex As Exception
1167

    
1168
                                    End Try
1169

    
1170
                                Next
1171
                                oInstrument.Commit()
1172
                            End If
1173
                        Catch ex As Exception
1174
                        End Try
1175
                    ElseIf sSymbolCompType.ToUpper() = _DB_FITTINGS.ToUpper() Then
1176
                        _iValvecnt = _iValvecnt + 1
1177
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1178
                        SetListBoxItems(ListBox_Result, "Place Valve..(" & dLocationX & "," & dLocationY & ")..." & _iValvecnt & " count ")
1179

    
1180
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_FITTINGS.ToUpper() Then
1181
                        _iFittingcnt = _iFittingcnt + 1
1182
                        If sSystemPath.Contains(",") Then
1183

    
1184
                            Dim sDuplicatePath As String() = sSystemPath.Split(",")
1185
                            Dim sMainSymbol As String = ""
1186
                            Dim sSubSymbol As String = ""
1187
                            For Each sPath In sDuplicatePath
1188
                                If sMainSymbol = "" Then
1189
                                    sMainSymbol = sPath.Replace(vbLf, "")
1190
                                Else
1191
                                    sSubSymbol = sPath.Replace(vbLf, "")
1192
                                End If
1193
                            Next
1194
                            Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1195
                            Dim dConnpos_x As Double = 0.0
1196
                            Dim dConnpos_y As Double = 0.0
1197
                            _Placement.PIDConnectPointLocation(oSymbolObj, 2, dConnpos_x, dConnpos_y)
1198
                            '   _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y, dAngle, TargetItem:=oSymbolObj.AsLMRepresentation)
1199
                            _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y,, dAngle)
1200

    
1201
                        Else
1202
                            _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1203
                        End If
1204

    
1205

    
1206
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1207
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() And sClass.ToUpper() = _SYMBOL_ACTUATORS.ToUpper() Then
1208
                        _iFittingcnt = _iFittingcnt + 1
1209
                        Dim sDuplicatePath As String() = sSystemPath.Split(",")
1210
                        Dim sMainSymbol As String = ""
1211
                        Dim sSubSymbol As String = ""
1212
                        For Each sPath In sDuplicatePath
1213
                            If sMainSymbol = "" Then
1214
                                sMainSymbol = sPath.Replace(vbLf, "")
1215
                            Else
1216
                                sSubSymbol = sPath.Replace(vbLf, "")
1217
                            End If
1218
                        Next
1219
                        Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1220
                        Dim dSymbolpos_x As Double = oSymbolObj.XCoordinate
1221
                        Dim dSymbolpos_y As Double = oSymbolObj.YCoordinate
1222
                        _Placement.PIDPlaceSymbol(sSubSymbol, dSymbolpos_x, dSymbolpos_y, , dAngle, TargetItem:=oSymbolObj.AsLMAItem)
1223

    
1224
                    Else
1225
                        _iFittingcnt = _iFittingcnt + 1
1226
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1227
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1228
                    End If
1229

    
1230
                End If
1231
                _Itemcnt = _Itemcnt + 1
1232
                Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1233
                SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1234
                Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1235
            End If
1236

    
1237
        Catch ex As Exception
1238
            Return False
1239
        End Try
1240
    End Function
1241

    
1242

    
1243
    Private Sub FindConnectionLine(ByVal oLine_Dt As DataTable, ByRef dx As Double, ByRef dy As Double)
1244

    
1245
        Try
1246
            For Each oRow In oLine_Dt.Rows
1247
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1248
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1249
                Dim d기준s_x As Double = 0
1250
                Dim d기준s_y As Double = 0
1251
                Dim d기준e_x As Double = 0
1252
                Dim d기준e_y As Double = 0
1253
                ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1254
                ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1255
                If dx + 300 > d기준s_x And dx - 300 < d기준s_x And dy + 300 > d기준s_y And dy - 300 < d기준s_y Then
1256
                    dx = d기준s_x
1257
                    dy = d기준s_y
1258
                ElseIf dx + 300 > d기준e_x And dx - 300 < d기준e_x And dy + 300 > d기준e_y And dy - 300 < d기준e_y Then
1259
                    dx = d기준e_x
1260
                    dy = d기준e_y
1261
                End If
1262
            Next
1263
        Catch ex As Exception
1264
        End Try
1265
    End Sub
1266

    
1267

    
1268
    Dim _라인보정기준값 As Integer = 10
1269

    
1270
    Private Function 라인보정(ByRef oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1271
                                      ByRef dex As Double, ByRef dey As Double)
1272
        Try
1273
            Dim bCheck라인 As Boolean = False
1274
            '일치하는 Line 찾기
1275
            For Each oRow In oLine_Dt.Rows
1276
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1277
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1278
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1279
                If sBUid <> sUid Then
1280
                    Dim d기준s_x As Double = 0
1281
                    Dim d기준s_y As Double = 0
1282
                    Dim d기준e_x As Double = 0
1283
                    Dim d기준e_y As Double = 0
1284
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1285
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1286

    
1287
                    If (dsx = d기준s_x And dsy = d기준s_y) Or (dsx = d기준e_x And dsy = d기준e_y) Or
1288
                       (dex = d기준s_x And dey = d기준s_y) Or (dex = d기준e_x And dey = d기준e_y) Then
1289
                        bCheck라인 = True
1290
                    End If
1291
                End If
1292
            Next
1293

    
1294
            If bCheck라인 = False Then
1295
                For Each oRow In oLine_Dt.Rows
1296
                    Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1297
                    Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1298
                    Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1299
                    If sBUid <> sUid Then
1300
                        Dim d기준s_x As Double = 0
1301
                        Dim d기준s_y As Double = 0
1302
                        Dim d기준e_x As Double = 0
1303
                        Dim d기준e_y As Double = 0
1304
                        ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1305
                        ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1306
                        If ((dsx - _라인보정기준값 <= d기준s_x And dsx + _라인보정기준값 >= d기준s_x) And (dsy - _라인보정기준값 <= d기준s_y And dsy + _라인보정기준값 >= d기준s_y)) Then
1307
                            oRow(_XML_LINE_STARTPOINT) = dsx & "," & dsy
1308
                            bCheck라인 = True
1309
                            Exit For
1310
                        ElseIf ((dsx - _라인보정기준값 <= d기준e_x And dsx + _라인보정기준값 >= d기준e_x) And (dsy - _라인보정기준값 <= d기준e_y And dsy + _라인보정기준값 >= d기준e_y)) Then
1311
                            oRow(_XML_LINE_ENDPOINT) = dsx & "," & dsy
1312
                            bCheck라인 = True
1313
                            Exit For
1314
                        ElseIf ((dex - _라인보정기준값 <= d기준s_x And dex + _라인보정기준값 >= d기준s_x) And (dey - _라인보정기준값 <= d기준s_y And dey + _라인보정기준값 >= d기준s_y)) Then
1315
                            oRow(_XML_LINE_STARTPOINT) = dex & "," & dey
1316
                            bCheck라인 = True
1317
                            Exit For
1318
                        ElseIf ((dex - _라인보정기준값 <= d기준e_x And dex + _라인보정기준값 >= d기준e_x) And (dey - _라인보정기준값 <= d기준e_y And dey + _라인보정기준값 >= d기준e_y)) Then
1319
                            oRow(_XML_LINE_ENDPOINT) = dex & "," & dey
1320
                            bCheck라인 = True
1321
                            Exit For
1322
                        End If
1323

    
1324
                    End If
1325
                Next
1326
            End If
1327

    
1328
            Return bCheck라인
1329
        Catch ex As Exception
1330
            Return False
1331
        End Try
1332

    
1333

    
1334
    End Function
1335

    
1336
    Private Function FindOverlapLine(ByVal oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1337
                                      ByRef dex As Double, ByRef dey As Double)
1338
        Try
1339
            Dim bCheckOverlap As Boolean = False
1340
            For Each oRow In oLine_Dt.Rows
1341
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1342
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1343
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1344
                If sBUid <> sUid Then
1345
                    Dim d기준s_x As Double = 0
1346
                    Dim d기준s_y As Double = 0
1347
                    Dim d기준e_x As Double = 0
1348
                    Dim d기준e_y As Double = 0
1349
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1350
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1351
                    If (d기준s_x <= dsx And d기준e_x >= dex And
1352
                        d기준s_y <= dsy And d기준e_y >= dey) Then
1353
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1354
                        If dsy - d기준s_y > d기준e_y - dey Then
1355
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1356
                            If dResultCalc < 10 Then
1357
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1358
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1359
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1360
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1361
                                If dCalcStartY = 0 Then
1362
                                    dey = d기준e_y
1363
                                Else
1364
                                    dey = dCalcStartY
1365
                                End If
1366
                            End If
1367
                        Else
1368
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1369
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1370
                            If dResultCalc < 10 Then
1371
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1372
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1373
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1374
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1375
                                If dCalcStartY = 0 Then
1376
                                    dsy = d기준s_y
1377
                                Else
1378
                                    dsy = dCalcStartY
1379
                                End If
1380
                            End If
1381
                        End If
1382
                        bCheckOverlap = True
1383
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1384
                            d기준s_y <= dey And d기준e_y >= dsy Then
1385
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1386
                        If dey - d기준s_y > d기준e_y - dsy Then
1387
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1388
                            If dResultCalc < 10 Then
1389
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1390
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1391
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1392
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1393
                                If dCalcStartY = 0 Then
1394
                                    dsy = d기준e_y
1395
                                Else
1396
                                    dsy = dCalcStartY
1397
                                End If
1398

    
1399
                            End If
1400
                            '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1401
                        Else
1402
                            '  Dim dResultCalc As Double = (Math.Abs((dsy - d기준s_y)) / Math.Abs((d기준e_y - dey))) * 100
1403
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1404
                            If dResultCalc < 10 Then
1405
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1406
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1407
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1408
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1409
                                If dCalcStartY = 0 Then
1410
                                    dey = d기준e_y
1411
                                Else
1412
                                    dey = dCalcStartY
1413
                                End If
1414
                            End If
1415
                        End If
1416
                        bCheckOverlap = True
1417
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1418
                            d기준s_y <= dey And d기준e_y >= dsy Then
1419

    
1420
                        If dsx - d기준s_x > d기준e_x - dex Then
1421
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1422
                            If dResultCalc < 10 Then
1423
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1424
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1425
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1426
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1427
                                If dCalcStartX = 0 Then
1428
                                    dex = d기준e_x
1429
                                Else
1430
                                    dex = dCalcStartX
1431
                                End If
1432
                            End If
1433
                        Else
1434
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1435
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1436
                            If dResultCalc < 10 Then
1437
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1438
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1439
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1440
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1441
                                If dCalcStartX = 0 Then
1442
                                    dsx = d기준s_x
1443
                                Else
1444
                                    dsx = dCalcStartX
1445
                                End If
1446
                            End If
1447
                        End If
1448
                        bCheckOverlap = True
1449
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1450
                            d기준s_y <= dey And d기준e_y >= dsy Then
1451

    
1452
                        If dex - d기준s_x > d기준e_x - dsx Then
1453
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1454
                            If dResultCalc < 10 Then
1455
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1456
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1457
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1458
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1459
                                If dCalcStartX = 0 Then
1460
                                    dsx = d기준e_x
1461
                                Else
1462
                                    dsx = dCalcStartX
1463
                                End If
1464
                            End If
1465
                        Else
1466
                            ' Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1467
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1468
                            If dResultCalc < 10 Then
1469
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1470
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1471
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1472
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1473
                                If dCalcStartX = 0 Then
1474
                                    dex = d기준s_x
1475
                                Else
1476
                                    dex = dCalcStartX
1477
                                End If
1478
                            End If
1479

    
1480
                        End If
1481
                        bCheckOverlap = True
1482
                    End If
1483
                End If
1484
            Next
1485

    
1486
            Return bCheckOverlap
1487
        Catch ex As Exception
1488
            Return False
1489
        End Try
1490
    End Function
1491

    
1492
    Private Sub CalcSperateLine(ByRef dStartX As Double, ByRef dStartY As Double,
1493
                                      ByRef dEndX As Double, ByRef dEndY As Double)
1494
        Try
1495
            Dim dRange As Double = 1 'Line 전체 길이의 10%씩 늘이기
1496
            If Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
1497
                Dim dCalc_x As Double = Math.Abs(dStartX - dEndX) * 0.1
1498
                If dStartX > dEndX Then
1499
                    dStartX = dStartX + dCalc_x
1500
                    dEndX = dEndX - dCalc_x
1501
                Else
1502
                    dEndX = dEndX + dCalc_x
1503
                    dStartX = dStartX - dCalc_x
1504
                End If
1505
            Else
1506
                Dim dCalc_y As Double = Math.Abs(dStartY - dEndY) * 0.1
1507
                If dStartY > dEndY Then
1508
                    dStartY = dStartY + dCalc_y
1509
                    dEndY = dEndY - dCalc_y
1510
                Else
1511
                    dEndY = dEndY + dCalc_y
1512
                    dStartY = dStartY - dCalc_y
1513
                End If
1514
            End If
1515

    
1516
        Catch ex As Exception
1517

    
1518
        End Try
1519

    
1520

    
1521
    End Sub
1522

    
1523
    Private Function DrawLineNo(ByVal oPipeRun_Dt As DataTable, ByVal CLine_No As Line_no) As Boolean
1524
        Try
1525
            Dim oDatasource As Object = _Placement.PIDDataSource
1526
            Dim sLocation = CLine_No.Location
1527
            Dim dLocationx As Double = 0.0
1528
            Dim dLocationy As Double = 0.0
1529

    
1530
            Dim dX As Double = 0.0
1531
            Dim dY As Double = 0.0
1532
            If ConvertPointBystring(sLocation, dLocationx, dLocationy) Then
1533
                dX = dLocationx
1534
                dY = dLocationy
1535

    
1536
                For Each oRow In oPipeRun_Dt.Rows
1537
                    Dim dStartx As Double = Double.Parse(oRow("startx").ToString())
1538
                    Dim dStarty As Double = Double.Parse(oRow("starty").ToString())
1539
                    Dim dEndx As Double = Double.Parse(oRow("endx").ToString())
1540
                    Dim dEndy As Double = Double.Parse(oRow("endy").ToString())
1541

    
1542
                    Dim dStartSum As Double = Math.Abs(dStartx - dLocationx) + Math.Abs(dStarty - dLocationy)
1543
                    Dim dEndSum As Double = Math.Abs(dEndx - dLocationx) + Math.Abs(dEndy - dLocationy)
1544
                    If dStartSum > dEndSum Then
1545
                        oRow("value") = dEndSum
1546
                    Else
1547
                        oRow("value") = dStartSum
1548
                    End If
1549

    
1550
                Next
1551
                Dim dataView As New DataView(oPipeRun_Dt)
1552
                dataView.Sort = " value asc"
1553
                Dim oDt As DataTable = dataView.ToTable()
1554
                If oDt.Rows.Count > 0 Then
1555
                    Try
1556
                        Dim oPiperun As LMPipeRun = CType(oDt.Rows(0)("Piperun"), LMPipeRun)
1557
                        ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1558
                        Dim dLineNoLocation(2) As Double
1559
                        dLineNoLocation(1) = dX
1560
                        dLineNoLocation(2) = dY
1561
                        'Label
1562
                        Dim sSystemPath As String = CLine_No.SystemPath
1563
                        Dim dAngle As Double = CLine_No.Angle
1564
                        Dim labelpersist As LMLabelPersist
1565

    
1566
                        For Each representation In oPiperun.Representations
1567
                            If representation.RepresentationType = "Connector" Then
1568
                                labelpersist = _Placement.PIDPlaceLabel(sSystemPath,
1569
                                dLineNoLocation,, dAngle, LabeledItem:=representation)
1570
                                _iPipeLineNocnt = _iPipeLineNocnt + 1
1571
                                SetListBoxItems(ListBox_Result, "Place PipeLineNo Label.." & CLine_No.Uid & " (" & dLocationx & "," & dLocationy & ")..." & _iPipeLineNocnt & " count ")
1572

    
1573
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & CLine_No.Uid & "")
1574
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & CLine_No.Text)
1575
                                'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1576
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Origina lPoint : " & dLocationx & "," & dLocationy)
1577
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "PipeLineNo Count : " & _iPipeLineNocnt)
1578
                            End If
1579
                        Next
1580
                    Catch ex As Exception
1581

    
1582
                    End Try
1583

    
1584

    
1585
                End If
1586

    
1587

    
1588

    
1589
                Return True
1590
            Else
1591
                Return False
1592
            End If
1593

    
1594
        Catch ex As Exception
1595
            Return False
1596
        End Try
1597
    End Function
1598

    
1599

    
1600
    Private Sub InitItemCount()
1601
        _iPipeLineNocnt = 0
1602
        _iPipecnt = 1
1603
        _iFittingcnt = 1
1604
        _iValvecnt = 0
1605
        _iInstrumentcnt = 0
1606
        _iEquipmentcnt = 0
1607
        _iNozzlecnt = 1
1608
        _iPipintOpccnt = 0
1609

    
1610
    End Sub
1611

    
1612
    Private Function GetAllCheckNodeCount() As Integer
1613
        _allItem = 0
1614
        For i = 0 To Tree_Result.Nodes.Count - 1
1615
            For j = 0 To Tree_Result.Nodes(i).Nodes.Count - 1
1616
                For k = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes.Count - 1
1617
                    For l = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes.Count - 1
1618
                        If Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes(l).Checked = True Then
1619
                            _allItem = _allItem + 1
1620
                        End If
1621
                    Next
1622
                Next
1623
            Next
1624
        Next
1625
        Return _allItem
1626
    End Function
1627

    
1628

    
1629
    ''' <summary>
1630
    ''' Equipment 모델링
1631
    ''' </summary>
1632
    Private Sub EquipmentModeling(ByVal oDwg_Dt As DataTable)
1633
        For Each oDrwing As TreeNode In Tree_Result.Nodes
1634
            For Each oDwgNode As TreeNode In oDrwing.Nodes
1635
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
1636
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
1637
                If CDrawing IsNot Nothing Then
1638
                    If OpenSPPID(oDwg_Dt, oDwgNode.Text) Then
1639

    
1640
                        For Each oNode As TreeNode In oDwgNode.Nodes
1641
                            Dim iItemcnt As Integer = 0
1642
                            Dim sNodeUid As String = oNode.Name
1643
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
1644
                            '1.Equipment
1645
                            '2.Piping OPC
1646
                            '3.OPC 시작되는 Line
1647
                            'Equipment 생성
1648
                            Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
1649
                            If CEqpNo IsNot Nothing Then
1650
                                Dim oSymbol_Dt As DataTable = CEqpNo.Dt_Equipment
1651
                                Dim oAttribute_Dt As DataTable = CEqpNo.Dt_Attribute
1652
                                For Each oSymbolNode As TreeNode In oNode.Nodes
1653
                                    If oSymbolNode.Checked Then
1654
                                        Dim sUid As String = oSymbolNode.Name
1655
                                        PlaceEquipment(sUid, oSymbol_Dt, oAttribute_Dt, CEqpNo.Text)
1656
                                    End If
1657
                                Next
1658
                            End If
1659
                        Next
1660
                    End If
1661
                End If
1662
            Next
1663
        Next
1664
    End Sub
1665

    
1666
    Private Sub ManualCheckNode(ByRef oDt As DataTable)
1667
        For Each oDrwing As TreeNode In Tree_Result.Nodes
1668
            For Each oDwgNode As TreeNode In oDrwing.Nodes
1669
                For Each oNode As TreeNode In oDwgNode.Nodes
1670
                    For Each oSymbolNode As TreeNode In oNode.Nodes
1671
                        Dim sUid As String = oSymbolNode.Name
1672
                        'Dim oSelectRows() As DataRow = oDt.Select("[" & _XML_SYMBOL_UID & "] = '" & sUid &
1673
                        '                                      "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False'")
1674
                        If oSymbolNode.Checked Then
1675
                            Dim oSelectRows() As DataRow = oDt.Select("[" & _XML_SYMBOL_UID & "] = '" & sUid & "'")
1676
                            If oSelectRows.Length = 1 Then
1677
                                oSelectRows(0)(_XML_SYMBOL_DRAWING_TF) = "FALSE"
1678

    
1679
                                If oSymbolNode.Checked Then
1680

    
1681
                                    oSelectRows(0)(_XML_SYMBOL_Check) = "TRUE"
1682
                                Else
1683
                                    oSelectRows(0)(_XML_SYMBOL_Check) = "FALSE"
1684
                                End If
1685
                            End If
1686

    
1687
                        End If
1688

    
1689
                    Next
1690
                Next
1691
            Next
1692
        Next
1693

    
1694
    End Sub
1695

    
1696
    Private Function FinalSymbolModeling(ByVal oCurrentSymbolRow As DataRow, ByVal oLine_Dt As DataTable, ByVal oSymbol_Dt As DataTable,
1697
                                  ByVal oAttribute_Dt As DataTable) As String
1698
        Dim sReturnUid As String = ""
1699
        Dim sOriginalPoint As String = ""
1700
        Dim dOriginal_x As Double = 0.0
1701
        Dim dOriginal_y As Double = 0.0
1702

    
1703
        Dim dConn1_x As Double = 0.0
1704
        Dim dConn1_y As Double = 0.0
1705
        Dim dConn2_x As Double = 0.0
1706
        Dim dConn2_y As Double = 0.0
1707
        Dim dConn3_x As Double = 0.0
1708
        Dim dConn3_y As Double = 0.0
1709
        Dim dConn4_x As Double = 0.0
1710
        Dim dConn4_y As Double = 0.0
1711

    
1712
        Dim sUid As String = oCurrentSymbolRow(_XML_SYMBOL_UID)
1713
        Dim sSystemPath As String = oCurrentSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
1714
        Dim dAngle As Double = oCurrentSymbolRow(_XML_SYMBOL_ANGLE)
1715
        Dim sLineNoText As String = oCurrentSymbolRow(_XML_LINENO_TEXT)
1716
        Dim sLineNoUid As String = oCurrentSymbolRow(_XML_LINE_LINENOUID).ToString()
1717
        sOriginalPoint = oCurrentSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
1718
        Dim sSymbolCompType As String = oCurrentSymbolRow(_XML_SYMBOL_TYPE).ToString()
1719
        ConvertPointBystring(sOriginalPoint, dOriginal_x, dOriginal_y)
1720
        ConvertPointByImage(dOriginal_x, dOriginal_y, _IMG_X, _IMG_Y)
1721

    
1722
        Dim sChildItem As String = oCurrentSymbolRow(_XML_SYMBOL_CHILD)
1723

    
1724
        'Connection 정보 체크, 모델링 되어 있는지 유무
1725
        '양 커넥션의 모델링 유무를 체크한다.
1726
        Dim sConn1Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn1_Uid).ToString()
1727
        Dim sConn2Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn2_Uid).ToString()
1728
        Dim sConn3Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn3_Uid).ToString()
1729
        Dim sConn4Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn4_Uid).ToString()
1730

    
1731
        Dim sConn1Type As String = ""
1732
        Dim sConn2Type As String = ""
1733
        Dim sConn3Type As String = ""
1734
        Dim sConn4Type As String = ""
1735

    
1736
        Dim oConn1Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn1Uid & "'")
1737
        If oConn1Rows.Length = 0 Then
1738
            oConn1Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn1Uid & "'")
1739
            If oConn1Rows.Length = 1 Then
1740
                sConn1Type = "Line"
1741
            End If
1742
        Else
1743
            sConn1Type = "Symbol"
1744
        End If
1745

    
1746
        Dim oConn2Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn2Uid & "'")
1747
        If oConn2Rows.Length = 0 Then
1748
            oConn2Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn2Uid & "'")
1749
            If oConn2Rows.Length = 1 Then
1750
                sConn2Type = "Line"
1751
            End If
1752
        Else
1753
            sConn2Type = "Symbol"
1754
        End If
1755

    
1756
        Dim oConn3Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn3Uid & "'")
1757
        If oConn3Rows.Length = 0 Then
1758
            oConn3Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn3Uid & "'")
1759
            If oConn3Rows.Length = 1 Then
1760
                sConn3Type = "Line"
1761
            End If
1762
        Else
1763
            sConn3Type = "Symbol"
1764
        End If
1765

    
1766
        Dim oConn4Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn4Uid & "'")
1767
        If oConn4Rows.Length = 0 Then
1768
            oConn4Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn4Uid & "'")
1769
            If oConn4Rows.Length = 1 Then
1770
                sConn4Type = "Line"
1771
            End If
1772
        Else
1773
            sConn4Type = "Symbol"
1774
        End If
1775

    
1776
        Dim oStartLMConnector As LMConnector = Nothing
1777
        Dim oEndLMConnector As LMConnector = Nothing
1778
        Dim objInputs As PlaceRunInputs
1779
        objInputs = New PlaceRunInputs
1780
        Dim iModelingType As Integer = 0
1781
        If sConn1Type <> "" Then
1782
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn1_Point).ToString(), dConn1_x, dConn1_y)
1783
        End If
1784
        If sConn2Type <> "" Then
1785
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn2_Point).ToString(), dConn2_x, dConn2_y)
1786
        End If
1787
        If sConn3Type <> "" Then
1788
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn3_Point).ToString(), dConn3_x, dConn3_y)
1789
        End If
1790
        If sConn4Type <> "" Then
1791
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn4_Point).ToString(), dConn4_x, dConn4_y)
1792
        End If
1793

    
1794

    
1795

    
1796

    
1797

    
1798
        'If sConn1Type = "Line" Then
1799
        '    Dim sStartpoint As String = oCurrentSymbolRow(0)(_XML_SYMBOL_Conn1_Point).ToString()
1800
        '    ConvertPointBystring(sStartpoint, dConn1_x, dConn1_y)
1801
        '    ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
1802
        'ElseIf sConn1Type = "Symbol" Then
1803
        '    ConvertPoint(oCurrentSymbolRow(0)(_XML_SYMBOL_Conn1_Point).ToString(), dConn1_x, dConn1_y)
1804
        'End If
1805

    
1806
        'If sConn2Type = "Line" Then
1807
        '    Dim sEndpoint As String = oCurrentSymbolRow(0)(_XML_SYMBOL_Conn2_Point).ToString()
1808
        '    ConvertPointBystring(sEndpoint, dConn2_x, dConn2_y)
1809
        '    ConvertPointByImage(dConn2_x, dConn2_y, _IMG_X, _IMG_Y)
1810
        'ElseIf sConn2Type = "Symbol" Then
1811
        '    ConvertPoint(oCurrentSymbolRow(0)(_XML_SYMBOL_Conn2_Point).ToString(), dConn2_x, dConn2_y)
1812
        'End If
1813

    
1814
        'If sConn3Type = "Line" Then
1815
        '    Dim sStartpoint As String = oCurrentSymbolRow(0)(_XML_SYMBOL_Conn3_Point).ToString()
1816
        '    ConvertPointBystring(sStartpoint, dConn3_x, dConn3_y)
1817
        '    ConvertPointByImage(dConn3_x, dConn3_y, _IMG_X, _IMG_Y)
1818
        'ElseIf sConn3Type = "Symbol" Then
1819
        '    ConvertPoint(oCurrentSymbolRow(0)(_XML_SYMBOL_Conn3_Point).ToString(), dConn3_x, dConn3_y)
1820
        'End If
1821

    
1822
        'If sConn4Type = "Line" Then
1823
        '    Dim sEndpoint As String = oCurrentSymbolRow(0)(_XML_SYMBOL_Conn4_Point).ToString()
1824
        '    ConvertPointBystring(sEndpoint, dConn4_x, dConn4_y)
1825
        '    ConvertPointByImage(dConn4_x, dConn4_y, _IMG_X, _IMG_Y)
1826
        'ElseIf sConn4Type = "Symbol" Then
1827
        '    ConvertPoint(oCurrentSymbolRow(0)(_XML_SYMBOL_Conn4_Point).ToString(), dConn4_x, dConn4_y)
1828
        'End If
1829

    
1830

    
1831

    
1832
        'If sConn1Type = "Line" And sConn2Type = "Line" Then
1833
        '    Dim sStartpoint As String = oConn1Rows(_XML_LINE_STARTPOINT).ToString()
1834
        '    ConvertPointBystring(sStartpoint, dConn1_x, dConn1_y)
1835
        '    ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
1836
        '    Dim sEndpoint As String = oConn1Rows(_XML_LINE_ENDPOINT).ToString()
1837
        '    ConvertPointBystring(sEndpoint, dConn2_x, dConn2_y)
1838
        '    ConvertPointByImage(dConn2_x, dConn2_y, _IMG_X, _IMG_Y)
1839

    
1840
        'ElseIf sConn1Type = "Line" And sConn2Type = "Symbol" Then
1841
        '    Dim sStartpoint As String = oConn1Rows(_XML_LINE_STARTPOINT).ToString()
1842
        '    ConvertPointBystring(sStartpoint, dConn1_x, dConn1_y)
1843
        '    ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
1844

    
1845
        '    ConvertPoint(oConn1Rows(0)(_XML_SYMBOL_Conn2_Point).ToString(), dConn2_x, dConn2_y)
1846
        'ElseIf sConn1Type = "Symbol" And sConn2Type = "Line" Then
1847
        '    ConvertPoint(oConn1Rows(0)(_XML_SYMBOL_Conn1_Point).ToString(), dConn1_x, dConn1_y)
1848

    
1849
        '    Dim sEndpoint As String = oConn1Rows(_XML_LINE_ENDPOINT).ToString()
1850
        '    ConvertPointBystring(sEndpoint, dConn2_x, dConn2_y)
1851
        '    ConvertPointByImage(dConn2_x, dConn2_y, _IMG_X, _IMG_Y)
1852

    
1853
        'ElseIf sConn1Type = "Symbol" And sConn2Type = "Symbol" Then
1854
        '    ConvertPoint(oConn1Rows(0)(_XML_SYMBOL_Conn1_Point).ToString(), dConn1_x, dConn1_y)
1855
        '    ConvertPoint(oConn1Rows(0)(_XML_SYMBOL_Conn2_Point).ToString(), dConn2_x, dConn2_y)
1856
        'ElseIf sConn1Type = "Line" And sConn2Type = "" Then
1857
        '    Dim sStartpoint As String = oConn1Rows(_XML_LINE_STARTPOINT).ToString()
1858
        '    ConvertPointBystring(sStartpoint, dConn1_x, dConn1_y)
1859
        '    ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
1860

    
1861
        'ElseIf sConn1Type = "Symbol" And sConn2Type = "" Then
1862
        '    iModelingType = 6
1863
        'ElseIf sConn1Type = "" And sConn2Type = "Line" Then
1864
        '    iModelingType = 7
1865
        'ElseIf sConn1Type = "" And sConn2Type = "Symbol" Then
1866
        '    iModelingType = 8
1867
        'ElseIf sConn3Type = "Line" And sConn4Type = "Line" Then
1868
        '        iModelingType = 4
1869
        '    ElseIf sConn3Type = "Line" And sConn4Type = "Symbol" Then
1870
        '        iModelingType = 4
1871
        '    ElseIf sConn3Type = "Symbol" And sConn4Type = "Line" Then
1872
        '        iModelingType = 4
1873
        '    ElseIf sConn3Type = "Symbol" And sConn4Type = "Symbol" Then
1874
        '        iModelingType = 4
1875
        '    ElseIf sConn3Type = "Line" And sConn4Type = "" Then
1876
        '        iModelingType = 5
1877
        '    ElseIf sConn3Type = "Symbol" And sConn4Type = "" Then
1878
        '        iModelingType = 5
1879
        '    ElseIf sConn3Type = "" And sConn4Type = "Line" Then
1880
        '        iModelingType = 6
1881
        '    ElseIf sConn3Type = "" And sConn4Type = "Symbol" Then
1882
        '        iModelingType = 6
1883
        '    Else
1884
        '        iModelingType = 7
1885
        '    End If
1886

    
1887
        'If iModelingType = 1 Then
1888
        '        ConvertPoint(oConn1Rows(0)(_XML_SYMBOL_Conn1_Point).ToString(), dConn1_x, dConn1_y)
1889
        '        ConvertPoint(oConn1Rows(0)(_XML_SYMBOL_Conn2_Point).ToString(), dConn2_x, dConn2_y)
1890
        '    ElseIf iModelingType = 2 Then
1891
        '        ConvertPoint(oConn1Rows(0)(_XML_SYMBOL_Conn1_Point).ToString(), dConn1_x, dConn1_y)
1892
        '    ElseIf iModelingType = 3 Then
1893
        '        ConvertPoint(oConn2Rows(0)(_XML_SYMBOL_Conn2_Point).ToString(), dConn2_x, dConn2_y)
1894
        '    ElseIf iModelingType = 4 Then
1895
        '        ConvertPoint(oConn3Rows(0)(_XML_SYMBOL_Conn3_Point).ToString(), dConn3_x, dConn3_y)
1896
        '        ConvertPoint(oConn4Rows(0)(_XML_SYMBOL_Conn4_Point).ToString(), dConn4_x, dConn4_y)
1897
        '    ElseIf iModelingType = 5 Then
1898
        '        ConvertPoint(oConn3Rows(0)(_XML_SYMBOL_Conn3_Point).ToString(), dConn3_x, dConn3_y)
1899
        '    ElseIf iModelingType = 6 Then
1900
        '        ConvertPoint(oConn4Rows(0)(_XML_SYMBOL_Conn4_Point).ToString(), dConn4_x, dConn4_y)
1901
        '    End If
1902
        Dim sFirstUid As String = ""
1903
        Dim sSecondUid As String = ""
1904
        Dim oLMSymbol As LMSymbol = Nothing
1905
        Dim dPreConn_x As Double = 0
1906
        Dim dPreConn_y As Double = 0
1907
        If sConn1Type <> "" And sConn2Type <> "" Then
1908
            If sConn1Type = "Line" Then
1909
                CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector)
1910
            Else
1911
                CheckConnectionSymbolToSymbol(oConn1Rows, dConn1_x, dConn1_y, oStartLMConnector)
1912
            End If
1913

    
1914
            If sConn2Type = "Line" Then
1915
                CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector)
1916
            Else
1917
                CheckConnectionSymbolToSymbol(oConn2Rows, dConn2_x, dConn2_y, oEndLMConnector)
1918
            End If
1919

    
1920
            sFirstUid = CheckExistModeling(oConn1Rows(0))
1921
            sSecondUid = CheckExistModeling(oConn2Rows(0))
1922
            Dim oCurrentLMConnector As LMConnector = Nothing
1923
            'If oStartLMConnector IsNot Nothing And oEndLMConnector IsNot Nothing Then
1924

    
1925
            '    '라인을 센터점에 먼저그리기
1926
            '    'If dConn1_x <> dConn2_x And dConn1_y <> dConn2_y Then
1927
            '    '    'Angle Valve
1928
            '    '    '라인두개 긋기
1929
            '    '    objInputs.Clear()
1930
            '    '    '   objInputs.AddPoint(dConn1_x, dConn1_y)
1931
            '    '    objInputs.AddConnectorTarget(oStartLMConnector, dConn1_x, dConn1_y)
1932
            '    '    objInputs.AddPoint(dOriginal_x, dOriginal_y)
1933

    
1934

    
1935
            '    '    Dim objItem As LMAItem
1936
            '    '    Dim sLineType As String = oConn1Rows(0)(_XML_LINE_TYPE).ToString()
1937
            '    '    Dim sLine1Path As String = GetPipeType(sLineType)
1938
            '    '    sLineType = oConn2Rows(0)(_XML_LINE_TYPE).ToString()
1939
            '    '    Dim sLine2Path As String = GetPipeType(sLineType)
1940
            '    '    If sLine1Path = sLine2Path Then
1941
            '    '        objItem = _Placement.PIDCreateItem(sLine1Path)
1942
            '    '        oCurrentLMConnector = _Placement.PIDPlaceRun(objItem, objInputs)
1943
            '    '    Else
1944
            '    '        '//서로다른선일경우 먼저 Symbol을 그리고 커넥션으로 부터 각 선까지 선을 잇는다.
1945
            '    '    End If
1946
            '    '    Dim sID_1 As String = ""
1947
            '    '    Dim sID_2 As String = ""
1948
            '    '    Dim sID_3 As String = ""
1949
            '    '    sID_1 = oStartLMConnector.ModelItemID
1950
            '    '    sID_2 = oCurrentLMConnector.ModelItemID
1951
            '    '    sID_3 = oEndLMConnector.ModelItemID
1952
            '    '    Try
1953

    
1954
            '    '        If sID_1 <> "" And sID_2 <> "" Then
1955
            '    '            Dim objSurvivorItem As LMAItem = Nothing
1956
            '    '            Dim oPipeRun1 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_1)
1957
            '    '            Dim oPipeRun2 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_2)
1958
            '    '            _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
1959
            '    '        End If
1960
            '    '    Catch ex As Exception
1961

    
1962
            '    '    End Try
1963
            '    '    objInputs.Clear()
1964
            '    '    '     objInputs.AddPoint(dOriginal_x, dOriginal_y)
1965
            '    '    objInputs.AddConnectorTarget(oStartLMConnector, dOriginal_x, dOriginal_y)
1966
            '    '    'objInputs.AddPoint(dConn2_x, dConn2_y)
1967
            '    '    objInputs.AddConnectorTarget(oEndLMConnector, dOriginal_x, dOriginal_y)
1968
            '    '    If sLine1Path = sLine2Path Then
1969
            '    '        objItem = _Placement.PIDCreateItem(sLine1Path)
1970
            '    '        oCurrentLMConnector = _Placement.PIDPlaceRun(objItem, objInputs)
1971
            '    '    Else
1972
            '    '        '//서로다른선일경우 먼저 Symbol을 그리고 커넥션으로 부터 각 선까지 선을 잇는다.
1973
            '    '    End If
1974

    
1975
            '    '    Try
1976
            '    '        sID_1 = oEndLMConnector.ModelItemID
1977
            '    '        sID_2 = oCurrentLMConnector.ModelItemID
1978
            '    '        If sID_1 <> "" And sID_2 <> "" Then
1979
            '    '            Dim objSurvivorItem As LMAItem = Nothing
1980
            '    '            Dim oPipeRun1 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_1)
1981
            '    '            Dim oPipeRun2 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_2)
1982
            '    '            _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
1983
            '    '        End If
1984
            '    '    Catch ex As Exception
1985
            '    '    End Try
1986
            '    'End If
1987
            'Else
1988
            '    If oStartLMConnector IsNot Nothing Then
1989
            '        dOriginal_x = dConn1_x
1990
            '        dOriginal_y = dConn1_y
1991
            '    Else
1992
            '        dOriginal_x = dConn2_x
1993
            '        dOriginal_y = dConn2_y
1994
            '    End If
1995
            'End If
1996
        ElseIf sConn1Type <> "" And sConn2Type = "" Then
1997
            If sConn1Type = "Line" Then
1998
                CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector)
1999
            Else
2000
                CheckConnectionSymbolToSymbol(oConn1Rows, dConn1_x, dConn1_y, oStartLMConnector)
2001
                dOriginal_x = dConn1_x
2002
                dOriginal_y = dConn1_y
2003
            End If
2004

    
2005
            sFirstUid = CheckExistModeling(oConn1Rows(0))
2006

    
2007
        ElseIf sConn1Type = "" And sConn2Type <> "" Then
2008

    
2009
            If sConn1Type = "Line" Then
2010
                CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector)
2011
            Else
2012
                CheckConnectionSymbolToSymbol(oConn2Rows, dConn2_x, dConn2_y, oEndLMConnector)
2013
                dOriginal_x = dConn2_x
2014
                dOriginal_y = dConn2_y
2015
            End If
2016
            sSecondUid = CheckExistModeling(oConn2Rows(0))
2017

    
2018
        ElseIf sConn3Type <> "" And sConn4Type <> "" Then
2019
            If sConn1Type = "Line" Then
2020
                CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector)
2021
            Else
2022
                CheckConnectionSymbolToSymbol(oConn3Rows, dConn3_x, dConn3_y, oStartLMConnector)
2023
            End If
2024

    
2025
            If sConn2Type = "Line" Then
2026
                CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector)
2027
            Else
2028
                CheckConnectionSymbolToSymbol(oConn4Rows, dConn4_x, dConn4_y, oEndLMConnector)
2029
            End If
2030

    
2031
            sFirstUid = CheckExistModeling(oConn3Rows(0))
2032
            sSecondUid = CheckExistModeling(oConn4Rows(0))
2033
            'If oStartLMConnector IsNot Nothing Then
2034
            '    dOriginal_x = dConn3_x
2035
            '    dOriginal_y = dConn3_y
2036
            'Else
2037
            '    dOriginal_x = dConn4_x
2038
            '    dOriginal_y = dConn4_y
2039
            'End If
2040

    
2041
        ElseIf sConn3Type <> "" And sConn4Type = "" Then
2042
            If sConn1Type = "Line" Then
2043
                CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector)
2044
            Else
2045
                CheckConnectionSymbolToSymbol(oConn3Rows, dConn3_x, dConn3_y, oStartLMConnector)
2046
                dOriginal_x = dConn3_x
2047
                dOriginal_y = dConn3_y
2048
            End If
2049

    
2050
            sFirstUid = CheckExistModeling(oConn3Rows(0))
2051

    
2052
        ElseIf sConn3Type = "" And sConn4Type <> "" Then
2053
            If sConn2Type = "Line" Then
2054
                CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector)
2055
            Else
2056
                CheckConnectionSymbolToSymbol(oConn4Rows, dConn4_x, dConn4_y, oEndLMConnector)
2057
                dOriginal_x = dConn4_x
2058
                dOriginal_y = dConn4_y
2059
            End If
2060

    
2061
            sSecondUid = CheckExistModeling(oConn4Rows(0))
2062

    
2063
        Else
2064
            '      oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle)
2065
        End If
2066

    
2067
        If sFirstUid <> "" And sSecondUid <> "" Then
2068
            sReturnUid = sSecondUid
2069
        ElseIf sFirstUid <> "" And sSecondUid = "" Then
2070
            sReturnUid = sFirstUid
2071
        ElseIf sFirstUid <> "" And sSecondUid = "" Then
2072
            sReturnUid = sFirstUid
2073
        ElseIf sSecondUid <> "" And sFirstUid = "" Then
2074
            sReturnUid = sSecondUid
2075
        ElseIf sSecondUid <> "" And sFirstUid = "" Then
2076
            sReturnUid = sSecondUid
2077
        Else
2078
            sReturnUid = ""
2079
        End If
2080

    
2081
        If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
2082
            oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle)
2083
            oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
2084
        Else
2085
            If oStartLMConnector IsNot Nothing And oEndLMConnector IsNot Nothing Then
2086
                'oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle, ExistingItem:=oStartLMConnector.AsLMAItem,
2087
                '            TargetItem:=oEndLMConnector.AsLMAItem)
2088
                'oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
2089
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle)
2090
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
2091
            ElseIf oStartLMConnector IsNot Nothing And oEndLMConnector Is Nothing Then
2092
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle,,
2093
                            TargetItem:=oStartLMConnector.AsLMAItem)
2094
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
2095
            ElseIf oStartLMConnector Is Nothing And oEndLMConnector IsNot Nothing Then
2096
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle,,
2097
                TargetItem:=oEndLMConnector.AsLMAItem)
2098
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
2099
            Else
2100
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle)
2101
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
2102
            End If
2103
        End If
2104

    
2105
        If sChildItem <> "" Then
2106
            Dim sConn1_Systempath As String = ""
2107
            Dim sConn2_Systempath As String = ""
2108
            Dim sConn1_Angle As Double = 0
2109
            Dim sConn2_Angle As Double = 0
2110

    
2111
            For Each sDirection In sChildItem.Split("/")
2112
                Dim iType As Integer = 0
2113
                For Each sType In sDirection.Split(",")
2114
                    If sConn1_Systempath = "" Then
2115

    
2116
                        If iType = 0 Then
2117
                            sConn1_Angle = GetChildSymbolDirection(sType)
2118
                            iType = iType + 1
2119
                        Else
2120
                            Dim sStartpoint As String = oCurrentSymbolRow(_XML_SYMBOL_Conn1_Point).ToString()
2121
                            ConvertPointBystring(sStartpoint, dConn1_x, dConn1_y)
2122
                            ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
2123
                            sConn1_Systempath = GetDataFromMappingDB(sType, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
2124
                            Dim dChildConn1_x As Double = 0
2125
                            Dim dChildConn1_y As Double = 0
2126

    
2127
                            If oLMSymbol IsNot Nothing Then
2128
                                _Placement.PIDConnectPointLocation(oLMSymbol, 1, dChildConn1_x, dChildConn1_y)
2129
                                _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn1_x, dChildConn1_y,, sConn1_Angle,,
2130
                                 TargetItem:=oLMSymbol.AsLMAItem)
2131
                            Else
2132
                                _Placement.PIDPlaceSymbol(sConn1_Systempath, dConn1_x, dConn1_y,, sConn1_Angle,,)
2133
                            End If
2134
                        End If
2135

    
2136
                        'If iType = 0 Then
2137
                        '    sConn1_Angle = GetChildSymbolDirection(sType)
2138
                        '    iType = iType + 1
2139
                        'Else
2140
                        '    Dim sStartpoint As String = oCurrentSymbolRow(_XML_SYMBOL_Conn1_Point).ToString()
2141
                        '    ConvertPointBystring(sStartpoint, dConn1_x, dConn1_y)
2142
                        '    ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
2143
                        '    sConn1_Systempath = GetDataFromMappingDB(sType, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
2144
                        '    If oStartLMConnector Is Nothing Then
2145
                        '        Dim dChildConn1_x As Double = 0
2146
                        '        Dim dChildConn1_y As Double = 0
2147
                        '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dChildConn1_x, dChildConn1_y)
2148
                        '        If oLMSymbol.Connect1Connectors.Count = 0 And oLMSymbol IsNot Nothing Then
2149
                        '            _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn1_x, dChildConn1_y,, sConn1_Angle,,
2150
                        '             TargetItem:=oLMSymbol.AsLMAItem)
2151
                        '        Else
2152
                        '            For Each oConnector In oLMSymbol.Connect1Connectors
2153
                        '                _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn1_x, dChildConn1_y,, sConn1_Angle,,
2154
                        '                TargetItem:=oConnector.AsLMAItem)
2155
                        '            Next
2156
                        '        End If
2157

    
2158
                        '    Else
2159
                        '        _Placement.PIDPlaceSymbol(sConn1_Systempath, dConn1_x, dConn1_y,, sConn1_Angle,,
2160
                        '                    TargetItem:=oLMSymbol.AsLMAItem)
2161
                        '        'oLMSymbol = _Placement.PIDPlaceSymbol(sConn1_Systempath, dConn1_x, dConn1_y,, sConn1_Angle,,
2162
                        '        'TargetItem:=oStartLMConnector.AsLMAItem)
2163
                        '    End If
2164

    
2165
                        'End If
2166
                    Else
2167
                        If iType = 0 Then
2168
                            sConn2_Angle = GetChildSymbolDirection(sType)
2169
                            iType = iType + 1
2170
                        Else
2171
                            Dim sEndPoint As String = oCurrentSymbolRow(_XML_SYMBOL_Conn2_Point).ToString()
2172
                            ConvertPointBystring(sEndPoint, dConn2_x, dConn2_y)
2173
                            ConvertPointByImage(dConn2_x, dConn2_y, _IMG_X, _IMG_Y)
2174
                            sConn2_Systempath = GetDataFromMappingDB(sType, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
2175

    
2176
                            Dim dChildConn2_x As Double = 0
2177
                            Dim dChildConn2_y As Double = 0
2178

    
2179
                            If oLMSymbol IsNot Nothing Then
2180
                                _Placement.PIDConnectPointLocation(oLMSymbol, 2, dChildConn2_x, dChildConn2_y)
2181
                                _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle,,
2182
                                        TargetItem:=oLMSymbol.AsLMAItem)
2183
                            Else
2184
                                _Placement.PIDPlaceSymbol(sConn2_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle,,)
2185
                            End If
2186

    
2187
                        End If
2188

    
2189

    
2190
                        'If iType = 0 Then
2191
                        '    sConn2_Angle = GetChildSymbolDirection(sType)
2192
                        '    iType = iType + 1
2193
                        'Else
2194
                        '    Dim sEndPoint As String = oCurrentSymbolRow(_XML_SYMBOL_Conn2_Point).ToString()
2195
                        '    ConvertPointBystring(sEndPoint, dConn2_x, dConn2_y)
2196
                        '    ConvertPointByImage(dConn2_x, dConn2_y, _IMG_X, _IMG_Y)
2197
                        '    sConn2_Systempath = GetDataFromMappingDB(sType, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
2198
                        '    If oEndLMConnector Is Nothing Then
2199
                        '        Dim dChildConn2_x As Double = 0
2200
                        '        Dim dChildConn2_y As Double = 0
2201
                        '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dChildConn2_x, dChildConn2_y)
2202
                        '        If oLMSymbol.Connect2Connectors.Count = 0 And oLMSymbol IsNot Nothing Then
2203
                        '            _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle,,
2204
                        '            TargetItem:=oLMSymbol.AsLMAItem)
2205
                        '        Else
2206
                        '            For Each oConnector In oLMSymbol.Connect2Connectors
2207
                        '                oLMSymbol = _Placement.PIDPlaceSymbol(sConn2_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle,,
2208
                        '                TargetItem:=oConnector.AsLMAItem)
2209
                        '            Next
2210
                        '        End If
2211

    
2212
                        '    Else
2213
                        '        _Placement.PIDPlaceSymbol(sConn1_Systempath, dConn2_x, dConn2_y,, sConn2_Angle,,
2214
                        '            TargetItem:=oLMSymbol.AsLMAItem)
2215
                        '        '    oLMSymbol = _Placement.PIDPlaceSymbol(sConn2_Systempath, dConn2_x, dConn2_y,, sConn2_Angle,,
2216
                        '        'TargetItem:=oEndLMConnector.AsLMAItem)
2217
                        '    End If
2218

    
2219
                        'End If
2220
                    End If
2221
                Next
2222
            Next
2223

    
2224

    
2225
            'If sConn1_Systempath <> "" Then
2226
            '    Dim oConn1s As LMConnectors = oLMSymbol.Connect1Connectors
2227
            '    Dim dChildConn1_x As Double = 0
2228
            '    Dim dChildConn1_y As Double = 0
2229
            '    _Placement.PIDConnectPointLocation(oLMSymbol, 1, dChildConn1_x, dChildConn1_y)
2230
            '    oLMSymbol = _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn1_x, dChildConn1_y,, sConn1_Angle)
2231
            '    'For Each oConnector In oLMSymbol.Connect1Connectors
2232
            '    '    oLMSymbol = _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn1_x, dChildConn1_y,, sConn1_Angle,,
2233
            '    '    TargetItem:=oConnector.AsLMAItem)
2234
            '    'Next
2235
            'End If
2236

    
2237
            'If sConn2_Systempath <> "" Then
2238
            '    Dim oConn2s As LMConnectors = oLMSymbol.Connect2Connectors
2239
            '    Dim dChildConn2_x As Double = 0
2240
            '    Dim dChildConn2_y As Double = 0
2241
            '    _Placement.PIDConnectPointLocation(oLMSymbol, 2, dChildConn2_x, dChildConn2_y)
2242
            '    oLMSymbol = _Placement.PIDPlaceSymbol(sConn2_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle)
2243
            '    'For Each oConnector In oLMSymbol.Connect2Connectors
2244
            '    '    oLMSymbol = _Placement.PIDPlaceSymbol(sConn2_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle,,
2245
            '    '    TargetItem:=oConnector.AsLMAItem)
2246
            '    'Next
2247
            'End If
2248
            ''Child 모델링
2249

    
2250

    
2251

    
2252

    
2253

    
2254

    
2255

    
2256
        End If
2257

    
2258

    
2259

    
2260

    
2261

    
2262
        AddProgress()
2263

    
2264
        SetListBoxItems(ListBox_Result, "Place Fitting.." & sUid & " (" & dOriginal_x & "," & dOriginal_y & ")..." & _iFittingcnt & " count ")
2265
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Fitting : " & sUid)
2266
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
2267
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "ModelingType : " & iModelingType)
2268
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn1_Point : " & dConn1_x & "," & dConn1_y)
2269
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn2_Point : " & dConn2_x & "," & dConn2_y)
2270
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn3_Point : " & dConn3_x & "," & dConn3_y)
2271
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn4_Point : " & dConn4_x & "," & dConn4_y)
2272
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn1_Uid).ToString())
2273
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn2_Uid).ToString())
2274
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection3 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn3_Uid).ToString())
2275
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection4 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn4_Uid).ToString())
2276
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
2277
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dOriginal_x & "," & dOriginal_y)
2278
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Fitting Count : " & _iFittingcnt)
2279
        _iFittingcnt = _iFittingcnt + 1
2280
        oCurrentSymbolRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
2281
        Dim oAttributeRow() As DataRow
2282
        oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
2283
        If oAttribute_Dt.Rows.Count > 0 Then
2284

    
2285
            If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
2286
                Dim oInstrument As LMInstrument
2287
                oInstrument = _Placement.PIDDataSource.GetInstrument(oLMSymbol.ModelItemID)
2288
                Try
2289
                    If oAttributeRow.Length > 0 Then
2290
                        For Each oAttribute In oAttributeRow
2291
                            Try
2292
                                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2293
                                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2294
                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2295
                                oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
2296
                            Catch ex As Exception
2297
                            End Try
2298
                        Next
2299
                        oInstrument.Commit()
2300
                    End If
2301
                Catch ex As Exception
2302
                End Try
2303
            Else
2304
                Try
2305
                    If oAttributeRow.Length > 0 And oLMSymbol IsNot Nothing Then
2306
                        For Each oAttribute In oAttributeRow
2307
                            Try
2308
                                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2309
                                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2310
                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2311
                                oLMSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
2312

    
2313
                            Catch ex As Exception
2314
                            End Try
2315
                        Next
2316
                        oLMSymbol.Commit()
2317
                    End If
2318
                Catch ex As Exception
2319
                End Try
2320
            End If
2321
        End If
2322
        'Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
2323
        'If oAttributeRow.Length > 0 Then
2324
        '    For Each oAttribute In oAttributeRow
2325
        '        Try
2326
        '            Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2327
        '            Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2328
        '            If sPIDValue.Contains("'") Then
2329
        '                sPIDValue = sPIDValue.Replace("'", """")
2330
        '            End If
2331
        '            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2332
        '            oLMSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
2333
        '        Catch ex As Exception
2334
        '        End Try
2335
        '    Next
2336
        'End If
2337

    
2338
        Return sReturnUid
2339

    
2340

    
2341
        '현재 Uid 모델링
2342
    End Function
2343

    
2344
    Private Function GetChildSymbolDirection(ByVal sDirection As String) As Double
2345
        Dim sReturnDirection As String = ""
2346
        If sDirection.ToUpper() = "RIGHT" Then
2347
            Return 3.14
2348
        ElseIf sDirection.ToUpper() = "LEFT" Then
2349
            Return 0
2350
        ElseIf sDirection.ToUpper = "DOWN" Then
2351
            Return 1.57
2352
        ElseIf sDirection.ToUpper() = "UP" Then
2353
            Return 4.71
2354
        Else
2355
            Return 0
2356
        End If
2357
    End Function
2358

    
2359

    
2360

    
2361
    Private Function CheckExistModeling(ByVal oRow As DataRow) As String
2362
        If oRow(_XML_LINE_DRAWING_TF).ToString() = "FALSE" And oRow(_XML_LINE_Check).ToString() = "TRUE" Then
2363
            Return oRow(_XML_LINE_UID).ToString()
2364
        End If
2365
        Return String.Empty
2366
    End Function
2367

    
2368

    
2369
    Private Sub ConvertPoint(ByVal sOriginalPoint As String, ByRef dConn1_x As Double, ByRef dConn1_y As Double)
2370
        ConvertPointBystring(sOriginalPoint, dConn1_x, dConn1_y)
2371
        ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
2372
    End Sub
2373

    
2374

    
2375
    Private Function FinalLineModeling(ByVal oCurrentLineRow As DataRow,
2376
                              ByVal oLine_Dt As DataTable, ByVal oSymbol_Dt As DataTable,
2377
                                  ByVal oAttribute_Dt As DataTable) As String
2378
        Dim sReturnUid As String = ""
2379
        Try
2380

    
2381
            '현재 Uid  모델링 여부 체크
2382
            'Dim sStartpoint As String = ""
2383
            'Dim sEndpoint As String = ""
2384
            'Dim dOriginalStart_x As Double = 0.0
2385
            'Dim dOriginalStart_y As Double = 0.0
2386
            'Dim dOriginalEnd_x As Double = 0.0
2387
            'Dim dOriginalEnd_y As Double = 0.0
2388
            Dim dCenterPos_x As Double = 0.0
2389
            Dim dCenterPos_y As Double = 0.0
2390
            Dim objItem As LMAItem
2391

    
2392
            Dim sUid As String = oCurrentLineRow(_XML_LINE_UID).ToString()
2393
            Dim sLineType As String = oCurrentLineRow(_XML_LINE_TYPE).ToString()
2394
            Dim sSystemPath As String = GetPipeType(sLineType)
2395
            Dim sLineNoText As String = oCurrentLineRow(_XML_LINENO_TEXT).ToString()
2396
            Dim sLineNoUid As String = oCurrentLineRow(_XML_LINE_LINENOUID).ToString()
2397
            'sStartpoint = oCurrentLineRow(_XML_LINE_STARTPOINT).ToString()
2398
            'ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2399
            'ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
2400
            'sEndpoint = oCurrentLineRow(_XML_LINE_ENDPOINT).ToString()
2401
            'ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2402
            'ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
2403

    
2404

    
2405
            Dim dStart_Dwg_x As Double = oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_X)
2406
            Dim dStart_Dwg_y As Double = oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_Y)
2407
            Dim dEnd_Dwg_x As Double = oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_X)
2408
            Dim dEnd_Dwg_y As Double = oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_Y)
2409
            Dim sPreFlowDirection As String = ""
2410
            Dim sFlowDirection As String = oCurrentLineRow(_XML_LINE_FlowDirection)
2411

    
2412
            Dim sPreConn1Direction As String = ""
2413
            Dim sPreConn2Direction As String = ""
2414
            Dim sDirection As String = oCurrentLineRow(_XML_LINE_Direction)
2415

    
2416
            dCenterPos_x = Math.Abs(dStart_Dwg_x + dEnd_Dwg_x) / 2
2417
            dCenterPos_y = Math.Abs(dStart_Dwg_y + dEnd_Dwg_y) / 2
2418

    
2419

    
2420
            Dim oPidDataSource As LMADataSource = Nothing
2421

    
2422
            Try
2423
                oPidDataSource = _Placement.PIDDataSource
2424
            Catch ex As Exception
2425
                CheckOpenDrawing()
2426
                oPidDataSource = _Placement.PIDDataSource
2427
            End Try
2428

    
2429
            'Connection 정보 체크, 모델링 되어 있는지 유무
2430
            '양 커넥션의 모델링 유무를 체크한다.
2431
            Dim sConn1Uid As String = oCurrentLineRow(_XML_LINE_Conn1_Uid).ToString()
2432
            Dim sConn2Uid As String = oCurrentLineRow(_XML_LINE_Conn2_Uid).ToString()
2433
            Dim sConn1Type As String = ""
2434
            Dim sConn2Type As String = ""
2435

    
2436
            Dim oConn1Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn1Uid & "'")
2437
            If oConn1Rows.Length = 0 Then
2438
                oConn1Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn1Uid & "'")
2439
                If oConn1Rows.Length = 1 Then
2440
                    sConn1Type = "Line"
2441
                    'sPreConn1Direction = oConn1Rows(0)(_XML_LINE_Direction).ToString()
2442
                    'If sDirection = sPreConn1Direction Then
2443
                    '    If sDirection = "X" Then
2444
                    '        dStart_Dwg_y = oConn1Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2445
                    '        dEnd_Dwg_y = oConn1Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2446
                    '    Else
2447
                    '        dStart_Dwg_x = oConn1Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2448
                    '        dEnd_Dwg_x = oConn1Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2449
                    '    End If
2450
                    'End If
2451

    
2452
                End If
2453
            Else
2454

    
2455
                Dim oOriginalPoint As String = oConn1Rows(0)(_XML_SYMBOL_ORIGINALPOINT)
2456
                ConvertPointBystring(oOriginalPoint, dStart_Dwg_x, dStart_Dwg_y)
2457
                ConvertPointByImage(dStart_Dwg_x, dStart_Dwg_y, _IMG_X, _IMG_Y)
2458
                oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_X) = dStart_Dwg_x
2459
                oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_Y) = dStart_Dwg_y
2460
                sConn1Type = "Symbol"
2461
            End If
2462

    
2463
            Dim oConn2Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn2Uid & "'")
2464
            If oConn2Rows.Length = 0 Then
2465
                oConn2Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn2Uid & "'")
2466
                If oConn2Rows.Length = 1 Then
2467
                    sConn2Type = "Line"
2468
                    'sPreConn2Direction = oConn1Rows(0)(_XML_LINE_Direction).ToString()
2469
                    'If sDirection = sPreConn2Direction Then
2470
                    '    If sDirection = "X" Then
2471
                    '        dStart_Dwg_y = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2472
                    '        dEnd_Dwg_y = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2473
                    '    Else
2474
                    '        dStart_Dwg_x = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2475
                    '        dEnd_Dwg_x = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2476
                    '    End If
2477
                    'End If
2478
                End If
2479
            Else
2480
                Dim oOriginalPoint As String = oConn2Rows(0)(_XML_SYMBOL_ORIGINALPOINT)
2481
                ConvertPointBystring(oOriginalPoint, dEnd_Dwg_x, dEnd_Dwg_y)
2482
                ConvertPointByImage(dEnd_Dwg_x, dEnd_Dwg_y, _IMG_X, _IMG_Y)
2483
                oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_X) = dEnd_Dwg_x
2484
                oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_Y) = dEnd_Dwg_y
2485
                sConn2Type = "Symbol"
2486
            End If
2487

    
2488

    
2489
            If sConn1Type = "Symbol" Then
2490

    
2491

    
2492

    
2493
            End If
2494

    
2495
            Dim sConn1LineNo As String = ""
2496
            Dim sConn2LineNo As String = ""
2497
            Dim oLMConnector As LMConnector = Nothing
2498
            Dim oStartLMConnector As LMConnector = Nothing
2499
            Dim oEndLMConnector As LMConnector = Nothing
2500
            Dim oLMSymbol1 As LMSymbol = Nothing
2501
            Dim oLMSymbol2 As LMSymbol = Nothing
2502
            Dim objInputs As PlaceRunInputs
2503
            objInputs = New PlaceRunInputs
2504
            Dim iModelingType As Integer = 0
2505
            If sConn1Type = "Line" And sConn2Type = "Line" Then
2506
                iModelingType = 1
2507
            ElseIf sConn1Type = "Line" And sConn2Type = "Symbol" Then
2508
                iModelingType = 1
2509
            ElseIf sConn1Type = "Symbol" And sConn2Type = "Line" Then
2510
                iModelingType = 1
2511
            ElseIf sConn1Type = "Symbol" And sConn2Type = "Symbol" Then
2512
                iModelingType = 1
2513
            ElseIf sConn1Type = "Line" And sConn2Type = "" Then
2514
                iModelingType = 2
2515
            ElseIf sConn1Type = "Symbol" And sConn2Type = "" Then
2516
                iModelingType = 2
2517
            ElseIf sConn1Type = "" And sConn2Type = "Line" Then
2518
                iModelingType = 3
2519
            ElseIf sConn1Type = "" And sConn2Type = "Symbol" Then
2520
                iModelingType = 3
2521
            Else
2522
                iModelingType = 4
2523
            End If
2524

    
2525
            Dim dPreConnX As Double = 0
2526
            Dim dPreConnY As Double = 0
2527

    
2528

    
2529
            '   Dim sTargetDirection As String = CheckBranchLine(dStart_Dwg_x, dStart_Dwg_y, dEnd_Dwg_x, dEnd_Dwg_y, oLMConnector)
2530

    
2531
            ' If sTargetDirection = "" Then
2532
            CheckConnectionLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector)
2533

    
2534
            If oStartLMConnector Is Nothing Then
2535
                UpdateCheckBranchLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector)
2536
                If oStartLMConnector Is Nothing Then
2537
                    oLMSymbol1 = CheckConnectionSymbolToLine(oConn1Rows, dStart_Dwg_x, dStart_Dwg_y, dCenterPos_x, dCenterPos_y, oStartLMConnector)
2538
                    If oLMSymbol1 IsNot Nothing Then
2539
                        sConn1Type = "Symbol"
2540
                    Else
2541
                        sConn1Type = ""
2542
                    End If
2543
                Else
2544
                    sConn1Type = "Line"
2545
                    'sPreConn1Direction = oConn1Rows(0)(_XML_LINE_Direction).ToString()
2546
                    'If sDirection = sPreConn1Direction Then
2547
                    '    If sDirection = "X" Then
2548
                    '        dStart_Dwg_y = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2549
                    '        dEnd_Dwg_y = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2550
                    '    Else
2551
                    '        dStart_Dwg_x = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2552
                    '        dEnd_Dwg_x = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2553
                    '    End If
2554
                    'End If
2555
                End If
2556
            Else
2557
                sConn1Type = "Line"
2558

    
2559
            End If
2560
                CheckConnectionLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector)
2561
            If oEndLMConnector Is Nothing Then
2562
                UpdateCheckBranchLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector)
2563
                If oEndLMConnector Is Nothing Then
2564
                    oLMSymbol2 = CheckConnectionSymbolToLine(oConn2Rows, dEnd_Dwg_x, dEnd_Dwg_y, dCenterPos_x, dCenterPos_y, oEndLMConnector)
2565
                    If oLMSymbol2 IsNot Nothing Then
2566
                        sConn2Type = "Symbol"
2567
                    End If
2568
                Else
2569
                    sConn2Type = "Line"
2570
                End If
2571
            Else
2572
                sConn2Type = "Line"
2573
                    'sPreConn2Direction = oConn2Rows(0)(_XML_LINE_Direction).ToString()
2574
                    'If sDirection = sPreConn2Direction Then
2575
                    '    If sDirection = "X" Then
2576
                    '        dStart_Dwg_y = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2577
                    '        dEnd_Dwg_y = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_Y)
2578
                    '    Else
2579
                    '        dStart_Dwg_x = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2580
                    '        dEnd_Dwg_x = oConn2Rows(0)(_XML_LINE_DWG_STARTPOINT_X)
2581
                    '    End If
2582
                    'End If
2583
                End If
2584
                'Else
2585
                '    If sTargetDirection = "START" Then
2586
                '        oStartLMConnector = oLMConnector
2587
                '        sConn1Type = "Line"
2588
                '    ElseIf sTargetDirection = "END" Then
2589
                '        oEndLMConnector = oLMConnector
2590
                '        sConn2Type = "Line"
2591
                '    End If
2592
                'End If
2593

    
2594

    
2595

    
2596

    
2597

    
2598

    
2599

    
2600
                'If iModelingType = 1 Then
2601
                '    If sConn1Type = "Line" Then
2602
                '        CheckConnectionLine(oConn1Rows, dOriginalStart_x, dOriginalStart_y, oStartLMConnector)
2603
                '    Else
2604
                '        oLMSymbol1 = CheckConnectionSymbolToLine(oConn1Rows, dOriginalStart_x, dOriginalStart_y, dCenterPos_x, dCenterPos_y, oStartLMConnector)
2605
                '    End If
2606
                '    If sConn1Type = "Line" Then
2607
                '        CheckConnectionLine(oConn2Rows, dOriginalEnd_x, dOriginalEnd_y, oEndLMConnector)
2608
                '    Else
2609
                '        oLMSymbol2 = CheckConnectionSymbolToLine(oConn2Rows, dOriginalEnd_x, dOriginalEnd_y, dCenterPos_x, dCenterPos_y, oEndLMConnector)
2610
                '    End If
2611
                '    'CheckConnectionLine(oConn1Rows, dOriginalStart_x, dOriginalStart_y, oStartLMConnector)
2612
                '    'CheckConnectionLine(oConn2Rows, dOriginalEnd_x, dOriginalEnd_y, oEndLMConnector)
2613
                'ElseIf iModelingType = "2" Then
2614
                '    If sConn1Type = "Line" Then
2615
                '        CheckConnectionLine(oConn1Rows, dOriginalStart_x, dOriginalStart_y, oStartLMConnector)
2616
                '    Else
2617
                '        oLMSymbol1 = CheckConnectionSymbolToLine(oConn1Rows, dOriginalStart_x, dOriginalStart_y, dCenterPos_x, dCenterPos_y, oStartLMConnector)
2618
                '    End If
2619
                '    ' CheckConnectionLine(oConn2Rows, dOriginalStart_x, dOriginalStart_y, oStartLMConnector)
2620
                'ElseIf iModelingType = "3" Then
2621
                '    If sConn1Type = "Line" Then
2622
                '        CheckConnectionLine(oConn2Rows, dOriginalEnd_x, dOriginalEnd_y, oEndLMConnector)
2623
                '    Else
2624
                '        oLMSymbol2 = CheckConnectionSymbolToLine(oConn2Rows, dOriginalEnd_x, dOriginalEnd_y, dCenterPos_x, dCenterPos_y, oEndLMConnector)
2625
                '    End If
2626
                '    ' CheckConnectionLine(oConn2Rows, dOriginalEnd_x, dOriginalEnd_y, oStartLMConnector)
2627

    
2628
                'Else
2629
                '    'objInputs.AddPoint(dOriginalStart_x, dOriginalStart_y)
2630
                '    'objInputs.AddPoint(dOriginalEnd_x, dOriginalEnd_y)
2631
                'End If
2632

    
2633
                Dim sFirstUid As String = ""
2634
            Dim sSecondUid As String = ""
2635
            Try
2636
                If oStartLMConnector Is Nothing And oEndLMConnector Is Nothing Then
2637
                    objInputs.AddPoint(dStart_Dwg_x, dStart_Dwg_y)
2638
                    objInputs.AddPoint(dEnd_Dwg_x, dEnd_Dwg_y)
2639
                    'sFirstUid = CheckExistModeling(oConn1Rows(0))
2640
                    'sSecondUid = CheckExistModeling(oConn2Rows(0))
2641
                ElseIf oStartLMConnector IsNot Nothing And oEndLMConnector Is Nothing Then
2642
                    If sConn1Type = "Line" Then
2643
                        objInputs.AddConnectorTarget(oStartLMConnector, dStart_Dwg_x, dStart_Dwg_y)
2644
                    Else
2645
                        objInputs.AddSymbolTarget(oLMSymbol1, dStart_Dwg_x, dStart_Dwg_y)
2646
                    End If
2647

    
2648
                    objInputs.AddPoint(dEnd_Dwg_x, dEnd_Dwg_y)
2649
                    '    sSecondUid = CheckExistModeling(oConn2Rows(0))
2650
                ElseIf oStartLMConnector Is Nothing And oEndLMConnector IsNot Nothing Then
2651
                    If sConn2Type = "Line" Then
2652
                        objInputs.AddConnectorTarget(oEndLMConnector, dEnd_Dwg_x, dEnd_Dwg_y)
2653
                    Else
2654
                        objInputs.AddSymbolTarget(oLMSymbol2, dEnd_Dwg_x, dEnd_Dwg_y)
2655
                    End If
2656

    
2657
                    objInputs.AddPoint(dStart_Dwg_x, dStart_Dwg_y)
2658

    
2659
                    'objInputs.AddPoint(dOriginalEnd_x, dOriginalEnd_y)
2660

    
2661
                    '   sFirstUid = CheckExistModeling(oConn1Rows(0))
2662
                Else
2663
                    If sConn1Type = "Line" Then
2664
                        objInputs.AddConnectorTarget(oStartLMConnector, dStart_Dwg_x, dStart_Dwg_y)
2665
                    Else
2666
                        objInputs.AddSymbolTarget(oLMSymbol1, dStart_Dwg_x, dStart_Dwg_y)
2667
                    End If
2668
                    If sConn2Type = "Line" Then
2669
                        objInputs.AddConnectorTarget(oStartLMConnector, dEnd_Dwg_x, dEnd_Dwg_y)
2670
                    Else
2671
                        objInputs.AddSymbolTarget(oLMSymbol2, dEnd_Dwg_x, dEnd_Dwg_y)
2672
                    End If
2673
                    'objInputs.AddConnectorTarget(oStartLMConnector, dOriginalStart_x, dOriginalStart_y)
2674
                    'objInputs.AddConnectorTarget(oEndLMConnector, dEnd_Dwg_x, dOriginalEnd_y)
2675
                End If
2676
                If sConn1Type <> "" And sConn2Type <> "" Then
2677
                    If oConn1Rows.Count > 0 Then
2678
                        sFirstUid = CheckExistModeling(oConn1Rows(0))
2679
                    End If
2680
                    If oConn2Rows.Count > 0 Then
2681
                        sSecondUid = CheckExistModeling(oConn2Rows(0))
2682
                    End If
2683

    
2684
                ElseIf sConn1Type <> "" And sConn2Type = "" Then
2685
                    If oConn1Rows.Count > 0 Then
2686
                        sFirstUid = CheckExistModeling(oConn1Rows(0))
2687
                    End If
2688

    
2689
                ElseIf sConn1Type = "" And sConn2Type <> "" Then
2690
                    If oConn2Rows.Count > 0 Then
2691
                        sSecondUid = CheckExistModeling(oConn2Rows(0))
2692
                    End If
2693

    
2694
                End If
2695

    
2696
                If sFirstUid <> "" And sSecondUid <> "" Then
2697
                    sReturnUid = sSecondUid
2698
                ElseIf sFirstUid = "" And sSecondUid <> "" Then
2699
                    sReturnUid = sSecondUid
2700
                ElseIf sFirstUid <> "" And sSecondUid = "" Then
2701
                    sReturnUid = sFirstUid
2702
                Else
2703
                    sReturnUid = ""
2704
                End If
2705
                _iPipecnt = _iPipecnt + 1
2706
                Dim oCurrentConnector As LMConnector = Nothing
2707

    
2708
                objItem = _Placement.PIDCreateItem(sSystemPath)
2709
                Try
2710
                    If Chk_OnlyPoint.Checked Then
2711
                        objInputs.Clear()
2712
                        objInputs.AddPoint(dStart_Dwg_x, dStart_Dwg_y)
2713
                        objInputs.AddPoint(dEnd_Dwg_x, dEnd_Dwg_y)
2714
                        oCurrentConnector = _Placement.PIDPlaceRun(objItem, objInputs)
2715
                    Else
2716
                        oCurrentConnector = _Placement.PIDPlaceRun(objItem, objInputs)
2717
                    End If
2718
                    AddProgress()
2719

    
2720
                Catch ex As Exception
2721

    
2722
                End Try
2723
                If oCurrentConnector IsNot Nothing Then
2724
                    oCurrentLineRow(_XML_LINE_LMCONNECTOR) = oCurrentConnector
2725
                    oCurrentLineRow(_XML_LINE_DRAWING_TF) = "TRUE"
2726

    
2727
                    SetListBoxItems(ListBox_Result, "Place Pipe.." & sUid & " (" & dStart_Dwg_x & "," & dStart_Dwg_y & ") - (" & dEnd_Dwg_x & "," & dEnd_Dwg_y & ")..." & _iPipecnt & " count ")
2728

    
2729
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & sUid)
2730
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
2731
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oCurrentLineRow(_XML_SYMBOL_Conn1_Uid).ToString())
2732
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oCurrentLineRow(_XML_SYMBOL_Conn2_Uid).ToString())
2733
                    'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
2734
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "StartPoint : " & dStart_Dwg_x & "," & dStart_Dwg_y)
2735
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "EndPoint : " & dEnd_Dwg_x & "," & dEnd_Dwg_y)
2736
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Pipe Count : " & _iPipecnt)
2737

    
2738
                    Dim oPipeRun As LMPipeRun = oPidDataSource.GetPipeRun(oCurrentConnector.ModelItemID)
2739

    
2740
                    '모델링 된 PipeLine 데이터 테이블 저장
2741
                    Dim oAddRow As DataRow = _ModelingLine_Dt.NewRow
2742
                    oAddRow(_XML_LINE_SPID) = oCurrentConnector.ModelItemID
2743
                    oAddRow(_XML_LINE_LMCONNECTOR) = oCurrentConnector
2744
                    oAddRow(_XML_LINE_DRAWING_TF) = "TRUE"
2745
                    oAddRow(_XML_LINE_DWG_STARTPOINT_X) = dStart_Dwg_x
2746
                    oAddRow(_XML_LINE_DWG_STARTPOINT_Y) = dStart_Dwg_y
2747
                    oAddRow(_XML_LINE_DWG_ENDPOINT_X) = dEnd_Dwg_x
2748
                    oAddRow(_XML_LINE_DWG_ENDPOINT_Y) = dEnd_Dwg_y
2749
                    _ModelingLine_Dt.Rows.Add(oAddRow)
2750

    
2751

    
2752
                    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
2753
                        If oAttributeRow.Length > 0 Then
2754
                            For Each oAttribute In oAttributeRow
2755
                                Try
2756
                                    Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2757
                                    Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2758
                                    If sPIDValue.Contains("'") Then
2759
                                        sPIDValue = sPIDValue.Replace("'", """")
2760
                                    End If
2761
                                    Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2762
                                    oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
2763
                                Catch ex As Exception
2764
                                End Try
2765
                            Next
2766
                            oPipeRun.Commit()
2767
                        End If
2768

    
2769
                        Dim sID_1 As String = ""
2770
                    Dim sID_2 As String = ""
2771
                    Dim oAddConnector As LMConnector = Nothing
2772
                    If oStartLMConnector IsNot Nothing Then
2773
                            sID_1 = oStartLMConnector.ModelItemID
2774
                        sID_2 = oCurrentConnector.ModelItemID
2775
                        oAddConnector = oStartLMConnector
2776
                    ElseIf oEndLMConnector IsNot Nothing Then
2777
                            sID_1 = oEndLMConnector.ModelItemID
2778
                        sID_2 = oCurrentConnector.ModelItemID
2779
                        oAddConnector = oEndLMConnector
2780
                    End If
2781
                        If sID_1 <> "" And sID_2 <> "" Then
2782
                            Dim objSurvivorItem As LMAItem = Nothing
2783
                            Dim oPipeRun1 As LMPipeRun = oPidDataSource.GetPipeRun(sID_1)
2784
                            Dim oPipeRun2 As LMPipeRun = oPidDataSource.GetPipeRun(sID_2)
2785
                        _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
2786

    
2787
                        Dim oChangeRow() As DataRow = _ModelingLine_Dt.Select(_XML_LINE_SPID & " = '" & sID_2 & "'")
2788
                        If oChangeRow.Length = 1 Then
2789
                            oChangeRow(0)(_XML_LINE_SPID) = sID_1
2790
                            oChangeRow(0)(_XML_LINE_LMCONNECTOR) = oAddConnector
2791
                        End If
2792
                    End If
2793
                    Else
2794
                        sReturnUid = ""
2795
                End If
2796
            Catch ex As Exception
2797

    
2798
            End Try
2799

    
2800

    
2801
        Catch ex As Exception
2802

    
2803
        End Try
2804

    
2805

    
2806
        Return sReturnUid
2807
        '현재 Uid 모델링
2808
    End Function
2809

    
2810
    Private Sub PipingModeling()
2811

    
2812
        Try
2813
            For Each oDrwing As TreeNode In Tree_Result.Nodes
2814
                For Each oDwgNode As TreeNode In oDrwing.Nodes
2815
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
2816
                    Dim CDrawing As Drawing = GetDrawing(sDwgName)
2817
                    If CDrawing IsNot Nothing Then
2818
                        Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
2819
                        Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
2820
                        For Each oNode As TreeNode In oDwgNode.Nodes
2821
                            Dim iItemcnt As Integer = 0
2822
                            Dim sNodeUid As String = oNode.Name
2823
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2824
                            '1.Equipment
2825
                            '2.Piping OPC
2826
                            '3.OPC 시작되는 Line
2827
                            'Equipment 생성
2828
                            'If sNodeUid <> "PipeLineNo" Then
2829
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2830

    
2831
                            If CLineNo IsNot Nothing Then
2832
                                Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2833
                                Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2834
                                Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2835
                                Dim oDrawLinenoLabel As Boolean = False
2836
                                Try
2837
                                    ManualCheckNode(oLine_Dt)
2838
                                    ManualCheckNode(oSymbol_Dt)
2839
                                Catch ex As Exception
2840
                                End Try
2841
                                For Each oSymbolNode As TreeNode In oNode.Nodes
2842
                                    If oSymbolNode.Checked Then
2843
                                        Try
2844
                                            Dim sUid As String = oSymbolNode.Name
2845
                                            If sUid = "152b5931-e7ed-4fe9-bed8-6c01303567b7" Then
2846
                                                MessageBox.Show("")
2847
                                            End If
2848
                                            Dim sLineNoUid As String = CLineNo.Uid
2849
                                            Dim sReturnUid = sUid
2850
                                            '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2851
                                            While True
2852
                                                Dim oLineRows As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False' And [" &
2853
                                                                   _XML_SYMBOL_Check & "] = 'TRUE'")
2854
                                                If oLineRows.Count > 0 Then
2855
                                                    sReturnUid = FinalLineModeling(oLineRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2856
                                                Else
2857
                                                    sReturnUid = ""
2858
                                                End If
2859
                                                If sReturnUid = "" Then
2860
                                                    Exit While
2861
                                                End If
2862
                                            End While
2863
                                        Catch ex As Exception
2864
                                        End Try
2865
                                    End If
2866
                                Next
2867
                            End If
2868
                            Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2869
                            If CTrimLineNo IsNot Nothing Then
2870
                                Dim oLine_Dt As DataTable = CTrimLineNo.Dt_Line
2871
                                Dim oSymbol_Dt As DataTable = CTrimLineNo.Dt_Symbol
2872
                                Dim oAttribute_Dt As DataTable = CTrimLineNo.Dt_Attribute
2873
                                Dim oDrawLinenoLabel As Boolean = False
2874
                                Try
2875
                                    ManualCheckNode(oLine_Dt)
2876
                                    ManualCheckNode(oSymbol_Dt)
2877
                                Catch ex As Exception
2878
                                End Try
2879

    
2880
                                For Each oSymbolNode As TreeNode In oNode.Nodes
2881
                                    If oSymbolNode.Checked Then
2882
                                        Try
2883
                                            Dim sUid As String = oSymbolNode.Name
2884
                                            Dim sLineNoUid As String = CTrimLineNo.Uid
2885
                                            Dim sReturnUid = sUid
2886
                                            '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2887
                                            While True
2888
                                                Dim oLineRows As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False' And [" &
2889
                                                                   _XML_SYMBOL_Check & "] = 'TRUE'")
2890
                                                If oLineRows.Count > 0 Then
2891
                                                    sReturnUid = FinalLineModeling(oLineRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2892
                                                Else
2893
                                                    sReturnUid = ""
2894
                                                End If
2895
                                                If sReturnUid = "" Then
2896
                                                    Exit While
2897
                                                End If
2898
                                            End While
2899
                                        Catch ex As Exception
2900
                                        End Try
2901
                                    End If
2902
                                Next
2903
                                'For Each oSymbolNode As TreeNode In oNode.Nodes
2904
                                '    If oSymbolNode.Checked Then
2905
                                '        Try
2906
                                '            Dim sUid As String = oSymbolNode.Name
2907
                                '            Dim sLineNoUid As String = CLineNo.Uid
2908
                                '            Dim sReturnUid = sUid
2909
                                '            '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2910
                                '            Dim oSymbolRows As DataRow() = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False' And [" &
2911
                                '                                                               _XML_SYMBOL_Check & "] = 'TRUE'")
2912
                                '            If oSymbolRows.Count > 0 Then
2913
                                '                sReturnUid = FinalSymbolModeling(oSymbolRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2914
                                '            Else
2915
                                '                sReturnUid = ""
2916
                                '            End If
2917
                                '            If sReturnUid = "" Then
2918
                                '            End If
2919
                                '        Catch ex As Exception
2920
                                '        End Try
2921
                                '    End If
2922
                                'Next
2923
                            End If
2924
                        Next
2925

    
2926

    
2927
                        For Each oNode As TreeNode In oDwgNode.Nodes
2928
                            Dim iItemcnt As Integer = 0
2929
                            Dim sNodeUid As String = oNode.Name
2930
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2931
                            '1.Equipment
2932
                            '2.Piping OPC
2933
                            '3.OPC 시작되는 Line
2934
                            'Equipment 생성
2935
                            'If sNodeUid <> "PipeLineNo" Then
2936
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2937

    
2938
                            If CLineNo IsNot Nothing Then
2939
                                Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2940
                                Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2941
                                Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2942
                                Dim oDrawLinenoLabel As Boolean = False
2943
                                Try
2944
                                    ManualCheckNode(oLine_Dt)
2945
                                    ManualCheckNode(oSymbol_Dt)
2946
                                Catch ex As Exception
2947
                                End Try
2948
                                For Each oSymbolNode As TreeNode In oNode.Nodes
2949
                                    If oSymbolNode.Checked Then
2950
                                        Try
2951
                                            Dim sUid As String = oSymbolNode.Name
2952
                                            Dim sLineNoUid As String = CLineNo.Uid
2953
                                            Dim sReturnUid = sUid
2954
                                            '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2955
                                            Dim oSymbolRows As DataRow() = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'FALSE' And [" &
2956
                                                                                               _XML_SYMBOL_Check & "] = 'TRUE'")
2957

    
2958
                                            If oSymbolRows.Count > 0 Then
2959
                                                sReturnUid = FinalSymbolModeling(oSymbolRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2960
                                            Else
2961
                                                sReturnUid = ""
2962
                                            End If
2963
                                            If sReturnUid = "" Then
2964
                                            End If
2965
                                        Catch ex As Exception
2966
                                        End Try
2967
                                    End If
2968
                                Next
2969
                            End If
2970
                            Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2971
                            If CTrimLineNo IsNot Nothing Then
2972
                                Dim oLine_Dt As DataTable = CTrimLineNo.Dt_Line
2973
                                Dim oSymbol_Dt As DataTable = CTrimLineNo.Dt_Symbol
2974
                                Dim oAttribute_Dt As DataTable = CTrimLineNo.Dt_Attribute
2975
                                Dim oDrawLinenoLabel As Boolean = False
2976
                                Try
2977
                                    ManualCheckNode(oLine_Dt)
2978
                                    ManualCheckNode(oSymbol_Dt)
2979
                                Catch ex As Exception
2980
                                End Try
2981
                                For Each oSymbolNode As TreeNode In oNode.Nodes
2982
                                    If oSymbolNode.Checked Then
2983
                                        Try
2984
                                            Dim sUid As String = oSymbolNode.Name
2985
                                            Dim sLineNoUid As String = CTrimLineNo.Uid
2986
                                            Dim sReturnUid = sUid
2987
                                            '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2988
                                            Dim oSymbolRows As DataRow() = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False' And [" &
2989
                                                                                               _XML_SYMBOL_Check & "] = 'TRUE'")
2990
                                            If oSymbolRows.Count > 0 Then
2991
                                                sReturnUid = FinalSymbolModeling(oSymbolRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2992
                                            Else
2993
                                                sReturnUid = ""
2994
                                            End If
2995
                                            If sReturnUid = "" Then
2996
                                            End If
2997
                                        Catch ex As Exception
2998
                                        End Try
2999
                                    End If
3000
                                Next
3001
                            End If
3002
                        Next
3003
                    End If
3004
                Next
3005
            Next
3006
        Catch ex As Exception
3007

    
3008
        End Try
3009
    End Sub
3010

    
3011

    
3012
    Private Sub FindNearPoint(ByVal oOPCSymbol As LMSymbol, ByRef dNear_x As Double, ByRef dNear_y As Double)
3013
        Dim oConnectionPoints_x(4) As Double
3014
        Dim oConnectionPoints_y(4) As Double
3015

    
3016
        Try
3017
            _Placement.PIDConnectPointLocation(oOPCSymbol, 1, oConnectionPoints_x(0), oConnectionPoints_y(0))
3018
            _Placement.PIDConnectPointLocation(oOPCSymbol, 2, oConnectionPoints_x(1), oConnectionPoints_y(1))
3019
            _Placement.PIDConnectPointLocation(oOPCSymbol, 3, oConnectionPoints_x(2), oConnectionPoints_y(2))
3020
            _Placement.PIDConnectPointLocation(oOPCSymbol, 4, oConnectionPoints_x(3), oConnectionPoints_y(3))
3021
            Dim iNearPoint As Integer = 0
3022
            Dim dGap As Double = 0
3023
            For i = 0 To 3
3024
                If dGap = 0 Then
3025
                    iNearPoint = i
3026
                    dGap = Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y)
3027
                Else
3028
                    If dGap >= Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y) Then
3029
                        iNearPoint = i
3030
                        dGap = Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y)
3031
                    End If
3032
                End If
3033
            Next
3034
            dNear_x = oConnectionPoints_x(iNearPoint)
3035
            dNear_y = oConnectionPoints_y(iNearPoint)
3036
        Catch ex As Exception
3037

    
3038
        End Try
3039

    
3040
    End Sub
3041

    
3042
    Private Function GetPipeColor(ByVal sType As String) As Color
3043
        If sType.ToUpper() = "ELECTRIC" Then
3044
            Return Color.DarkOrange
3045
        ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
3046
            Return Color.LightGreen
3047
        ElseIf sType.ToUpper() = "SOFTWARE" Then
3048
            Return Color.Blue
3049
        ElseIf sType.ToUpper() = "PNEUMATIC" Then
3050
            Return Color.Gray
3051
        Else
3052
            Return Color.Black
3053
        End If
3054
    End Function
3055

    
3056
    Private Function GetPipeType(ByVal sType As String) As String
3057
        Dim sSystempath As String = "\Piping\Routing\Process Lines\Primary Piping.sym" ' oPipeRow(0)(_XML_LINE_SYSTEMPATH).ToString()
3058
        If sType.ToUpper() = "ELECTRIC" Then
3059
            sSystempath = "\Instrumentation\Signal Line\Electric.sym"
3060
        ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
3061
            sSystempath = "\Instrumentation\Signal Line\Connect to Process.sym"
3062
        ElseIf sType.ToUpper() = "SOFTWARE" Then
3063
            sSystempath = "\Instrumentation\Signal Line\Software Link.sym"
3064
        ElseIf sType.ToUpper() = "PNEUMATIC" Then
3065
            sSystempath = "\Instrumentation\Signal Line\Pneumatic.sym"
3066
        Else
3067
        End If
3068
        Return sSystempath
3069
    End Function
3070

    
3071
    Private Sub InitAutoRouting()
3072
        For Each oDrwing As TreeNode In Tree_Result.Nodes
3073
            For Each oDwgNode As TreeNode In oDrwing.Nodes
3074
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
3075
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
3076
                If CDrawing IsNot Nothing Then
3077
                    Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
3078
                    Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
3079
                    SetListBoxItems(ListBox_Result, "Place " & CDrawing.DwgName & "....")
3080

    
3081
                    For Each oNode As TreeNode In oDwgNode.Nodes
3082
                        Dim iItemcnt As Integer = 0
3083
                        Dim sNodeUid As String = oNode.Name
3084
                        Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
3085
                        Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
3086
                        If CLineNo IsNot Nothing Then
3087
                            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
3088
                            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
3089

    
3090
                            For Each oLineRow In oLine_Dt.Rows
3091
                                ' oLineRow(_XML_LINE_UID) = ""
3092
                                oLineRow(_XML_LINE_SPID) = ""
3093
                                oLineRow(_XML_LINE_LMCONNECTOR) = Nothing
3094
                                oLineRow(_XML_LINE_LMCONNECTOR_1) = Nothing
3095
                                oLineRow(_XML_LINE_LMCONNECTOR_2) = Nothing
3096
                                oLineRow(_XML_LINE_DRAWING_TF) = "FALSE"
3097
                                oLineRow(_XML_LINE_Check) = "FALSE"
3098
                            Next
3099
                            For Each oSymbolRow In oSymbol_Dt.Rows
3100
                                '   oSymbolRow(_XML_SYMBOL_UID) = ""
3101
                                oSymbolRow(_XML_SYMBOL_SPID) = ""
3102
                                oSymbolRow(_XML_SYMBOL_LMSYMBOL) = Nothing
3103
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_1) = Nothing
3104
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_2) = Nothing
3105
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_3) = Nothing
3106
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_4) = Nothing
3107
                                oSymbolRow(_XML_SYMBOL_Check) = "FALSE"
3108
                                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
3109

    
3110
                            Next
3111

    
3112
                        End If
3113

    
3114
                        Dim CTRIMLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
3115
                        If CTRIMLineNo IsNot Nothing Then
3116
                            Dim oLine_Dt As DataTable = CTRIMLineNo.Dt_Line
3117
                            Dim oSymbol_Dt As DataTable = CTRIMLineNo.Dt_Symbol
3118

    
3119
                            For Each oLineRow In oLine_Dt.Rows
3120
                                ' oLineRow(_XML_LINE_UID) = ""
3121
                                oLineRow(_XML_LINE_SPID) = ""
3122
                                oLineRow(_XML_LINE_LMCONNECTOR) = Nothing
3123
                                oLineRow(_XML_LINE_LMCONNECTOR_1) = Nothing
3124
                                oLineRow(_XML_LINE_LMCONNECTOR_2) = Nothing
3125
                                oLineRow(_XML_LINE_DRAWING_TF) = "FALSE"
3126
                                oLineRow(_XML_LINE_Check) = "FALSE"
3127
                            Next
3128
                            For Each oSymbolRow In oSymbol_Dt.Rows
3129
                                '   oSymbolRow(_XML_SYMBOL_UID) = ""
3130
                                oSymbolRow(_XML_SYMBOL_SPID) = ""
3131
                                oSymbolRow(_XML_SYMBOL_LMSYMBOL) = Nothing
3132
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_1) = Nothing
3133
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_2) = Nothing
3134
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_3) = Nothing
3135
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_4) = Nothing
3136
                                oSymbolRow(_XML_SYMBOL_Check) = "FALSE"
3137
                                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
3138

    
3139
                            Next
3140

    
3141
                        End If
3142
                    Next
3143
                End If
3144
            Next
3145
        Next
3146
    End Sub
3147

    
3148

    
3149

    
3150

    
3151

    
3152

    
3153
    Private Function CheckBranchLine(ByVal dStartX As Double, ByVal dStartY As Double,
3154
                                ByRef dEndX As Double, ByRef dEndY As Double, ByRef sBranchType As String, ByRef oLMConnector As LMConnector) As Boolean
3155

    
3156
        Try
3157

    
3158
            For Each oModelrow In _ModelingLine_Dt.Rows
3159
                'Dim sStartPoint As String = oModelrow(_XML_LINE_STARTPOINT)
3160
                'Dim sEndPoint As String = oModelrow(_XML_LINE_ENDPOINT)
3161
                Dim dModelStartX As Double
3162
                Dim dModelStartY As Double
3163
                Dim dModelEndX As Double
3164
                Dim dModelEndY As Double
3165
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3166
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3167
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3168
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3169
                'ConvertPointBystring(sStartPoint, dModelStartX, dModelStartY)
3170
                'ConvertPointBystring(sEndPoint, dModelEndX, dModelEndY)
3171
                'ConvertPointByImage(dModelStartX, dModelStartY, _IMG_X, _IMG_Y)
3172
                'ConvertPointByImage(dModelEndX, dModelEndY, _IMG_X, _IMG_Y)
3173
                Dim dGap As Double = 0.0002
3174
                Dim d기준x As Double = (dModelStartX + dModelEndX) / 2
3175
                Dim d기준y As Double = (dModelStartY + dModelEndY) / 2
3176
                Try
3177
                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3178
                Catch ex As Exception
3179

    
3180
                End Try
3181
                Dim oRun As LMPipeRun = Nothing
3182
                Try
3183

    
3184
                    oRun = _Placement.PIDDataSource.GetPipeRun(oLMConnector.ModelItemID)
3185
                    Dim dResultCalc As Double = -1
3186
                    For Each objRep In oRun.Representations
3187
                        If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then
3188
                            Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
3189
                            For Each objConnectorVertex In objConnector.ConnectorVertices
3190
                                Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3191
                                Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3192
                                Dim dStartCalc As Double = Math.Abs(dStartX - dConn_X) + Math.Abs(dStartY - dConn_Y)
3193

    
3194
                                If dResultCalc > dStartCalc Or dResultCalc = -1 Then
3195
                                    dResultCalc = dStartCalc
3196
                                    oLMConnector = objConnector
3197
                                    d기준x = dConn_X
3198
                                    d기준y = dConn_Y
3199
                                End If
3200
                                Dim dEndCalc As Double = Math.Abs(dEndX - dConn_X) + Math.Abs(dEndY - dConn_Y)
3201
                                If dResultCalc > dEndCalc Then
3202
                                    dResultCalc = dEndCalc
3203
                                    oLMConnector = objConnector
3204
                                    d기준x = dConn_X
3205
                                    d기준y = dConn_Y
3206
                                End If
3207
                            Next
3208
                        End If
3209
                    Next
3210
                    '        _Placement.PIDConnectPointLocation(oRun, 1, dModelStartX, dModelEndX)
3211
                    '       _Placement.PIDConnectPointLocation(oRun, 2, dModelEndX, dModelEndY)
3212
                Catch ex As Exception
3213
                End Try
3214

    
3215

    
3216
                'Dim sSPID As String = oModelrow(_XML_LINE_SPID).ToString()
3217
                'Dim oPipeRun As LMPipeRun = _Placement.PIDDataSource.Get PipeRun(sSPID)
3218
                'If dModelStartX + dGap > dStartX And dModelStartX - dGap < dStartX And
3219
                '        dModelStartY + dGap > dStartY And dModelStartY - dGap < dStartY Then
3220
                '    dStartX = dModelStartX
3221
                '    dStartY = dModelStartY
3222
                'ElseIf dModelEndX + dGap > dStartX And dModelEndX - dGap < dStartX And
3223
                '        dModelEndY + dGap > dStartY And dModelEndY - dGap < dStartY Then
3224
                '    dStartX = dModelEndX
3225
                '    dStartY = dModelEndY
3226
                'End If
3227

    
3228
                'Vetical
3229
                If Math.Abs(dModelStartX - dModelEndX) <= Math.Abs(dModelStartY - dModelEndY) Then
3230
                    If Math.Abs(dStartX - dEndX) >= Math.Abs(dStartY - dEndY) Then
3231
                        'Horizontal 
3232
                        ' dGap = 0.0002 'Math.Abs(dStartX - dEndX) / 20
3233
                        '기준선의 Y범위안에 가로선이 포함되어야됨
3234
                        If (dModelStartY + dGap >= dStartY And dModelEndY - dGap <= dStartY) Or
3235
                            (dModelStartY - dGap <= dStartY And dModelEndY + dGap >= dStartY) And
3236
                            (dModelStartY + dGap >= dEndY And dModelEndY - dGap <= dEndY) Or
3237
                            (dModelStartY - dGap <= dEndY And dModelEndY + dGap >= dEndY) Then
3238
                            '기준선보다 왼쪽에 가로선이 있을때
3239
                            If d기준x >= dStartX And d기준x >= dEndX Then
3240
                                If dStartX >= dEndX Then
3241
                                    'dStartX 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
3242
                                    If dStartX + dGap >= d기준x Then
3243
                                        dStartX = d기준x
3244
                                        sBranchType = "1"
3245
                                        Return True
3246
                                    End If
3247
                                Else
3248
                                    'dEndX 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
3249
                                    If dEndX + dGap >= d기준x Then
3250
                                        dEndX = d기준x
3251
                                        sBranchType = "2"
3252
                                        Return True
3253
                                    End If
3254
                                End If
3255
                                '기준선보다 오른쪽에 가로선이 있을때
3256
                            ElseIf d기준x <= dStartX And d기준x <= dEndX Then
3257
                                If dStartX >= dEndX Then
3258
                                    'dEndX 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
3259
                                    If dEndX - dGap <= d기준x Then
3260
                                        dEndX = d기준x
3261
                                        sBranchType = "2"
3262
                                        Return True
3263
                                    End If
3264
                                Else
3265
                                    'dStartX 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
3266
                                    If dStartX - dGap <= d기준x Then
3267
                                        dStartX = d기준x
3268
                                        sBranchType = "1"
3269
                                        Return True
3270
                                    End If
3271
                                End If
3272
                            Else
3273
                                '기준선과 세로선이 겹칠때
3274
                                If (d기준x >= dStartX And d기준x <= dEndX) Or
3275
                                        (d기준x <= dStartX And d기준x >= dEndX) Then
3276
                                    If (dModelStartY <= dStartY And dModelEndY >= dEndY) Or
3277
                                        (dModelStartY >= dStartY And dModelEndY <= dEndY) Then
3278
                                        '기준선이 dStartX와 dEndX중 어느쪽에 가까운지 확인
3279
                                        '가로선의 왼쪽점과 기준선이 가까울때는 gap만큼 뺐을때 기준선보다 작은지확인
3280
                                        '가로선의 오른쪽점과 기준선이 가까울때는 gap만큼 더했을때 기준선보다 큰지확인
3281
                                        If Math.Abs(d기준x - dStartX) >= Math.Abs(d기준x - dEndX) Then
3282
                                            'EndX점이 기준선과 더 가까이 있음
3283
                                            If dStartX >= dEndX Then
3284
                                                '가로선의 왼쪽점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
3285
                                                If dEndX - dGap <= d기준x Then
3286
                                                    dEndX = d기준x
3287
                                                    sBranchType = "4"
3288
                                                    Return True
3289
                                                End If
3290
                                            Else
3291
                                                '가로선의 오른쪽점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
3292
                                                If dEndX + dGap >= d기준x Then
3293
                                                    dEndX = d기준x
3294
                                                    sBranchType = "4"
3295
                                                    Return True
3296
                                                End If
3297

    
3298
                                            End If
3299
                                        Else
3300
                                            'dStartX점이 기준선과 더 가까이 있음
3301
                                            If dStartX >= dEndX Then
3302
                                                '가로선의 오른쪽점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
3303
                                                If dStartX + dGap >= d기준x Then
3304
                                                    dStartX = d기준x
3305
                                                    sBranchType = "3"
3306
                                                    Return True
3307
                                                End If
3308

    
3309
                                            Else
3310
                                                '가로선의 왼쪽점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
3311
                                                If dStartX - dGap <= d기준x Then
3312
                                                    dStartX = d기준x
3313
                                                    sBranchType = "3"
3314
                                                    Return True
3315
                                                End If
3316
                                            End If
3317
                                        End If
3318
                                    End If
3319

    
3320
                                End If
3321
                            End If
3322
                        End If
3323

    
3324
                    End If
3325
                Else
3326
                    'Horizontal
3327
                    If Math.Abs(dModelStartX - dModelEndX) >= Math.Abs(dModelStartY - dModelEndY) Then
3328
                        'Vertical
3329
                        If Math.Abs(dStartX - dEndX) <= Math.Abs(dStartY - dEndY) Then
3330
                            '  dGap = 0.0015 'Math.Abs(dStartY - dEndY) / 80
3331

    
3332
                            '기준선의 X범위안에 세로선이 포함되어야됨
3333
                            If ((dModelStartX + dGap >= dStartX And dModelEndX - dGap <= dStartX) Or
3334
                            (dModelStartX - dGap <= dStartX And dModelEndX + dGap >= dStartX)) And
3335
                            ((dModelStartX + dGap >= dEndX And dModelEndX - dGap <= dEndX) Or
3336
                            (dModelStartX - dGap <= dEndX And dModelEndX + dGap >= dEndX)) Then
3337

    
3338
                                '가로선보다 아래에 세로선이 있을때
3339
                                If d기준y >= dStartY And d기준y >= dEndY Then
3340
                                    If dStartY >= dEndY Then
3341
                                        'dStartY 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
3342
                                        If dStartY + dGap >= d기준y Then
3343
                                            dStartY = d기준y
3344
                                            sBranchType = "3"
3345
                                            Return True
3346
                                        End If
3347
                                    Else
3348
                                        'dEndY 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
3349
                                        If dEndY + dGap >= d기준y Then
3350
                                            dEndY = d기준y
3351

    
3352
                                            If Math.Abs(dEndX - dModelStartX) > Math.Abs(dEndX - dModelEndX) Then
3353
                                                dEndX = dModelEndX
3354
                                            Else
3355
                                                dEndX = dModelStartX
3356
                                            End If
3357

    
3358
                                            sBranchType = "4"
3359
                                            Return True
3360
                                        End If
3361
                                    End If
3362
                                    '기준선보다 위에 세로선이 있을때
3363
                                ElseIf d기준y <= dStartY And d기준y <= dEndY Then
3364
                                    If dStartY >= dEndY Then
3365
                                        'dEndY 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
3366
                                        If dEndY - dGap <= d기준y Then
3367
                                            dEndY = d기준y
3368
                                            sBranchType = "4"
3369
                                            Return True
3370
                                        End If
3371
                                    Else
3372
                                        'dStartY 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
3373
                                        If dStartY - dGap <= d기준y Then
3374
                                            dStartY = d기준y
3375
                                            sBranchType = "3"
3376
                                            Return True
3377
                                        End If
3378
                                    End If
3379
                                Else
3380
                                    '기준선과 세로선이 겹칠때
3381
                                    If (d기준y >= dStartY And d기준y <= dEndY) Or
3382
                                            (d기준y <= dStartY And d기준y >= dEndY) Then
3383
                                        '기준선이 dStartY와 dEndY중 어느쪽에 가까운지 확인
3384
                                        '세로선의 윗점과 기준선이 가까울때는 gap만큼 뺐을때 기준선보다 작은지확인
3385
                                        '세로선의 아래점과 기준선이 가까울때는 gap만큼 더했을때 기준선보다 큰지확인
3386
                                        If (dModelStartX <= dStartX And dModelEndX >= dEndX) Or
3387
                                            (dModelStartX >= dStartX And dModelEndX <= dEndX) Then
3388
                                            If Math.Abs(d기준y - dStartY) >= Math.Abs(d기준y - dEndY) Then
3389
                                                'Endy점이 기준선과 더 가까이 있음
3390
                                                If dStartY >= dEndY Then
3391
                                                    '세로선의 아래점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
3392
                                                    If dEndY + dGap >= d기준y Then
3393
                                                        dEndY = d기준y
3394
                                                        sBranchType = "4"
3395
                                                        Return True
3396
                                                    End If
3397
                                                Else
3398
                                                    '세로선의 윗점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
3399
                                                    If dEndY - dGap <= d기준y Then
3400
                                                        dEndY = d기준y
3401
                                                        sBranchType = "4"
3402
                                                        Return True
3403
                                                    End If
3404
                                                End If
3405
                                            Else
3406
                                                'dStartY점이 기준선과 더 가까이 있음
3407
                                                If dStartY >= dEndY Then
3408
                                                    '세로선의 윗점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
3409
                                                    If dStartY - dGap <= d기준y Then
3410
                                                        dStartY = d기준y
3411
                                                        sBranchType = "3"
3412
                                                        Return True
3413
                                                    End If
3414
                                                Else
3415
                                                    '세로선의 아래점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
3416
                                                    If dStartY + dGap >= d기준y Then
3417
                                                        dStartY = d기준y
3418
                                                        sBranchType = "3"
3419
                                                        Return True
3420
                                                    End If
3421
                                                End If
3422
                                            End If
3423
                                        End If
3424

    
3425
                                    End If
3426
                                End If
3427
                            End If
3428
                        End If
3429
                    End If
3430
                End If
3431
            Next
3432
        Catch ex As Exception
3433

    
3434
        End Try
3435
        oLMConnector = Nothing
3436
        Return False
3437
    End Function
3438

    
3439
    Private Function CheckConnectionSymbolToSymbol(ByVal oModelingLineRows() As DataRow, ByRef dX As Double, ByRef dY As Double,
3440
                                  ByRef oLMConnector As LMConnector) As Boolean
3441
        Dim bConnectionFlag As Boolean = False
3442
        Try
3443
            For Each oModelrow In oModelingLineRows
3444
                Dim d기준x As Double = dX
3445
                Dim d기준y As Double = dY
3446
                Dim dGap As Double = 0.0002
3447
                Dim oRun As LMPipeRun = Nothing
3448
                Try
3449
                    Dim oLMSymbol As LMSymbol = oModelrow(_XML_SYMBOL_LMSYMBOL)
3450
                    Dim dX1 As Double = 0.0
3451
                    Dim dY1 As Double = 0.0
3452
                    Dim dX2 As Double = 0.0
3453
                    Dim dY2 As Double = 0.0
3454
                    For Each oConnector In oLMSymbol.Connect1Connectors
3455
                        oLMConnector = oConnector
3456
                    Next
3457
                    '  oRun = _Placement.PIDDataSource.GetPipeRun(oLMSymbol.Connect1Connectors.Nth(1).ModelItemID)
3458
                    _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
3459
                    _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
3460
                    If Math.Abs(dX - dX1) < dGap And Math.Abs(dY - dY1) < dGap Then
3461
                        dX = dX1
3462
                        dY = dY1
3463
                        bConnectionFlag = True
3464
                        Exit For
3465
                    End If
3466
                    If Math.Abs(dX - dX2) < dGap And Math.Abs(dY - dY2) < dGap Then
3467
                        dX = dX2
3468
                        dY = dY2
3469
                        bConnectionFlag = True
3470
                        Exit For
3471
                    End If
3472

    
3473
                    'For Each oConnector In oLMSymbol.Connect1Connectors
3474
                    '    For Each objConnectorVertex In oConnector.ConnectorVertices
3475
                    '        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3476
                    '        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3477
                    '        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3478
                    '            oLMConnector = oConnector
3479
                    '            dX = dConn_X
3480
                    '            dY = dConn_Y
3481
                    '            bConnectionFlag = True
3482
                    '            Exit For
3483
                    '        End If
3484
                    '    Next
3485
                    'Next
3486

    
3487
                    'For Each oConnector In oLMSymbol.Connect2Connectors
3488
                    '    For Each objConnectorVertex In oConnector.ConnectorVertices
3489
                    '        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3490
                    '        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3491
                    '        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3492
                    '            oLMConnector = oConnector
3493
                    '            dX = dConn_X
3494
                    '            dY = dConn_Y
3495
                    '            bConnectionFlag = True
3496
                    '            Exit For
3497
                    '        End If
3498
                    '    Next
3499
                    'Next
3500

    
3501

    
3502
                    'If oRun IsNot Nothing Then
3503
                    '    Dim dResultCalc As Double = -1
3504
                    '    For Each objRep In oRun.Representations
3505
                    '        Dim sRepresentationType As String = objRep.Attributes("RepresentationType").Value
3506
                    '        If objRep.Attributes("RepresentationType").Value = "Connector" Or
3507
                    '            objRep.Attributes("RepresentationType").Value = "Symbol" And
3508
                    '             objRep.Attributes("ItemStatus").Value = "Active" Then
3509
                    '            Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
3510
                    '            For Each objConnectorVertex In objConnector.ConnectorVertices
3511
                    '                Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3512
                    '                Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3513
                    '                If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3514
                    '                    oLMConnector = objConnector
3515
                    '                    d기준x = dConn_X
3516
                    '                    d기준y = dConn_Y
3517
                    '                    bConnectionFlag = True
3518
                    '                    Exit For
3519
                    '                End If
3520
                    '            Next
3521
                    '        End If
3522
                    '    Next
3523
                    'End If
3524

    
3525
                Catch ex As Exception
3526
                End Try
3527
            Next
3528

    
3529
        Catch ex As Exception
3530

    
3531
        End Try
3532
        Return bConnectionFlag
3533
    End Function
3534

    
3535
    Private Function CheckConnectionSymbolToLine(ByVal oModelingLineRows() As DataRow, ByRef dX As Double, ByRef dY As Double,
3536
ByVal dCenterX As Double, ByVal dCenterY As Double, ByRef oLMConnector As LMConnector) As LMSymbol
3537
        Dim bConnectionFlag As Boolean = False
3538
        Dim oLMSymbol As LMSymbol = Nothing
3539
        Try
3540

    
3541
            For Each oModelrow In oModelingLineRows
3542
                Dim d기준x As Double = dCenterX
3543
                Dim d기준y As Double = dCenterY
3544
                Dim dGap As Double = 0.001
3545
                Dim oRun As LMPipeRun = Nothing
3546
                Dim dCheckGap As Double = 0
3547
                Try
3548

    
3549
                    Dim dX1 As Double = 0.0
3550
                    Dim dY1 As Double = 0.0
3551
                    Dim dX2 As Double = 0.0
3552
                    Dim dY2 As Double = 0.0
3553
                    '  oRun = _Placement.PIDDataSource.GetPipeRun(oLMSymbol.Connect1Connectors.Nth(1).ModelItemID)
3554
                    oLMSymbol = oModelrow(_XML_SYMBOL_LMSYMBOL)
3555
                    For Each oConnector In oLMSymbol.Connect1Connectors
3556
                        oLMConnector = oConnector
3557
                    Next
3558
                    _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
3559
                    _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
3560
                    '  If Math.Abs(dX - dX1) < dGap And Math.Abs(dY - dY1) < dGap And
3561
                    If Math.Abs(d기준x - dX1) < dCheckGap And Math.Abs(d기준y - dY1) < dCheckGap Or dCheckGap = 0 Then
3562
                        dX = dX1
3563
                        dY = dY1
3564
                        bConnectionFlag = True
3565
                        dCheckGap = Math.Abs(d기준x - dX1) + Math.Abs(d기준y - dY1)
3566
                    End If
3567
                    'If Math.Abs(dX - dX2) < dGap And Math.Abs(dY - dY2) < dGap And
3568
                    '  Math.Abs(d기준x - dX2) < dCheckGap And Math.Abs(d기준y - dY2 < dCheckGap) Or dCheckGap = 0 Then
3569
                    If Math.Abs(d기준x - dX2) < dCheckGap And Math.Abs(d기준y - dY2) < dCheckGap Or dCheckGap = 0 Then
3570
                        dX = dX2
3571
                        dY = dY2
3572
                        bConnectionFlag = True
3573
                    End If
3574

    
3575
                Catch ex As Exception
3576
                End Try
3577
                If bConnectionFlag Then
3578
                    oLMSymbol = oModelrow(_XML_SYMBOL_LMSYMBOL)
3579
                Else
3580
                    oLMSymbol = Nothing
3581
                End If
3582
            Next
3583

    
3584
        Catch ex As Exception
3585

    
3586
        End Try
3587

    
3588
        Return oLMSymbol
3589
    End Function
3590

    
3591
    ''' <summary>
3592
    ''' 라인과 라인이 만나는점이 브런치점인지 확인, 오차범위내 라인보정
3593
    ''' </summary>
3594
    ''' <param name="oModelingLineRows"></param>
3595
    ''' <param name="dStartX"></param>
3596
    ''' <param name="dStartY"></param>
3597
    ''' <param name="dEndX"></param>
3598
    ''' <param name="dEndY"></param>
3599
    ''' <param name="oLMConnector"></param>
3600
    ''' <returns></returns>
3601
    Private Function CheckBranchLine(ByVal oModelingLineRows As DataRowCollection, ByRef dStartX As Double, ByRef dStartY As Double,
3602
                                     ByRef dEndX As Double, ByRef dEndY As Double, ByRef oLMConnector As LMConnector) As String
3603
        Dim bConnectionFlag As Boolean = False
3604
        Dim sBranchDirection As String = ""
3605
        Try
3606
            For Each oModelrow In oModelingLineRows
3607
                Dim dModelStartX As Double
3608
                Dim dModelStartY As Double
3609
                Dim dModelEndX As Double
3610
                Dim dModelEndY As Double
3611
                Dim dGap As Double = 0.002
3612
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3613
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3614
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3615
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3616

    
3617
                '기존라인이 X축방향이라면 현재선은 Y축방향이 되어야됨
3618
                If Math.Abs(dModelStartX - dModelEndX) > Math.Abs(dModelStartY - dModelEndY) And
3619
                    Math.Abs(dStartX - dEndX) < Math.Abs(dStartY - dEndY) Then
3620

    
3621
                    '기본라인의 X축영역안에 현재선이 있어야됨
3622
                    '      If dModelEndY > dModelStartY Then
3623
                    If (dStartX < dModelEndX And dStartX > dModelStartX) Or
3624
                            (dStartX > dModelEndX And dStartX < dModelStartX) Then
3625
                        '[오차범위 수정]
3626
                        '현재선의 Y축방향이 기존라인의 X축방향을 통과하는지 확인
3627
                        If dStartY < dEndY Then
3628
                            If dEndY > dModelStartY And dModelStartY > dStartY Then
3629
                                If dEndY - dModelStartY > dModelStartY - dStartY Then
3630
                                    '위쪽으로 라인이 나와있을때
3631
                                    '현재선 중 작은 Y좌표를 오차범위만큼 더했을때 기존라인의 Y축보다 큰지확인 
3632
                                    'Y축보다 클경우 작은 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 큰 Y좌표에 더한다.
3633
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3634
                                        Dim dAddPoint As Double = dModelStartY - dStartY
3635
                                        dEndY = dEndY + dAddPoint
3636
                                        dStartY = dModelStartY
3637
                                        sBranchDirection = "START"
3638
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3639
                                        Exit For
3640
                                    End If
3641
                                Else
3642
                                    '아래쪽으로 라인이 나와있을때
3643
                                    '현재선 중 큰 Y좌표를 오차범위만큼 뺐을때 기존라인의 Y축보다 작은지확인 
3644
                                    'Y축보다 작을경우 큰 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 작은 Y좌표에 뺀다.
3645
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3646
                                        Dim dAddPoint As Double = dEndY - dModelStartY
3647
                                        dStartY = dStartY - dAddPoint
3648
                                        dEndY = dModelStartY
3649
                                        sBranchDirection = "END"
3650
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3651
                                        Exit For
3652
                                    End If
3653
                                End If
3654
                            Else
3655
                                '현재선의 Y축방향이 기존라인의 X축방향에 못미치는지 확인
3656
                                If dStartY > dModelStartY Then
3657
                                    '기존라인보다 위쪽에 현재선이 있을때
3658
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3659
                                        '오차범위만큼 작은 y좌표를 뺐을때 기존라인보다 아래쪽에 있을경우 오차보정
3660
                                        Dim dAddPoint As Double = dStartY - dModelStartY
3661
                                        dEndY = dEndY - dAddPoint
3662
                                        dStartY = dModelStartY
3663
                                        sBranchDirection = "START"
3664
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3665
                                        Exit For
3666
                                    End If
3667
                                Else
3668
                                    '기존라인보다 아래쪽에 현재선이 있을때
3669
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3670
                                        '오차범위만큼 큰 y좌표를 더했을때 기존라인보다 위쪽에 있을경우 오차보정
3671
                                        Dim dAddPoint As Double = dModelStartY - dEndY
3672
                                        dEndY = dModelStartY
3673
                                        dStartY = dStartY + dAddPoint
3674
                                        sBranchDirection = "END"
3675
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3676
                                        Exit For
3677
                                    End If
3678
                                End If
3679
                            End If
3680
                        Else
3681
                            If dEndY < dModelStartY And dModelStartY < dStartY Then
3682
                                If dModelStartY - dEndY < dStartY - dModelStartY Then
3683
                                    '위쪽으로 라인이 나와있을때
3684
                                    '현재선 중 작은 Y좌표를 오차범위만큼 더했을때 기존라인의 Y축보다 큰지확인 
3685
                                    'Y축보다 클경우 작은 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 큰 Y좌표에 더한다.
3686
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3687
                                        Dim dAddPoint As Double = dModelStartY - dEndY
3688
                                        dStartY = dStartY + dAddPoint
3689
                                        dEndY = dModelStartY
3690
                                        sBranchDirection = "END"
3691
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3692
                                        Exit For
3693
                                    End If
3694
                                Else
3695
                                    '아래쪽으로 라인이 나와있을때
3696
                                    '현재선 중 큰 Y좌표를 오차범위만큼 뺐을때 기존라인의 Y축보다 작은지확인 
3697
                                    'Y축보다 작을경우 큰 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 작은 Y좌표에 뺀다.
3698
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3699
                                        Dim dAddPoint As Double = dStartY - dModelStartY
3700
                                        dEndY = dEndY - dAddPoint
3701
                                        dStartY = dModelStartY
3702
                                        sBranchDirection = "START"
3703
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3704
                                        Exit For
3705
                                    End If
3706
                                End If
3707
                            Else
3708
                                If dEndY > dModelStartY Then
3709
                                    '기존라인보다 우측에 현재선이 있을때
3710
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3711
                                        '오차범위만큼 작은 x좌표를 뺐을때 기존라인보다 좌측에 있을경우 오차보정
3712
                                        Dim dAddPoint As Double = dEndY - dModelStartY
3713
                                        dStartY = dStartY - dAddPoint
3714
                                        dEndY = dModelStartY
3715
                                        sBranchDirection = "END"
3716
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3717
                                        Exit For
3718
                                    End If
3719
                                Else
3720
                                    '기존라인보다 좌측에 현재선이 있을때
3721
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3722
                                        '오차범위만큼 큰 x좌표를 더했을때 기존라인보다 우측에 있을경우 오차보정
3723
                                        Dim dAddPoint As Double = dModelStartY - dStartY
3724
                                        dStartY = dModelStartY
3725
                                        dEndY = dEndY + dAddPoint
3726
                                        sBranchDirection = "START"
3727
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3728
                                        Exit For
3729
                                    End If
3730
                                End If
3731
                            End If
3732
                        End If
3733
                    End If
3734
                    '기존라인이 Y축방향이라면 현재선은 X축방향이 되어야됨
3735
                ElseIf Math.Abs(dModelStartX - dModelEndX) < Math.Abs(dModelStartY - dModelEndY) And
3736
                Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
3737

    
3738
                    '기본라인의 Y축영역안에 현재선이 있어야됨
3739
                    '      If dModelEndY > dModelStartY Then
3740
                    If (dStartY < dModelEndY And dStartY > dModelStartY) Or
3741
                            (dStartY > dModelEndY And dStartY < dModelStartY) Then
3742
                        '[오차범위 수정]
3743
                        '현재선의 X축방향이 기존라인의 Y축방향을 통과하는지 확인
3744
                        If dStartX < dEndX Then
3745
                            If dEndX > dModelStartX And dModelStartX > dStartX Then
3746
                                If dEndX - dModelStartX > dModelStartX - dStartX Then
3747
                                    '우측으로 라인이 나와있을때
3748
                                    '현재선 중 작은 X좌표를 오차범위만큼 더했을때 기존라인의 X축보다 큰지확인 
3749
                                    'X축보다 클경우 작은 X좌표를 기존라인의 X축에 맞추고 더한 길이만큼 큰 X좌표에 더한다.
3750
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3751
                                        Dim dAddPoint As Double = dModelStartX - dStartX
3752
                                        dEndX = dEndX + dAddPoint
3753
                                        dStartX = dModelStartX
3754
                                        sBranchDirection = "START"
3755
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3756
                                        Exit For
3757
                                    End If
3758
                                Else
3759
                                    '좌측으로 라인이 나와있을때
3760
                                    '현재선 중 큰 X좌표를 오차범위만큼 뺐을때 기존라인의 X축보다 작은지확인 
3761
                                    'X축보다 작을경우 큰 X좌표를 기존라인의 X축에 맞추고 뺀 길이만큼 작은 X좌표에 뺀다.
3762
                                    If Math.Abs(dEndX - dModelStartX) <= dGap Then
3763
                                        Dim dAddPoint As Double = dEndX - dModelStartX
3764
                                        dStartX = dStartX - dAddPoint
3765
                                        dEndX = dModelStartX
3766
                                        sBranchDirection = "END"
3767
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3768
                                        Exit For
3769
                                    End If
3770
                                End If
3771
                            Else
3772
                                '현재선의 X축방향이 기존라인의 Y축방향에 못미치는지 확인
3773
                                If dStartX > dModelStartX Then
3774
                                    '기존라인보다 우측에 현재선이 있을때
3775
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3776
                                        '오차범위만큼 작은 x좌표를 뺐을때 기존라인보다 좌측에 있을경우 오차보정
3777
                                        Dim dAddPoint As Double = dStartX - dModelStartX
3778
                                        dEndX = dEndX - dAddPoint
3779
                                        dStartX = dModelStartX
3780
                                        sBranchDirection = "START"
3781
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3782
                                        Exit For
3783
                                    End If
3784
                                Else
3785
                                    '기존라인보다 좌측에 현재선이 있을때
3786
                                    If Math.Abs(dEndX - dModelStartX) <= dGap Then
3787
                                        '오차범위만큼 큰 x좌표를 더했을때 기존라인보다 우측에 있을경우 오차보정
3788
                                        Dim dAddPoint As Double = dModelStartX - dEndX
3789
                                        dEndX = dModelStartX
3790
                                        dStartX = dStartX + dAddPoint
3791
                                        sBranchDirection = "END"
3792
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3793
                                        Exit For
3794
                                    End If
3795
                                End If
3796
                            End If
3797
                        Else
3798
                            If dEndX < dModelStartX And dModelStartX < dStartX Then
3799
                                If dModelStartX - dEndX < dStartX - dModelStartX Then
3800
                                    '우측으로 라인이 나와있을때
3801
                                    '현재선 중 작은 X좌표를 오차범위만큼 더했을때 기존라인의 X축보다 큰지확인 
3802
                                    'X축보다 클경우 작은 X좌표를 기존라인의 X축에 맞추고 더한 길이만큼 큰 X좌에 더한다.
3803
                                    If Math.Abs(dModelStartX - dEndX) <= dGap Then
3804
                                        Dim dAddPoint As Double = dModelStartX - dEndX
3805
                                        dStartX = dStartX + dAddPoint
3806
                                        dEndX = dModelStartX
3807
                                        sBranchDirection = "END"
3808
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3809
                                        Exit For
3810
                                    End If
3811
                                Else
3812
                                    '좌측으로 라인이 나와있을때
3813
                                    '현재선 중 큰 X좌표를 오차범위만큼 뺐을때 기존라인의 X축보다 작은지확인 
3814
                                    'X축보다 작을경우 큰 X좌표를 기존라인의 X축에 맞추고 뺀 길이만큼 작은 X좌표에 뺀다.
3815
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3816
                                        Dim dAddPoint As Double = dStartX - dModelStartX
3817
                                        dEndX = dEndX - dAddPoint
3818
                                        dStartX = dModelStartX
3819
                                        sBranchDirection = "START"
3820
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3821
                                        Exit For
3822
                                    End If
3823

    
3824
                                End If
3825
                            Else
3826
                                If dEndX > dModelStartX Then
3827
                                    '기존라인보다 우측에 현재선이 있을때
3828
                                    If Math.Abs(dEndX - dModelStartX) <= dGap Then
3829
                                        '오차범위만큼 작은 x좌표를 뺐을때 기존라인보다 좌측에 있을경우 오차보정
3830
                                        Dim dAddPoint As Double = dEndX - dModelStartX
3831
                                        dStartX = dStartX - dAddPoint
3832
                                        dEndX = dModelStartX
3833
                                        sBranchDirection = "END"
3834
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3835
                                        Exit For
3836
                                    End If
3837
                                Else
3838
                                    '기존라인보다 좌측에 현재선이 있을때
3839
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3840
                                        '오차범위만큼 큰 x좌표를 더했을때 기존라인보다 우측에 있을경우 오차보정
3841
                                        Dim dAddPoint As Double = dModelStartX - dStartX
3842
                                        dStartX = dModelStartX
3843
                                        dEndX = dEndX + dAddPoint
3844
                                        sBranchDirection = "START"
3845
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3846
                                        Exit For
3847
                                    End If
3848
                                End If
3849
                            End If
3850
                        End If
3851
                    End If
3852
                End If
3853
            Next
3854
        Catch ex As Exception
3855
            bConnectionFlag = False
3856
            oLMConnector = Nothing
3857
        End Try
3858
        Return sBranchDirection
3859

    
3860
    End Function
3861

    
3862
    Private Function UpdateCheckBranchLine(ByRef dX As Double, ByRef dY As Double,
3863
                                  ByRef oLMConnector As LMConnector) As Boolean
3864
        Dim bConnectionFlag As Boolean = False
3865
        Dim iGapCheck As Integer = 0
3866
        Try
3867
            For Each oModelrow In _ModelingLine_Dt.Rows
3868
                Dim d기준x As Double = dX
3869
                Dim d기준y As Double = dY
3870
                Dim dGap As Double = 0.001
3871
                Dim oRun As LMPipeRun = Nothing
3872
                Dim dModelStartX As Double
3873
                Dim dModelStartY As Double
3874
                Dim dModelEndX As Double
3875
                Dim dModelEndY As Double
3876
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3877
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3878
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3879
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3880
                d기준x = (dModelStartX + dModelEndX) / 2
3881
                d기준y = (dModelStartY + dModelEndY) / 2
3882

    
3883

    
3884
                Dim dMax_X As Double = 0.0
3885
                Dim dMax_Y As Double = 0.0
3886
                Dim dMin_X As Double = 0.0
3887
                Dim dMin_Y As Double = 0.0
3888

    
3889

    
3890
                If dModelEndX > dModelStartX Then
3891
                    dMax_X = dModelEndX
3892
                    dMin_X = dModelStartX
3893
                Else
3894
                    dMax_X = dModelStartX
3895
                    dMin_X = dModelEndX
3896
                End If
3897

    
3898
                If dModelEndY > dModelStartY Then
3899
                    dMax_Y = dModelEndY
3900
                    dMin_Y = dModelStartY
3901
                Else
3902
                    dMax_Y = dModelStartY
3903
                    dMin_Y = dModelEndY
3904
                End If
3905

    
3906
                If dX <= dMax_X + dGap And dX >= dMin_X - dGap And
3907
                  dY <= dMax_Y + dGap And dY >= dMin_Y - dGap Then
3908
                    If Math.Abs(dMax_X - dMin_X) > Math.Abs(dMax_Y - dMin_Y) Then
3909
                        dY = dMax_Y
3910
                    Else
3911
                        dX = dMax_X
3912
                    End If
3913

    
3914
                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3915
                End If
3916

    
3917

    
3918
            Next
3919
        Catch ex As Exception
3920
            bConnectionFlag = False
3921
            oLMConnector = Nothing
3922
        End Try
3923
        Return bConnectionFlag
3924
    End Function
3925

    
3926

    
3927
    ''' <summary>
3928
    ''' 라인과 특정 포인트에 커넥션을 확인하는 메서드
3929
    ''' </summary>
3930
    ''' <param name="oModelingLineRows"></param>
3931
    ''' <param name="dX"></param>
3932
    ''' <param name="dY"></param>
3933
    ''' <param name="oLMConnector"></param>
3934
    ''' <param name="dPreConnX"></param>
3935
    ''' <param name="dPreConnY"></param>
3936
    ''' <returns></returns>
3937

    
3938

    
3939

    
3940
    Private Function CheckConnectionLine(ByRef dX As Double, ByRef dY As Double,
3941
                                  ByRef oLMConnector As LMConnector) As Boolean
3942
        Dim bConnectionFlag As Boolean = False
3943
        Dim iGapCheck As Integer = 0
3944
        Try
3945
            For Each oModelrow In _ModelingLine_Dt.Rows
3946
                Dim d기준x As Double = dX
3947
                Dim d기준y As Double = dY
3948
                Dim dGap As Double = 0.0002
3949
                Dim oRun As LMPipeRun = Nothing
3950
                'Dim sStartPoint As String = oModelrow(_XML_LINE_STARTPOINT)
3951
                'Dim sEndPoint As String = oModelrow(_XML_LINE_ENDPOINT)
3952
                Dim dModelStartX As Double
3953
                Dim dModelStartY As Double
3954
                Dim dModelEndX As Double
3955
                Dim dModelEndY As Double
3956
                'ConvertPointBystring(sStartPoint, dModelStartX, dModelStartY)
3957
                'ConvertPointBystring(sEndPoint, dModelEndX, dModelEndY)
3958
                'ConvertPointByImage(dModelStartX, dModelStartY, _IMG_X, _IMG_Y)
3959
                'ConvertPointByImage(dModelEndX, dModelEndY, _IMG_X, _IMG_Y)
3960
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3961
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3962
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3963
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3964
                d기준x = (dModelStartX + dModelEndX) / 2
3965
                d기준y = (dModelStartY + dModelEndY) / 2
3966

    
3967

    
3968
                Dim bCheckEqual As Boolean = False
3969
                If dX <= dModelStartX + dGap And dX >= dModelStartX - dGap And
3970
                        dY <= dModelStartY + dGap And dY >= dModelStartY - dGap Then
3971
                    bCheckEqual = True
3972
                ElseIf dX <= dModelEndX + dGap And dX >= dModelEndX - dGap And
3973
                        dY <= dModelEndY + dGap And dY >= dModelEndY - dGap Then
3974
                    bCheckEqual = True
3975

    
3976
                End If
3977

    
3978
                If bCheckEqual Then
3979
                    Try
3980
                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3981
                        oRun = _Placement.PIDDataSource.GetPipeRun(oLMConnector.ModelItemID)
3982
                    Catch ex As Exception
3983
                    End Try
3984
                    Try
3985
                        If oRun IsNot Nothing Then
3986
                            Dim dResultCalc As Double = -1
3987
                            For Each objRep In oRun.Representations
3988
                                If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then
3989
                                    Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
3990
                                    For Each objConnectorVertex In objConnector.ConnectorVertices
3991
                                        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3992
                                        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3993
                                        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3994
                                            oLMConnector = objConnector
3995
                                            dX = dConn_X
3996
                                            dY = dConn_Y
3997
                                            bConnectionFlag = True
3998
                                        End If
3999
                                    Next
4000
                                End If
4001
                            Next
4002
                        End If
4003
                    Catch ex As Exception
4004
                    End Try
4005
                Else
4006
                    'Dim dMax_X As Double = 0.0
4007
                    'Dim dMax_Y As Double = 0.0
4008
                    'Dim dMin_X As Double = 0.0
4009
                    'Dim dMin_Y As Double = 0.0
4010

    
4011

    
4012
                    'If dModelEndX > dModelStartX Then
4013
                    '    dMax_X = dModelEndX
4014
                    '    dMin_X = dModelStartX
4015
                    'Else
4016
                    '    dMax_X = dModelStartX
4017
                    '    dMin_X = dModelEndX
4018
                    'End If
4019

    
4020
                    'If dModelEndY > dModelStartY Then
4021
                    '    dMax_Y = dModelEndY
4022
                    '    dMin_Y = dModelStartY
4023
                    'Else
4024
                    '    dMin_Y = dModelStartY
4025
                    '    dMin_X = dModelEndY
4026
                    'End If
4027

    
4028
                    'If dX <= dMax_X + dGap And dX >= dMin_X - dGap And
4029
                    '  dY <= dMax_Y + dGap And dY >= dMin_Y - dGap Then
4030

    
4031
                    '    If Math.Abs(dMax_X - dMin_X) > Math.Abs(dMax_Y - dMin_Y) Then
4032
                    '        dY = dMax_Y
4033
                    '    Else
4034
                    '        dX = dMax_X
4035
                    '    End If
4036

    
4037
                    '    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
4038
                    'End If
4039
                End If
4040

    
4041
            Next
4042
        Catch ex As Exception
4043
            bConnectionFlag = False
4044
            oLMConnector = Nothing
4045
        End Try
4046
        Return bConnectionFlag
4047
    End Function
4048

    
4049
    Private Function CheckLineBranch(ByVal oLine_Dt As DataTable, ByRef dX As Double, ByRef dY As Double,
4050
                                     ByVal sDirection As String, ByRef oLMConnector As LMConnector) As Boolean
4051

    
4052
        Dim oModelingLineRows() As DataRow = oLine_Dt.Select("[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And " &
4053
                                                                "[" & _XML_LINE_SPID & "] <> ''")
4054

    
4055
        Dim bConnectionFlag As Boolean = False
4056
        Try
4057
            For Each oModelrow In oModelingLineRows
4058
                Dim sStartPoint As String = oModelrow(_XML_LINE_STARTPOINT)
4059
                Dim sEndPoint As String = oModelrow(_XML_LINE_ENDPOINT)
4060
                Dim dModelStartX As Double
4061
                Dim dModelStartY As Double
4062
                Dim dModelEndX As Double
4063
                Dim dModelEndY As Double
4064
                ConvertPointBystring(sStartPoint, dModelStartX, dModelStartY)
4065
                ConvertPointBystring(sEndPoint, dModelEndX, dModelEndY)
4066
                ConvertPointByImage(dModelStartX, dModelStartY, _IMG_X, _IMG_Y)
4067
                ConvertPointByImage(dModelEndX, dModelEndY, _IMG_X, _IMG_Y)
4068
                Dim dGap As Double = 0.0002
4069

    
4070
                If Math.Abs(dModelStartX - dModelEndX) <= Math.Abs(dModelStartY - dModelEndY) Then
4071
                    'Vertical
4072
                    If sDirection = "X" Then
4073
                        'x Direction Line
4074
                        If (dModelStartY + dGap >= dY And dModelEndY - dGap <= dY) Or
4075
                        (dModelStartY - dGap <= dY And dModelEndY + dGap >= dY) Then
4076
                            If (dX > dModelStartX And dX < dModelEndX) Or (dX > dModelEndX And dX < dModelStartX) Then
4077
                                If Math.Abs(dX - dModelStartX) > Math.Abs(dX - dModelEndX) Then
4078
                                    dX = dModelEndX
4079
                                Else
4080
                                    dX = dModelStartX
4081
                                End If
4082
                                Try
4083
                                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
4084
                                Catch ex As Exception
4085

    
4086
                                End Try
4087
                                bConnectionFlag = True
4088
                            End If
4089
                        End If
4090
                    End If
4091
                Else
4092
                    'Horizontal 
4093
                    If sDirection = "Y" Then
4094
                        If (dModelStartX + dGap >= dX And dModelEndX - dGap <= dX) Or
4095
                       (dModelStartX - dGap <= dX And dModelEndX + dGap >= dX) Then
4096
                            If (dY > dModelStartY And dY < dModelEndY) Or (dY > dModelEndY And dY < dModelStartY) Then
4097
                                If Math.Abs(dY - dModelStartY) > Math.Abs(dY - dModelEndY) Then
4098
                                    dY = dModelEndY
4099
                                Else
4100
                                    dY = dModelStartY
4101
                                End If
4102
                                Try
4103
                                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
4104
                                Catch ex As Exception
4105
                                End Try
4106
                                bConnectionFlag = True
4107
                            End If
4108
                        End If
4109
                    End If
4110
                End If
4111
            Next
4112
        Catch ex As Exception
4113
        End Try
4114
        Return bConnectionFlag
4115
    End Function
4116
    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,
4117
                              ByVal sLineNoUid As String, ByVal sLineUid As String, ByVal sSystemPath As String, ByRef oLMConnector As LMConnector) As Boolean
4118
        'Try
4119
        '    Dim oDatasource As Object = _Placement.PIDDataSource
4120
        '    Dim oPipeRun As LMPipeRun = Nothing
4121
        '    Dim objInputs As PlaceRunInputs
4122
        '    objInputs = New PlaceRunInputs
4123
        '    Dim objItem As LMAItem
4124
        '    '       Dim objConnector As LMConnector
4125

    
4126
        '    Dim oStartLineRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sStartLineUid & "' And " &
4127
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4128
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4129
        '    If oStartLineRow.Length = 0 Then
4130
        '        oStartLineRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sStartLineUid & "' And " &
4131
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4132
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4133
        '    End If
4134
        '    Dim oEndLineRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sEndLineUid & "' And " &
4135
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4136
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4137

    
4138
        '    oEndLineRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sEndLineUid & "' And " &
4139
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4140
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4141
        '    Dim sStartConnectionType As String = ""
4142
        '    Dim sEndConnectionType As String = ""
4143

    
4144
        '    Dim oStartLMConnector As LMConnector = Nothing
4145
        '    Dim oEndLMConnector As LMConnector = Nothing
4146
        '    Dim oDirectionLine As String = ""
4147

    
4148
        '    If Math.Abs(dStart_x - dEnd_x) > Math.Abs(dStart_y - dEnd_y) Then
4149
        '        oDirectionLine = "X"
4150
        '    Else
4151
        '        oDirectionLine = "Y"
4152
        '    End If
4153

    
4154
        '    Dim bCheckFlag As Boolean = False
4155

    
4156
        '    Dim bStartCheckFlag As Boolean = CheckConnectionLine(oStartLineRow, dStart_x, dStart_y, oStartLMConnector)
4157
        '    If bStartCheckFlag = False Then
4158
        '        bStartCheckFlag = CheckConnectionLine(oStartLineRow, dEnd_x, dEnd_y, oStartLMConnector)
4159
        '        bCheckFlag = True
4160
        '    End If
4161
        '    Dim bEndCheckFlag As Boolean = CheckConnectionLine(oEndLineRow, dEnd_x, dEnd_y, oEndLMConnector)
4162

    
4163
        '    If bEndCheckFlag = False Then
4164

    
4165
        '        bEndCheckFlag = CheckConnectionLine(oEndLineRow, dStart_x, dStart_y, oEndLMConnector)
4166
        '        bCheckFlag = True
4167
        '    End If
4168

    
4169
        '    If bStartCheckFlag = True And bEndCheckFlag = False Then
4170
        '        If bCheckFlag Then
4171
        '            objInputs.AddConnectorTarget(oStartLMConnector, dEnd_x, dEnd_y)
4172
        '            objInputs.AddPoint(dStart_x, dStart_y)
4173
        '        Else
4174
        '            objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
4175
        '            objInputs.AddPoint(dEnd_x, dEnd_y)
4176
        '        End If
4177

    
4178
        '    ElseIf bStartCheckFlag = False And bEndCheckFlag = True Then
4179
        '        If bCheckFlag Then
4180

    
4181
        '            objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
4182
        '            objInputs.AddPoint(dEnd_x, dEnd_y)
4183
        '        Else
4184
        '            objInputs.AddPoint(dStart_x, dStart_y)
4185
        '            objInputs.AddConnectorTarget(oStartLMConnector, dEnd_x, dEnd_y)
4186
        '        End If
4187

    
4188
        '    ElseIf bStartCheckFlag = True And bEndCheckFlag = True Then
4189
        '        objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
4190
        '        objInputs.AddConnectorTarget(oEndLMConnector, dEnd_x, dEnd_y)
4191
        '    Else
4192
        '        objInputs.AddPoint(dStart_x, dStart_y)
4193
        '        objInputs.AddPoint(dEnd_x, dEnd_y)
4194
        '    End If
4195
        '    SetListBoxItems(ListBox_Result, "Place Pipe..(" & dStart_x & "," & dStart_y & ") - (" & dEnd_x & "," & dEnd_y & ")..." & _iPipecnt & " count ")
4196
        '    _iPipecnt = _iPipecnt + 1
4197
        '    objItem = _Placement.PIDCreateItem(sSystemPath)
4198
        '    oLMConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4199

    
4200
        '    Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + sLineUid + "'")
4201
        '    If oUpdateRow.Length = 1 Then
4202
        '        oUpdateRow(0)(_XML_LINE_SPID) = oLMConnector.ModelItemID
4203
        '        oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = oLMConnector
4204

    
4205
        '        oUpdateRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4206
        '    End If
4207

    
4208
        '    oPipeRun = oDatasource.GetPipeRun(oLMConnector.ModelItemID)
4209

    
4210
        '    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4211
        '    If oAttributeRow.Length > 0 Then
4212
        '        For Each oAttribute In oAttributeRow
4213
        '            Try
4214
        '                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4215
        '                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4216
        '                If sPIDValue.Contains("'") Then
4217
        '                    sPIDValue = sPIDValue.Replace("'", """")
4218
        '                End If
4219
        '                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4220
        '                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4221
        '            Catch ex As Exception
4222
        '            End Try
4223
        '        Next
4224
        '        oPipeRun.Commit()
4225
        '    End If
4226
        '    Dim sID_1 As String = ""
4227
        '    Dim sID_2 As String = ""
4228
        '    If oStartLMConnector IsNot Nothing Then
4229
        '        sID_1 = oStartLMConnector.ModelItemID
4230
        '        sID_2 = oLMConnector.ModelItemID
4231
        '    ElseIf oEndLMConnector IsNot Nothing Then
4232
        '        sID_1 = oEndLMConnector.ModelItemID
4233
        '        sID_2 = oLMConnector.ModelItemID
4234
        '    End If
4235
        '    If sID_1 <> "" And sID_2 <> "" Then
4236
        '        Dim objSurvivorItem As LMAItem = Nothing
4237
        '        Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(sID_1)
4238
        '        Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(sID_2)
4239
        '        _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
4240
        '    End If
4241
        '    Return True
4242
        'Catch ex As Exception
4243
        '    Return False
4244
        'End Try
4245

    
4246
    End Function
4247

    
4248
    Private Function LineToLineModeling(ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
4249
                                        ByVal oAttribute_Dt As DataTable, ByVal sConnLineUid As String, ByVal sType As String,
4250
                                        ByRef oLMConnector As LMConnector) As String
4251
        Dim sReturnUid As String = ""
4252
        Try
4253
            Dim sLineUid As String = ""
4254

    
4255
            Dim iConnType As Integer = 0
4256

    
4257
            Dim sStartpoint As String = ""
4258
            Dim sEndpoint As String = ""
4259
            Dim dOriginalStart_x As Double = 0.0
4260
            Dim dOriginalStart_y As Double = 0.0
4261
            Dim dOriginalEnd_x As Double = 0.0
4262
            Dim dOriginalEnd_y As Double = 0.0
4263

    
4264
            Dim dStart_x As Double = 0
4265
            Dim dStart_y As Double = 0
4266
            Dim dEnd_x As Double = 0
4267
            Dim dEnd_y As Double = 0
4268
            Dim sStartLineUid As String = sConnLineUid
4269
            Dim sEndLineUid As String = ""
4270
            Dim sDirection As String = ""
4271
            Dim sSystemPath As String = GetPipeType(sType)
4272

    
4273
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" & sConnLineUid & "' And " &
4274
                                                                    "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4275
                                                                     "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4276
                                                                     "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4277
            If oPipeRow.Length > 0 Then
4278
                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4279
                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4280
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4281
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4282
                ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4283
                ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4284
                If dStart_x = 0 And dStart_y = 0 Then
4285
                    dStart_x = dOriginalStart_x
4286
                    dStart_y = dOriginalStart_y
4287
                    dEnd_x = dOriginalEnd_x
4288
                    dEnd_y = dOriginalEnd_y
4289
                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4290
                        sDirection = "X"
4291
                    Else
4292
                        sDirection = "Y"
4293
                    End If
4294
                    oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4295
                    sLineUid = sConnLineUid
4296
                End If
4297
            End If
4298

    
4299
            While True
4300
                sLineUid = ""
4301
                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sConnLineUid + "' And " &
4302
                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4303
                                            "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4304
                                            "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4305

    
4306
                If oPipeRow.Length = 0 Then
4307
                    oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sConnLineUid + "' And " &
4308
                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4309
                                            "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4310
                                            "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4311
                Else
4312
                    'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4313
                    'sConnLineUid = sLineUid
4314
                    sLineUid = sConnLineUid
4315
                    sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4316
                    iConnType = 1
4317
                End If
4318

    
4319
                If oPipeRow.Length > 0 Then
4320
                    If sLineUid = "" Then
4321
                        'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4322
                        'sConnLineUid = sLineUid
4323
                        sLineUid = sConnLineUid
4324
                        sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4325
                        iConnType = 2
4326
                    End If
4327
                    If iConnType = 1 Then
4328

    
4329
                    ElseIf iConnType = 2 Then
4330

    
4331
                    End If
4332
                    sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4333
                    sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4334
                    ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4335
                    ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4336
                    ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4337
                    ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4338

    
4339

    
4340

    
4341
                    If dStart_x = 0 And dStart_y = 0 Then
4342
                        dStart_x = dOriginalStart_x
4343
                        dStart_y = dOriginalStart_y
4344
                        dEnd_x = dOriginalEnd_x
4345
                        dEnd_y = dOriginalEnd_y
4346
                        If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4347
                            sDirection = "X"
4348
                        Else
4349
                            sDirection = "Y"
4350
                        End If
4351
                        sType = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4352
                        sSystemPath = GetPipeType(sType)
4353
                    Else
4354
                        If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4355
                            If sDirection = "Y" Then
4356
                                '방향이 바꼈음 Y - > X
4357

    
4358
                                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4359
                                sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4360
                                dStart_x = dOriginalStart_x
4361
                                dStart_y = dOriginalStart_y
4362
                                dEnd_x = dOriginalEnd_x
4363
                                dEnd_y = dOriginalEnd_y
4364
                                sStartLineUid = sConnLineUid
4365
                            Else
4366
                                dEnd_x = dOriginalEnd_x
4367
                                dEnd_y = dOriginalEnd_y
4368
                            End If
4369
                            sDirection = "X"
4370
                        Else
4371
                            If sDirection = "X" Then
4372
                                '방향이 바꼈음 X - > Y
4373
                                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4374
                                sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4375
                                dStart_x = dOriginalStart_x
4376
                                dStart_y = dOriginalStart_y
4377
                                dEnd_x = dOriginalEnd_x
4378
                                dEnd_y = dOriginalEnd_y
4379
                                sStartLineUid = sConnLineUid
4380
                            Else
4381

    
4382
                                dEnd_x = dOriginalEnd_x
4383
                                dEnd_y = dOriginalEnd_y
4384
                            End If
4385
                            sDirection = "Y"
4386
                        End If
4387
                    End If
4388
                    '            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4389
                Else
4390
                    If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
4391
                        LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4392
                         sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4393
                    End If
4394
                    sReturnUid = sConnLineUid
4395
                    Exit While
4396
                End If
4397
            End While
4398

    
4399
            If sStartLineUid <> "" And sEndLineUid <> "" Then
4400
                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4401
                             sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4402
                dStart_x = 0
4403
                dStart_y = 0
4404
                dEnd_x = 0
4405
                dEnd_y = 0
4406
            End If
4407
        Catch ex As Exception
4408

    
4409
        End Try
4410

    
4411
        Return sReturnUid
4412
    End Function
4413

    
4414

    
4415
    'Private Function LineToLineModeling(ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
4416
    '                                    ByVal oAttribute_Dt As DataTable, ByVal sConnLineUid As String, ByVal sType As String) As String
4417
    '    Dim sReturnUid As String = ""
4418
    '    Try
4419
    '        Dim sLineUid As String = ""
4420

    
4421
    '        Dim iConnType As Integer = 0
4422

    
4423
    '        Dim sStartpoint As String = ""
4424
    '        Dim sEndpoint As String = ""
4425
    '        Dim dOriginalStart_x As Double = 0.0
4426
    '        Dim dOriginalStart_y As Double = 0.0
4427
    '        Dim dOriginalEnd_x As Double = 0.0
4428
    '        Dim dOriginalEnd_y As Double = 0.0
4429

    
4430
    '        Dim dStart_x As Double = 0
4431
    '        Dim dStart_y As Double = 0
4432
    '        Dim dEnd_x As Double = 0
4433
    '        Dim dEnd_y As Double = 0
4434
    '        Dim sStartLineUid As String = sConnLineUid
4435
    '        Dim sEndLineUid As String = ""
4436
    '        Dim sDirection As String = ""
4437
    '        Dim sSystemPath As String = GetPipeType(sType)
4438

    
4439
    '        Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" & sConnLineUid & "' And " &
4440
    '                                                                "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4441
    '                                                                 "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4442
    '                                                                 "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4443
    '        If oPipeRow.Length > 0 Then
4444
    '            sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4445
    '            sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4446
    '            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4447
    '            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4448
    '            ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4449
    '            ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4450
    '            If dStart_x = 0 And dStart_y = 0 Then
4451
    '                dStart_x = dOriginalStart_x
4452
    '                dStart_y = dOriginalStart_y
4453
    '                dEnd_x = dOriginalEnd_x
4454
    '                dEnd_y = dOriginalEnd_y
4455
    '                If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4456
    '                    sDirection = "X"
4457
    '                Else
4458
    '                    sDirection = "Y"
4459
    '                End If
4460
    '                oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4461
    '                sLineUid = sConnLineUid
4462
    '            End If
4463
    '        End If
4464

    
4465
    '        While True
4466
    '            sLineUid = ""
4467
    '            oPipeRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sConnLineUid + "' And " &
4468
    '                                                                "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4469
    '                                                                         "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4470
    '                                                                         "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4471

    
4472
    '            If oPipeRow.Length = 0 Then
4473
    '                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sConnLineUid + "' And " &
4474
    '                                         "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4475
    '                                       "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4476
    '                                      "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4477
    '            Else
4478
    '                'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4479
    '                'sConnLineUid = sLineUid
4480
    '                sLineUid = sConnLineUid
4481
    '                sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4482
    '                iConnType = 1
4483
    '            End If
4484

    
4485
    '            If oPipeRow.Length > 0 Then
4486
    '                If sLineUid = "" Then
4487
    '                    'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4488
    '                    'sConnLineUid = sLineUid
4489
    '                    sLineUid = sConnLineUid
4490
    '                    sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4491
    '                    iConnType = 2
4492
    '                End If
4493
    '                If iConnType = 1 Then
4494

    
4495
    '                ElseIf iConnType = 2 Then
4496

    
4497
    '                End If
4498
    '                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4499
    '                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4500
    '                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4501
    '                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4502
    '                ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4503
    '                ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4504

    
4505

    
4506

    
4507
    '                If dStart_x = 0 And dStart_y = 0 Then
4508
    '                    dStart_x = dOriginalStart_x
4509
    '                    dStart_y = dOriginalStart_y
4510
    '                    dEnd_x = dOriginalEnd_x
4511
    '                    dEnd_y = dOriginalEnd_y
4512
    '                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4513
    '                        sDirection = "X"
4514
    '                    Else
4515
    '                        sDirection = "Y"
4516
    '                    End If
4517
    '                    sType = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4518
    '                    sSystemPath = GetPipeType(sType)
4519
    '                Else
4520
    '                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4521
    '                        If sDirection = "Y" Then
4522
    '                            '방향이 바꼈음 Y - > X
4523
    '                            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4524
    '                            sLineNoUid, sLineUid, sSystemPath)
4525
    '                            dStart_x = dOriginalStart_x
4526
    '                            dStart_y = dOriginalStart_y
4527
    '                            dEnd_x = dOriginalEnd_x
4528
    '                            dEnd_y = dOriginalEnd_y
4529
    '                            sStartLineUid = sConnLineUid
4530
    '                        Else
4531
    '                            dEnd_x = dOriginalEnd_x
4532
    '                            dEnd_y = dOriginalEnd_y
4533
    '                        End If
4534
    '                        sDirection = "X"
4535
    '                    Else
4536
    '                        If sDirection = "X" Then
4537
    '                            '방향이 바꼈음 X - > Y
4538
    '                            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4539
    '                            sLineNoUid, sLineUid, sSystemPath)
4540
    '                            dStart_x = dOriginalStart_x
4541
    '                            dStart_y = dOriginalStart_y
4542
    '                            dEnd_x = dOriginalEnd_x
4543
    '                            dEnd_y = dOriginalEnd_y
4544
    '                            sStartLineUid = sConnLineUid
4545
    '                        Else
4546

    
4547
    '                            dEnd_x = dOriginalEnd_x
4548
    '                            dEnd_y = dOriginalEnd_y
4549
    '                        End If
4550
    '                        sDirection = "Y"
4551
    '                    End If
4552
    '                End If
4553
    '                '            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4554
    '            Else
4555
    '                If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
4556
    '                    LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4557
    '                     sLineNoUid, sLineUid, sSystemPath)
4558
    '                End If
4559

    
4560

    
4561
    '                sReturnUid = sConnLineUid
4562
    '                Exit While
4563
    '            End If
4564
    '        End While
4565

    
4566
    '        If sStartLineUid <> "" And sEndLineUid <> "" Then
4567
    '            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4568
    '                         sLineNoUid, sLineUid, sSystemPath)
4569
    '            dStart_x = 0
4570
    '            dStart_y = 0
4571
    '            dEnd_x = 0
4572
    '            dEnd_y = 0
4573
    '        End If
4574
    '    Catch ex As Exception
4575

    
4576
    '    End Try
4577

    
4578
    '    Return sReturnUid
4579
    'End Function
4580

    
4581

    
4582
    Private Function SymbolToLine_Modeling(ByVal oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String,
4583
                                       ByVal sSymbolUid As String, ByVal oLMSymbol As LMSymbol) As String
4584

    
4585

    
4586
        Dim oDatasource As Object = _Placement.PIDDataSource
4587
        Dim oPipeRun As LMPipeRun = Nothing
4588
        Dim objItem As LMAItem
4589
        Dim objConnector As LMConnector
4590
        Dim objInputs As PlaceRunInputs
4591
        objInputs = New PlaceRunInputs
4592

    
4593

    
4594
        Dim sPipeUid As String = ""
4595
        Dim iConnType As Integer = 0
4596
        Dim sStartpoint As String = ""
4597
        Dim sEndpoint As String = ""
4598
        Dim dOriginalStart_x As Double = 0.0
4599
        Dim dOriginalStart_y As Double = 0.0
4600
        Dim dOriginalEnd_x As Double = 0.0
4601
        Dim dOriginalEnd_y As Double = 0.0
4602
        Dim dStart_x As Double = 0.0
4603
        Dim dStart_y As Double = 0.0
4604
        Dim dEnd_x As Double = 0.0
4605
        Dim dEnd_y As Double = 0.0
4606

    
4607
        Dim sReturnUid As String = ""
4608
        Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sSymbolUid + "' And " &
4609
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4610
                                                                                  _XML_SYMBOL_Check & "] = 'TRUE'")
4611
        If oPipeRow.Length = 0 Then
4612
            oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sSymbolUid + "' And " &
4613
                                     "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4614
                                    _XML_SYMBOL_Check & "] = 'TRUE'")
4615
        Else
4616
            sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4617
            iConnType = 1
4618
        End If
4619

    
4620
        If oPipeRow.Length = 1 Then
4621
            If sPipeUid = "" Then
4622
                sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4623
                iConnType = 2
4624
            End If
4625
            sReturnUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4626
            sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4627
            sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4628
            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4629
            dStart_x = dOriginalStart_x
4630
            dStart_y = dOriginalStart_y
4631
            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4632
            dEnd_x = dOriginalEnd_x
4633
            dEnd_y = dOriginalEnd_y
4634
            ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4635
            ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4636
            'OPC Connection Point가져와서 연결(2018-07-12)
4637
            If iConnType = 1 Then
4638
                FindNearPoint(oLMSymbol, dStart_x, dStart_y)
4639
                objInputs.AddSymbolTarget(oLMSymbol, dStart_x, dStart_y)
4640
                objInputs.AddPoint(dEnd_x, dEnd_y)
4641
            Else
4642
                FindNearPoint(oLMSymbol, dEnd_x, dEnd_y)
4643
                objInputs.AddSymbolTarget(oLMSymbol, dEnd_x, dEnd_y)
4644
                objInputs.AddPoint(dStart_x, dStart_y)
4645
            End If
4646
            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4647

    
4648
            Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4649
            Dim sSystemPath As String = GetPipeType(sType)
4650

    
4651

    
4652

    
4653

    
4654
            objItem = _Placement.PIDCreateItem(sSystemPath)
4655
            objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4656
            oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
4657
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4658
            If oAttributeRow.Length > 0 Then
4659
                For Each oAttribute In oAttributeRow
4660
                    Try
4661
                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4662
                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4663
                        If sPIDValue.Contains("'") Then
4664
                            sPIDValue = sPIDValue.Replace("'", """")
4665
                        End If
4666
                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4667
                        oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4668
                    Catch ex As Exception
4669
                    End Try
4670
                Next
4671
                oPipeRun.Commit()
4672
            End If
4673
        End If
4674
        Return sReturnUid
4675
    End Function
4676

    
4677
    Private Function LineToSymbol_Modeling(ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String,
4678
                                       ByVal sLineUid As String, ByVal oLMConnector As LMConnector, ByRef oLMSymbol As LMSymbol) As String
4679

    
4680

    
4681
        Dim oDatasource As Object = _Placement.PIDDataSource
4682
        Dim objItem As LMAItem
4683
        Dim objConnector As LMConnector
4684
        Dim objInputs As PlaceRunInputs
4685
        objInputs = New PlaceRunInputs
4686

    
4687

    
4688
        Dim sSymbolUid As String = ""
4689
        Dim iConnType As Integer = 0
4690
        Dim dOriginalPoint_x As Double = 0.0
4691
        Dim dORiginalPoint_y As Double = 0.0
4692
        Dim dX As Double = 0.0
4693
        Dim dY As Double = 0.0
4694
        Dim sReturnUid As String = ""
4695
        Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn1_Uid & " = '" + sLineUid + "' And " &
4696
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4697
                                                                                  _XML_SYMBOL_Check & "] = 'TRUE'")
4698
        If oSymbolRow.Length = 0 Then
4699
            oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
4700
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4701
                                                                                 _XML_SYMBOL_Check & "] = 'TRUE'")
4702
            If oSymbolRow.Length = 0 Then
4703
                oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
4704
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4705
                                                                          _XML_SYMBOL_Check & "] = 'TRUE'")
4706
                If oSymbolRow.Length = 0 Then
4707
                    oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
4708
                                                   "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4709
                                                            _XML_SYMBOL_Check & "] = 'TRUE'")
4710
                    If oSymbolRow.Length = 0 Then
4711

    
4712
                    Else
4713
                        sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4714
                        iConnType = 4
4715
                    End If
4716
                Else
4717
                    sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4718
                    iConnType = 3
4719
                End If
4720
            Else
4721
                sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4722
                iConnType = 2
4723
            End If
4724

    
4725
        Else
4726
            sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4727
            iConnType = 1
4728
        End If
4729

    
4730
        If oSymbolRow.Length = 1 Then
4731
            If sSymbolUid = "" Then
4732
                sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4733
                iConnType = 2
4734
            End If
4735
            sReturnUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4736
            Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
4737
            ConvertPointBystring(sOriginalPoint, dOriginalPoint_x, dORiginalPoint_y)
4738
            dX = dOriginalPoint_x
4739
            dY = dORiginalPoint_y
4740
            ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
4741
            'OPC Connection Point가져와서 연결(2018-07-12)
4742

    
4743
            oSymbolRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4744

    
4745
            Dim sType As String = oSymbolRow(0)(_XML_LINE_TYPE).ToString()
4746
            Dim sSystemPath As String = GetPipeType(sType)
4747

    
4748
            oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, ExistingItem:=oLMConnector.AsLMAItem,
4749
          TargetItem:=oLMSymbol.AsLMAItem)
4750

    
4751
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4752
            If oAttributeRow.Length > 0 Then
4753
                For Each oAttribute In oAttributeRow
4754
                    Try
4755
                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4756
                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4757
                        If sPIDValue.Contains("'") Then
4758
                            sPIDValue = sPIDValue.Replace("'", """")
4759
                        End If
4760
                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4761
                        oLMSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
4762
                    Catch ex As Exception
4763
                    End Try
4764
                Next
4765
            End If
4766
        End If
4767
        Return sReturnUid
4768
    End Function
4769

    
4770

    
4771
    Private Sub OPCTOLineRouting(ByRef oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal oOPCSymbol As LMSymbol,
4772
                            ByVal sOPCUid As String, ByVal sLineNoUid As String)
4773
        Try
4774
            Dim oDatasource As Object = _Placement.PIDDataSource
4775
            Dim objItem As LMAItem
4776
            Dim objConnector As LMConnector
4777
            Dim objInputs As PlaceRunInputs
4778
            objInputs = New PlaceRunInputs
4779
            Dim dOriginalStart_x As Double = 0.0
4780
            Dim dOriginalStart_y As Double = 0.0
4781
            Dim dOriginalEnd_x As Double = 0.0
4782
            Dim dOriginalEnd_y As Double = 0.0
4783
            Dim dStart_x As Double = 0.0
4784
            Dim dStart_y As Double = 0.0
4785
            Dim dEnd_x As Double = 0.0
4786
            Dim dEnd_y As Double = 0.0
4787

    
4788
            Dim oPipeRun As LMPipeRun = Nothing
4789
            Dim sStartpoint As String = ""
4790
            Dim sEndpoint As String = ""
4791
            Dim iConnType As Integer = 0
4792
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sOPCUid + "' And [" &
4793
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
4794
            Dim sPipeUid As String = ""
4795
            If oPipeRow.Length = 0 Then
4796
                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sOPCUid + "' And [" &
4797
                        _XML_SYMBOL_Check & "] = 'TRUE'")
4798
            Else
4799
                sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4800
                iConnType = 1
4801
            End If
4802
            Dim oAddUid_List As New List(Of String)
4803
            If oPipeRow.Length = 1 Then
4804
                If sPipeUid = "" Then
4805
                    sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4806
                    iConnType = 2
4807
                End If
4808
                oAddUid_List.Add(sPipeUid)
4809
                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4810
                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4811
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4812
                dStart_x = dOriginalStart_x
4813
                dStart_y = dOriginalStart_y
4814
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4815
                dEnd_x = dOriginalEnd_x
4816
                dEnd_y = dOriginalEnd_y
4817
                ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4818
                ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4819

    
4820
                'OPC Connection Point가져와서 연결(2018-07-12)
4821
                If iConnType = 1 Then
4822
                    FindNearPoint(oOPCSymbol, dStart_x, dStart_y)
4823
                    objInputs.AddSymbolTarget(oOPCSymbol, dStart_x, dStart_y)
4824
                    objInputs.AddPoint(dEnd_x, dEnd_y)
4825
                Else
4826
                    FindNearPoint(oOPCSymbol, dEnd_x, dEnd_y)
4827
                    objInputs.AddSymbolTarget(oOPCSymbol, dEnd_x, dEnd_y)
4828
                    objInputs.AddPoint(dStart_x, dStart_y)
4829
                End If
4830
                oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4831

    
4832
                While True
4833
                    '    objInputs.Clear()
4834
                    Dim oAddPipeRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" + sPipeUid + "' and " &
4835
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
4836
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
4837
                    If oAddPipeRow.Length = 0 Then
4838
                        oAddPipeRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" + sPipeUid + "' and " &
4839
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
4840
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
4841
                        sPipeUid = ""
4842
                    Else
4843
                        iConnType = 1
4844
                        sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
4845
                    End If
4846
                    If oAddPipeRow.Length = 1 Then
4847
                        If sPipeUid = "" Then
4848
                            sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
4849
                            iConnType = 2
4850
                        End If
4851
                        oAddUid_List.Add(sPipeUid)
4852
                        sStartpoint = oAddPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4853
                        sEndpoint = oAddPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4854
                        ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4855
                        dStart_x = dOriginalStart_x
4856
                        dStart_y = dOriginalStart_y
4857
                        ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4858
                        dEnd_x = dOriginalEnd_x
4859
                        dEnd_y = dOriginalEnd_y
4860
                        ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4861
                        ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4862
                        If iConnType = 1 Then
4863
                            objInputs.AddPoint(dEnd_x, dEnd_y)
4864
                            ' objInputs.AddPoint(dStart_x, dStart_y)
4865
                        Else
4866
                            'objInputs.AddConnectorTarget(objConnector, dStart_x, dStart_y)
4867
                            '  objInputs.AddPoint(dStart_x, dStart_y)
4868
                            '  objInputs.AddPoint(dEnd_x, dEnd_y)
4869
                            objInputs.AddPoint(dStart_x, dStart_y)
4870
                        End If
4871

    
4872
                        oAddPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4873
                    Else
4874
                        Exit While
4875
                    End If
4876

    
4877
                End While
4878
                Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4879
                Dim sSystemPath As String = GetPipeType(sType)
4880

    
4881
                objItem = _Placement.PIDCreateItem(sSystemPath)
4882
                objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4883
                For i = 0 To oAddUid_List.Count - 1
4884
                    Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + oAddUid_List(i) + "'")
4885
                    If oUpdateRow.Length = 1 Then
4886
                        oUpdateRow(0)(_XML_LINE_SPID) = objConnector.ModelItemID
4887
                        oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = objConnector
4888
                    End If
4889
                Next
4890

    
4891

    
4892
                oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
4893
                Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4894
                If oAttributeRow.Length > 0 Then
4895
                    For Each oAttribute In oAttributeRow
4896
                        Try
4897
                            Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4898
                            Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4899
                            If sPIDValue.Contains("'") Then
4900
                                sPIDValue = sPIDValue.Replace("'", """")
4901
                            End If
4902
                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4903
                            oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4904
                        Catch ex As Exception
4905
                        End Try
4906
                    Next
4907
                    oPipeRun.Commit()
4908
                End If
4909

    
4910
            End If
4911

    
4912
        Catch ex As Exception
4913
        End Try
4914
    End Sub
4915

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

    
4918
        For Each sUid In sUidList
4919
            If sUid = sAddUid Then
4920
                Return False
4921
            End If
4922
        Next
4923
        Return True
4924
    End Function
4925

    
4926
    Private Sub LineRouting(ByRef oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String, ByVal sLineNoText As String)
4927
        Try
4928
            Dim oDatasource As Object = _Placement.PIDDataSource
4929
            Dim objItem As LMAItem
4930
            Dim objConnector As LMConnector
4931
            Dim objInputs As PlaceRunInputs
4932
            objInputs = New PlaceRunInputs
4933
            Dim dOriginalStart_x As Double = 0.0
4934
            Dim dOriginalStart_y As Double = 0.0
4935
            Dim dOriginalEnd_x As Double = 0.0
4936
            Dim dOriginalEnd_y As Double = 0.0
4937
            Dim dStart_x As Double = 0.0
4938
            Dim dStart_y As Double = 0.0
4939
            Dim dEnd_x As Double = 0.0
4940
            Dim dEnd_y As Double = 0.0
4941
            Dim oPipeRun As LMPipeRun = Nothing
4942
            Dim sStartpoint As String = ""
4943
            Dim sEndpoint As String = ""
4944
            Dim iConnType As Integer = 0
4945
            Dim pLMConnector As LMConnector = Nothing
4946
            For Each oLinerow In oLine_Dt.Rows
4947
                objInputs.Clear()
4948
                Dim sCheck As String = oLinerow(_XML_LINE_DRAWING_TF).ToString()
4949
                If sCheck = "FALSE" Then
4950
                    Dim sUid As String = oLinerow(_XML_LINE_UID).ToString()
4951
                    sStartpoint = oLinerow(_XML_LINE_STARTPOINT).ToString()
4952
                    sEndpoint = oLinerow(_XML_LINE_ENDPOINT).ToString()
4953
                    ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4954
                    dStart_x = dOriginalStart_x
4955
                    dStart_y = dOriginalStart_y
4956
                    ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4957
                    dEnd_x = dOriginalEnd_x
4958
                    dEnd_y = dOriginalEnd_y
4959
                    ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4960
                    ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4961

    
4962
                    objInputs.AddPoint(dStart_x, dStart_y)
4963
                    objInputs.AddPoint(dEnd_x, dEnd_y)
4964
                    Dim sType As String = oLinerow(_XML_LINE_TYPE).ToString()
4965
                    Dim sSystemPath As String = GetPipeType(sType)
4966
                    objItem = _Placement.PIDCreateItem(sSystemPath)
4967
                    objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4968
                    SetListBoxItems(ListBox_Result, "Place Pipe.." & sUid & " (" & dOriginalStart_x & "," & dOriginalStart_y & ") - (" & dOriginalEnd_x & "," & dOriginalEnd_y & ")..." & _iPipecnt & " count ")
4969

    
4970
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & sUid)
4971
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
4972
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oLinerow(_XML_SYMBOL_Conn1_Uid).ToString())
4973
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oLinerow(_XML_SYMBOL_Conn2_Uid).ToString())
4974
                    'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
4975
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "StartPoint : " & dOriginalStart_x & "," & dOriginalStart_y)
4976
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "EndPoint : " & dOriginalEnd_x & "," & dOriginalEnd_y)
4977
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Pipe Count : " & _iPipecnt)
4978

    
4979
                    _iPipecnt = _iPipecnt + 1
4980
                    oLinerow(_XML_LINE_SPID) = objConnector.ModelItemID
4981
                    oLinerow(_XML_LINE_LMCONNECTOR) = objConnector
4982

    
4983
                    oLinerow(_XML_LINE_DRAWING_TF) = "TRUE"
4984
                    oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
4985

    
4986
                    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4987
                    If oAttributeRow.Length > 0 Then
4988
                        For Each oAttribute In oAttributeRow
4989
                            Try
4990
                                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4991
                                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4992
                                If sPIDValue.Contains("'") Then
4993
                                    sPIDValue = sPIDValue.Replace("'", """")
4994
                                End If
4995
                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4996
                                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4997
                            Catch ex As Exception
4998
                            End Try
4999
                        Next
5000
                        oPipeRun.Commit()
5001
                    End If
5002
                End If
5003

    
5004

    
5005

    
5006

    
5007

    
5008
                'Dim sPipeUid As String = oLinerow(_XML_LINE_UID).ToString()
5009
                'Dim sCheckModeling As Boolean = False
5010
                'objInputs.Clear()
5011
                'Dim oAddUid_List As New List(Of String)
5012
                'Try
5013
                '    Dim oAddPipeRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" + sPipeUid + "' and " &
5014
                '                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
5015
                '                                            _XML_SYMBOL_Check & "] = 'TRUE'")
5016
                '    If oAddPipeRow.Length = 0 Then
5017
                '        oAddPipeRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" + sPipeUid + "' and " &
5018
                '                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
5019
                '                                        _XML_SYMBOL_Check & "] = 'TRUE'")
5020
                '        sPipeUid = ""
5021
                '    Else
5022
                '        iConnType = 1
5023
                '        sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
5024
                '    End If
5025
                '    If oAddPipeRow.Length = 1 Then
5026
                '        sCheckModeling = True
5027
                '        If sPipeUid = "" Then
5028
                '            sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
5029
                '            iConnType = 2
5030
                '        End If
5031
                '        If AddUidList중복체크(oAddUid_List, sPipeUid) Then
5032
                '            oAddUid_List.Add(sPipeUid)
5033
                '        End If
5034
                '        sStartpoint = oAddPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
5035
                '        sEndpoint = oAddPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
5036
                '        ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
5037
                '        dStart_x = dOriginalStart_x
5038
                '        dStart_y = dOriginalStart_y
5039
                '        ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
5040
                '        dEnd_x = dOriginalEnd_x
5041
                '        dEnd_y = dOriginalEnd_y
5042
                '        ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
5043
                '        ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
5044
                '        Dim sBranchType As String = ""
5045
                '        If (CheckBranchLine(oLine_Dt, dStart_x, dStart_y, dEnd_x, dEnd_y, sBranchType, pLMConnector)) Then
5046
                '            Try
5047
                '                If pLMConnector Is Nothing Then
5048
                '                    objInputs.AddPoint(dStart_x, dStart_y)
5049
                '                    objInputs.AddPoint(dEnd_x, dEnd_y)
5050
                '                Else
5051
                '                    If sBranchType = "1" Then
5052
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5053
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5054
                '                    ElseIf sBranchType = "2" Then
5055
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5056
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5057
                '                    ElseIf sBranchType = "3" Then
5058
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5059
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5060
                '                    ElseIf sBranchType = "4" Then
5061
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5062
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5063
                '                    End If
5064
                '                End If
5065
                '            Catch ex As Exception
5066
                '            End Try
5067
                '        Else
5068
                '            objInputs.AddPoint(dStart_x, dStart_y)
5069
                '            objInputs.AddPoint(dEnd_x, dEnd_y)
5070
                '        End If
5071
                '        oAddPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
5072
                '    Else
5073
                '        Dim CheckTF As String = oLinerow(_XML_LINE_DRAWING_TF).ToString()
5074
                '        Dim CheckSelect As String = oLinerow(_XML_LINE_Check).ToString()
5075
                '        If CheckTF = "FALSE" And CheckSelect = "TRUE" Then
5076
                '            sPipeUid = oLinerow(_XML_LINE_UID).ToString()
5077
                '            oAddUid_List.Clear()
5078
                '            oAddUid_List.Add(sPipeUid)
5079
                '            sCheckModeling = True
5080
                '            sStartpoint = oLinerow(_XML_LINE_STARTPOINT).ToString()
5081
                '            sEndpoint = oLinerow(_XML_LINE_ENDPOINT).ToString()
5082
                '            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
5083
                '            dStart_x = dOriginalStart_x
5084
                '            dStart_y = dOriginalStart_y
5085
                '            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
5086
                '            dEnd_x = dOriginalEnd_x
5087
                '            dEnd_y = dOriginalEnd_y
5088
                '            ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
5089
                '            ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
5090
                '            Dim sBranchType As String = ""
5091
                '            If (CheckBranchLine(oLine_Dt, dStart_x, dStart_y, dEnd_x, dEnd_y, sBranchType, pLMConnector)) Then
5092
                '                Try
5093
                '                    If sBranchType = "1" Then
5094
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5095
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5096
                '                    ElseIf sBranchType = "2" Then
5097
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5098
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5099
                '                    ElseIf sBranchType = "3" Then
5100
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5101
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5102
                '                    ElseIf sBranchType = "4" Then
5103
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5104
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5105
                '                    End If
5106
                '                Catch ex As Exception
5107

    
5108
                '                End Try
5109
                '            Else
5110
                '                objInputs.AddPoint(dStart_x, dStart_y)
5111
                '                objInputs.AddPoint(dEnd_x, dEnd_y)
5112
                '            End If
5113
                '            oLinerow(_XML_LINE_DRAWING_TF) = "TRUE"
5114
                '        End If
5115
                '    End If
5116
                'Catch ex As Exception
5117
                'End Try
5118
                'If sCheckModeling Then
5119
                '    Dim sType As String = oLinerow(_XML_LINE_TYPE).ToString()
5120
                '    Dim sSystemPath As String = GetPipeType(sType)
5121
                '    objItem = _Placement.PIDCreateItem(sSystemPath)
5122
                '    objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
5123
                '    For i = 0 To oAddUid_List.Count - 1
5124
                '        Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + oAddUid_List(i) + "'")
5125
                '        If oUpdateRow.Length = 1 Then
5126
                '            oUpdateRow(0)(_XML_LINE_SPID) = objConnector.ModelItemID
5127
                '            oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = objConnector
5128
                '        End If
5129
                '    Next
5130

    
5131
                '    oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
5132
                '    oAddUid_List.Clear()
5133

    
5134
                '    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
5135
                '    If oAttributeRow.Length > 0 Then
5136
                '        For Each oAttribute In oAttributeRow
5137
                '            Try
5138
                '                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5139
                '                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5140
                '                If sPIDValue.Contains("'") Then
5141
                '                    sPIDValue = sPIDValue.Replace("'", """")
5142
                '                End If
5143
                '                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5144
                '                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
5145
                '            Catch ex As Exception
5146
                '            End Try
5147
                '        Next
5148
                '        oPipeRun.Commit()
5149
                '    End If
5150

    
5151
                '    If pLMConnector IsNot Nothing Then
5152
                '        Dim sID_1 As String = pLMConnector.ModelItemID
5153
                '        Dim sID_2 As String = objConnector.ModelItemID
5154
                '        Dim objSurvivorItem As LMAItem = Nothing
5155
                '        Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(sID_1)
5156
                '        Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(sID_2)
5157
                '        _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
5158
                '        '     oDatasource.CommitTransaction()
5159
                '        '_Placement.PIDAutoJoin(oPipeRun1.AsLMAItem, AutoJoinEndConstants.autoJoin_End, objSurvivorItem)
5160
                '        'oPipeRun1.Commit()
5161
                '        'oDatasource.CommitTransaction()
5162
                '        'objSurvivorItem = Nothing
5163
                '        '_Placement.PIDAutoJoin(oPipeRun2.AsLMAItem, AutoJoinEndConstants.autoJoin_Start, objSurvivorItem)
5164
                '        'oPipeRun2.Commit()
5165
                '        'oDatasource.CommitTransaction()
5166
                '    End If
5167
                '    sCheckModeling = False
5168
                '  End If
5169
            Next
5170
        Catch ex As Exception
5171
        End Try
5172
    End Sub
5173

    
5174

    
5175
    Private Sub SymbolModeling(ByVal CDrawing As Drawing, ByVal oLine_DT As DataTable, ByVal oSymbolRow As DataRow, ByVal oAttribute_Dt As DataTable,
5176
                               ByVal sLineNoText As String)
5177
        Try
5178

    
5179
            Dim sCheckModeling As String = oSymbolRow(_XML_SYMBOL_DRAWING_TF).ToString()
5180
            If sCheckModeling = "FALSE" Then
5181
                Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5182
                Dim oSymbol As LMSymbol = Nothing
5183
                Dim sSPID As String = oSymbolRow(_XML_SYMBOL_SPID).ToString()
5184
                Dim sSystemPath As String = oSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
5185
                Dim oDatasource As Object = _Placement.PIDDataSource
5186
                Dim sSymbolCompType As String = oSymbolRow(_XML_SYMBOL_TYPE).ToString()
5187
                Dim dLocationX As Double = 0.0
5188
                Dim dLocationY As Double = 0.0
5189
                Dim dX As Double = 0.0
5190
                Dim dY As Double = 0.0
5191
                Dim sOriginalPoint As String = oSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
5192
                ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5193
                dX = dLocationX
5194
                dY = dLocationY
5195
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
5196

    
5197
                Dim dAngle As Double = oSymbolRow(_XML_SYMBOL_ANGLE)
5198

    
5199

    
5200
                'Dim oDatarow() As DataRow = oLine_DT.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sSymbolUid & "'")
5201
                'If oDatarow.Length = 0 Then
5202
                '    oDatarow = oLine_DT.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sSymbolUid & "'")
5203
                'End If
5204
                'Dim dFix_X As Double = 0.0
5205
                'Dim dFix_Y As Double = 0.0
5206
                'If oDatarow.Length > 0 Then
5207
                '    If dAngle <> 0 Then
5208
                '        sOriginalPoint = oDatarow(0)(_XML_LINE_STARTPOINT).ToString()
5209
                '        ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5210

    
5211
                '        ConvertPointByImage(dLocationX, dLocationY, _IMG_X, _IMG_Y)
5212
                '        dX = dLocationX
5213
                '    Else
5214
                '        sOriginalPoint = oDatarow(0)(_XML_LINE_STARTPOINT).ToString()
5215
                '        ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5216
                '        ConvertPointByImage(dLocationX, dLocationY, _IMG_X, _IMG_Y)
5217
                '        dY = dLocationY
5218
                '    End If
5219

    
5220
                'End If
5221

    
5222

    
5223

    
5224
                oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY,, dAngle)
5225
                SetListBoxItems(ListBox_Result, "Place Fitting.." & sSymbolUid & " (" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
5226

    
5227
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Fitting : " & sSymbolUid)
5228
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
5229
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oSymbolRow(_XML_SYMBOL_Conn1_Uid).ToString())
5230
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oSymbolRow(_XML_SYMBOL_Conn2_Uid).ToString())
5231
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection3 : " & oSymbolRow(_XML_SYMBOL_Conn3_Uid).ToString())
5232
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection4 : " & oSymbolRow(_XML_SYMBOL_Conn4_Uid).ToString())
5233
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
5234
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
5235
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Fitting Count : " & _iFittingcnt)
5236

    
5237

    
5238
                _iFittingcnt = _iFittingcnt + 1
5239
                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
5240
                Dim oAttributeRow() As DataRow
5241
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sSymbolUid + "'")
5242
                If oAttribute_Dt.Rows.Count > 0 Then
5243

    
5244
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
5245
                        Dim oInstrument As LMInstrument
5246
                        oInstrument = oDatasource.GetInstrument(oSymbol.ModelItemID)
5247
                        Try
5248
                            If oAttributeRow.Length > 0 Then
5249
                                For Each oAttribute In oAttributeRow
5250
                                    Try
5251
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5252
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5253
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5254
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
5255
                                    Catch ex As Exception
5256
                                    End Try
5257
                                Next
5258
                                oInstrument.Commit()
5259
                            End If
5260
                        Catch ex As Exception
5261
                        End Try
5262
                    Else
5263
                        Try
5264
                            If oAttributeRow.Length > 0 And oSymbol IsNot Nothing Then
5265
                                For Each oAttribute In oAttributeRow
5266
                                    Try
5267
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5268
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5269

    
5270
                                        If sPIDAttribute = "SIZE" Then
5271

    
5272
                                            'Nominal diamter1,2속성이름뭔지 찾아봐야됨 (2018-07-20)
5273
                                            If sPIDValue.Contains("x") Then
5274
                                                Dim sSplitSize() As String = sPIDValue.Split("x")
5275
                                                If sSplitSize.Count > 1 Then
5276
                                                    'Connection Point와 연결되어 있는 라인을 가져와서 라인프로퍼티를 변경
5277
                                                    Dim oConnector_1 As LMConnector = Nothing
5278
                                                    Dim oConnector_2 As LMConnector = Nothing
5279
                                                    If oSymbol IsNot Nothing Then
5280
                                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5281
                                                            For Each Tconnector In oSymbol.Connect1Connectors
5282
                                                                If Tconnector.ItemStatus = "Active" Then
5283
                                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5284
                                                                        oConnector_1 = Tconnector
5285
                                                                    End If
5286
                                                                End If
5287
                                                            Next
5288
                                                        End If
5289
                                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5290
                                                            For Each Tconnector In oSymbol.Connect1Connectors
5291
                                                                If Tconnector.ItemStatus = "Active" Then
5292
                                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5293
                                                                        oConnector_2 = Tconnector
5294
                                                                    End If
5295
                                                                End If
5296
                                                            Next
5297
                                                        End If
5298
                                                    End If
5299
                                                    Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(oConnector_1.ModelItemID)
5300
                                                    Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(oConnector_2.ModelItemID)
5301
                                                    If dAngle = 3.14 Then
5302
                                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(1)
5303
                                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(0)
5304
                                                    Else
5305
                                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(0)
5306
                                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(1)
5307
                                                    End If
5308

    
5309

    
5310
                                                End If
5311

    
5312
                                            Else
5313
                                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5314
                                                oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5315
                                            End If
5316
                                        Else
5317
                                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5318
                                            oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5319
                                        End If
5320

    
5321
                                    Catch ex As Exception
5322
                                    End Try
5323
                                Next
5324
                                oSymbol.Commit()
5325
                            End If
5326
                        Catch ex As Exception
5327
                        End Try
5328
                    End If
5329
                End If
5330

    
5331

    
5332

    
5333
            End If
5334

    
5335

    
5336

    
5337
            'Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
5338
            'Dim sConnTypeNo As String = ""
5339
            '' Line과 연결되어있는 Symbol인지 확인
5340
            'Dim oLine_Dt As DataTable = GetPipeFromConnection(CDrawing, sSymbolUid, sConnTypeNo)
5341
            ''Symbol과 연결되어 있는 Symbol인지 확인
5342
            'Dim oSymbol_Dt As DataTable = GetSymbolFromConnection(CDrawing, sSymbolUid, sConnTypeNo)
5343
            'Dim oSymbol As LMSymbol = Nothing
5344
            'Dim sSPID As String = oSymbolRow(_XML_SYMBOL_SPID).ToString()
5345
            'Dim sSystemPath As String = oSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
5346
            'Dim oDatasource As Object = _Placement.PIDDataSource
5347
            'Dim sSymbolCompType As String = oSymbolRow(_XML_SYMBOL_TYPE).ToString()
5348

    
5349
            'Dim dAngle As Double = 0.0
5350
            'If IsNumeric(oSymbolRow(_XML_SYMBOL_ANGLE).ToString()) Then
5351
            '    dAngle = Double.Parse(oSymbolRow(_XML_SYMBOL_ANGLE).ToString())
5352
            'End If
5353

    
5354
            'Dim dLocationX As Double = 0.0
5355
            'Dim dLocationY As Double = 0.0
5356
            'Dim dX As Double = 0.0
5357
            'Dim dY As Double = 0.0
5358
            'Dim sOriginalPoint As String = oSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
5359
            'ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5360
            'dX = dLocationX
5361
            'dY = dLocationY
5362
            'ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
5363
            'Dim bCheckModeling As Boolean = False
5364

    
5365
            'If oLine_Dt.Rows.Count > 0 Then
5366

    
5367
            '    If sSPID <> "" Then
5368
            '        Dim dX1 As Double = 0
5369
            '        Dim dX2 As Double = 0
5370
            '        Dim dY1 As Double = 0
5371
            '        Dim dY2 As Double = 0
5372
            '        Dim oLMSymbol As LMSymbol = oDatasource.GetSymbol(sSPID)
5373
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
5374
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
5375

    
5376
            '        Dim dCalcPoint As Double = -1
5377
            '        Dim dModeling_X As Double = 0
5378
            '        Dim dModeling_Y As Double = 0
5379
            '        If dX1 <> 0 And dY1 <> 0 Then
5380
            '            dCalcPoint = Math.Abs(dX1 - dX) + Math.Abs(dY1 - dY)
5381
            '            dModeling_X = dX1
5382
            '            dModeling_Y = dY1
5383
            '        End If
5384
            '        If dX2 <> 0 And dY2 <> 0 Then
5385

    
5386
            '            If (Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY) > dCalcPoint) Then
5387
            '                dCalcPoint = Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY)
5388
            '                dModeling_X = dX2
5389
            '                dModeling_Y = dY2
5390
            '            End If
5391
            '        End If
5392

    
5393

    
5394

    
5395
            '        If dModeling_X <> 0 And dModeling_Y <> 0 Then
5396
            '            oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dModeling_X, dModeling_Y,, dAngle, ExistingItem:=oLMSymbol.AsLMAItem,
5397
            '                TargetItem:=oLMSymbol.AsLMRepresentation)
5398
            '            bCheckModeling = True
5399
            '        End If
5400

    
5401

    
5402
            '    End If
5403
            'End If
5404
            'If oSymbol_Dt.Rows.Count > 0 Then
5405
            '    If sSPID <> "" Then
5406
            '        Dim dX1 As Double = 0
5407
            '        Dim dX2 As Double = 0
5408
            '        Dim dX3 As Double = 0
5409
            '        Dim dX4 As Double = 0
5410
            '        Dim dY1 As Double = 0
5411
            '        Dim dY2 As Double = 0
5412
            '        Dim dY3 As Double = 0
5413
            '        Dim dY4 As Double = 0
5414
            '        Dim oLMSymbol As LMSymbol = oDatasource.GetSymbol(sSPID)
5415
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
5416
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
5417
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 3, dX3, dY3)
5418
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 4, dX4, dY4)
5419

    
5420
            '        Dim dCalcPoint As Double = -1
5421
            '        Dim dModeling_X As Double = 0
5422
            '        Dim dModeling_Y As Double = 0
5423
            '        If dX1 <> 0 And dY1 <> 0 Then
5424
            '            dCalcPoint = Math.Abs(dX1 - dX) + Math.Abs(dY1 - dY)
5425
            '            dModeling_X = dX1
5426
            '            dModeling_Y = dY1
5427
            '        End If
5428
            '        If dX2 <> 0 And dY2 <> 0 Then
5429

    
5430
            '            If (Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY) > dCalcPoint) Then
5431
            '                dCalcPoint = Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY)
5432
            '                dModeling_X = dX2
5433
            '                dModeling_Y = dY2
5434
            '            End If
5435
            '        End If
5436
            '        If dX3 <> 0 And dY3 <> 0 Then
5437
            '            If (Math.Abs(dX3 - dX) + Math.Abs(dY3 - dY) > dCalcPoint) Then
5438
            '                dCalcPoint = Math.Abs(dX3 - dX) + Math.Abs(dY3 - dY)
5439
            '                dModeling_X = dX3
5440
            '                dModeling_Y = dY3
5441
            '            End If
5442
            '        End If
5443
            '        If dX4 <> 0 And dY4 <> 0 Then
5444
            '            If (Math.Abs(dX4 - dX) + Math.Abs(dY4 - dY) > dCalcPoint) Then
5445
            '                dCalcPoint = Math.Abs(dX4 - dX) + Math.Abs(dY4 - dY)
5446
            '                dModeling_X = dX4
5447
            '                dModeling_Y = dY4
5448
            '            End If
5449
            '        End If
5450
            '        If dModeling_X <> 0 And dModeling_Y <> 0 Then
5451
            '            oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dModeling_X, dModeling_Y,, dAngle, ExistingItem:=oLMSymbol.AsLMAItem,
5452
            '                TargetItem:=oLMSymbol.AsLMRepresentation)
5453
            '            bCheckModeling = True
5454
            '        End If
5455

    
5456

    
5457
            '    End If
5458

    
5459
            'End If
5460

    
5461
            'If (oLine_Dt.Rows.Count = 0 And oSymbol_Dt.Rows.Count = 0) Or bCheckModeling = False Then
5462
            '    oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
5463
            '    SetListBoxItems(ListBox_Result, "Place Fittings..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
5464
            '    _iFittingcnt = _iFittingcnt + 1
5465
            'End If
5466
            'Dim oAttributeRow() As DataRow
5467
            'oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sSymbolUid + "'")
5468
            'If oAttribute_Dt.Rows.Count > 0 Then
5469

    
5470
            '    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
5471
            '        Dim oInstrument As LMInstrument
5472
            '        oInstrument = oDatasource.GetInstrument(oSymbol.ModelItemID)
5473
            '        Try
5474
            '            If oAttributeRow.Length > 0 Then
5475
            '                For Each oAttribute In oAttributeRow
5476
            '                    Try
5477
            '                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5478
            '                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5479
            '                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5480
            '                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
5481
            '                    Catch ex As Exception
5482
            '                    End Try
5483
            '                Next
5484
            '                oInstrument.Commit()
5485
            '            End If
5486
            '        Catch ex As Exception
5487
            '        End Try
5488
            '    Else
5489
            '        Try
5490
            '            If oAttributeRow.Length > 0 And oSymbol IsNot Nothing Then
5491
            '                For Each oAttribute In oAttributeRow
5492
            '                    Try
5493
            '                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5494
            '                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5495

    
5496
            '                        If sPIDAttribute = "SIZE" Then
5497

    
5498
            '                            'Nominal diamter1,2속성이름뭔지 찾아봐야됨 (2018-07-20)
5499
            '                            If sPIDValue.Contains("x") Then
5500
            '                                Dim sSplitSize() As String = sPIDValue.Split("x")
5501
            '                                If sSplitSize.Count > 1 Then
5502
            '                                    'Connection Point와 연결되어 있는 라인을 가져와서 라인프로퍼티를 변경
5503
            '                                    Dim oConnector_1 As LMConnector = Nothing
5504
            '                                    Dim oConnector_2 As LMConnector = Nothing
5505
            '                                    If oSymbol IsNot Nothing Then
5506
            '                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5507
            '                                            For Each Tconnector In oSymbol.Connect1Connectors
5508
            '                                                If Tconnector.ItemStatus = "Active" Then
5509
            '                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5510
            '                                                        oConnector_1 = Tconnector
5511
            '                                                    End If
5512
            '                                                End If
5513
            '                                            Next
5514
            '                                        End If
5515
            '                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5516
            '                                            For Each Tconnector In oSymbol.Connect1Connectors
5517
            '                                                If Tconnector.ItemStatus = "Active" Then
5518
            '                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5519
            '                                                        oConnector_2 = Tconnector
5520
            '                                                    End If
5521
            '                                                End If
5522
            '                                            Next
5523
            '                                        End If
5524
            '                                    End If
5525
            '                                    Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(oConnector_1.ModelItemID)
5526
            '                                    Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(oConnector_2.ModelItemID)
5527
            '                                    If dAngle = 3.14 Then
5528
            '                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(1)
5529
            '                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(0)
5530
            '                                    Else
5531
            '                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(0)
5532
            '                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(1)
5533
            '                                    End If
5534

    
5535

    
5536
            '                                End If
5537

    
5538
            '                            Else
5539
            '                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5540
            '                                oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5541
            '                            End If
5542
            '                        Else
5543
            '                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5544
            '                            oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5545
            '                        End If
5546

    
5547
            '                    Catch ex As Exception
5548
            '                    End Try
5549
            '                Next
5550
            '                oSymbol.Commit()
5551
            '            End If
5552
            '        Catch ex As Exception
5553
            '        End Try
5554
            '    End If
5555
            'End If
5556
        Catch ex As Exception
5557
        End Try
5558
    End Sub
5559

    
5560

    
5561

    
5562
    Private Function AutoModeling() As Boolean
5563
        Try
5564
            _AllLine_DT = Line_Dt()
5565
            _AllSymbol_DT = Symbol_Dt()
5566
            _ModelingLine_Dt = Line_Dt()
5567

    
5568
            _CompleteConvert = False
5569
            Label_Progress.Text = "0%"
5570
            SetListBoxItems(ListBox_Result, " Auto converting 시작....")
5571
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 시작....")
5572
            Dim oDwg_Dt As DataTable = LoadAllDrawing()
5573
            _Log_File = "AutoConverting_" + DateTime.Now.ToString("yyyyMMdd") + "_" + DateTime.Now.ToString("HHmmss")
5574
            _allItem = GetAllCheckNodeCount()
5575
            _Itemcnt = 0
5576
            '1.Equipment
5577
            '2.Piping OPC
5578
            '3.OPC 시작되는 Line
5579
            InitAutoRouting()
5580
            EquipmentModeling(oDwg_Dt)
5581
            PipingModeling()
5582

    
5583
            '   PipeLine_Fitting_Modeling()
5584

    
5585
            SetProgressbar(ProgressBar_Status, 100)
5586
            Label_Progress.Text = "100%"
5587
            SetListBoxItems(ListBox_Result, " Auto converting 완료")
5588
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 완료")
5589
            _CompleteConvert = True
5590
            Return True
5591
        Catch ex As Exception
5592
            Return False
5593
        End Try
5594
    End Function
5595

    
5596

    
5597

    
5598
    Private Sub ThreadConvert()
5599
        If _DrawingsList IsNot Nothing Then
5600
            If _DrawingsList.Count > 0 Then
5601
                AutoModeling()
5602
            End If
5603
        End If
5604
    End Sub
5605

    
5606
    Private Sub ThreadOPCRemove()
5607
        While _CompleteConvert = False
5608
            Dim oFindOPC As New FindOpc
5609
            oFindOPC.RemoveOPCDlg()
5610
        End While
5611

    
5612
    End Sub
5613

    
5614

    
5615
    Private Function OpenDrawing(ByVal oDt As DataTable, ByVal sDwgName As String) As String
5616
        Dim oRows As DataRow() = oDt.Select("[Name] = '" & sDwgName & "'")
5617
        Dim oPath As String = ""
5618
        If oRows.Length > 0 Then
5619
            oPath = oRows(0).Item("Path").ToString()
5620
        End If
5621
        Return oPath
5622
    End Function
5623

    
5624
    Private Sub LoadXmlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LoadXmlToolStripMenuItem.Click
5625

    
5626
        If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
5627
            LoadDB()
5628
            LoadXmlItem(FolderBrowserDialog1.SelectedPath)
5629
        End If
5630
    End Sub
5631
    Private Sub LoadXmlItem(ByVal sFolderPath As String)
5632
        _DrawingsList = New List(Of Drawing)
5633
        Dim sfileEntries As String() = Directory.GetFiles(sFolderPath)
5634
        If Tree_Result.Nodes.Count > 0 Then
5635
            Tree_Result.Nodes(0).Nodes.Clear()
5636
            For Each sfileName In sfileEntries
5637
                Dim sExtension As String = Path.GetExtension(sfileName)
5638
                If sExtension = ".xml" Then
5639
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(sfileName)
5640
                    Dim sDwgPath As String = sfileName
5641
                    Dim oNode As TreeNode = Tree_Result.Nodes(0).Nodes.Add(sDwgPath, sDwgName, 15)
5642
                    Dim oDwg As Drawing = AddSymbolItem(sDwgPath, oNode)
5643

    
5644
                    _DrawingsList.Add(oDwg)
5645
                End If
5646
            Next
5647
            Tree_Result.Nodes(0).Expand()
5648
        End If
5649
    End Sub
5650

    
5651
    Private Sub GenerateRelation(ByRef oDwg_Ds As Drawing)
5652
        Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
5653
        Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
5654
        Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
5655
        Dim oRelation As New GenerateRelation()
5656
        For Each oLinelist In oLineLists
5657
            oRelation.CalcLineConnectionItem_Equal(oLinelist.Dt_Line, oLineLists)
5658
            oRelation.CalcLineConnectionItem_NonEqual(oLinelist.Dt_Line, oLineLists)
5659
            oRelation.CalcSymbolConnectionItem_Equal(oLinelist.Dt_Symbol, oLineLists)
5660
            oRelation.CalcSymbolConnectionItem_NonEqual(oLinelist.Dt_Symbol, oLineLists)
5661
        Next
5662
    End Sub
5663

    
5664

    
5665
    ''' <summary>
5666
    '''  XML Tree 구조 생성 
5667
    ''' </summary>
5668
    ''' <param name="sDwgPath"></param>
5669
    Private Function AddSymbolItem(ByVal sDwgPath As String, ByVal oParentNode As TreeNode) As Drawing
5670
        Dim oDwg_Ds As Drawing = LoadSymbolInXml(sDwgPath)
5671

    
5672
        'SetConnectionInfo()
5673
        '  GenerateRelation(oDwg_Ds)
5674

    
5675
        If oDwg_Ds IsNot Nothing Then
5676
            Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
5677

    
5678
            Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
5679

    
5680
            Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
5681

    
5682
            Dim oPipe As Boolean = False
5683
            Dim oFitting As Boolean = False
5684
            'PipeLine 구분
5685

    
5686
            For Each oLinelist In oLineLists
5687
                Dim sLineNoUid As String = oLinelist.Uid
5688
                Dim sLineNo As String = oLinelist.Text
5689
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
5690
                For Each oLineRow In oLinelist.Dt_Line.Rows
5691
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
5692
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
5693
                    Dim bValidLine As Boolean = oLineRow(_XML_LINE_ValieLine)
5694

    
5695

    
5696
                    If bValidLine = False Then
5697
                        oLineNoNode.ForeColor = Color.Red
5698
                        oPipeNode.ForeColor = Color.Red
5699
                    Else
5700

    
5701
                        Dim bLineType As String = oLineRow(_XML_LINE_TYPE)
5702
                        Dim bLineColor As Color = GetPipeColor(bLineType)
5703
                        If bLineType <> "Primary" Then
5704
                            MessageBox.Show("")
5705
                        End If
5706
                        oPipeNode.ForeColor = bLineColor
5707
                    End If
5708
                    oPipeNode.Tag = sLineNoUid
5709
                Next
5710
                For Each oSymbolRow In oLinelist.Dt_Symbol.Rows
5711
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5712
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
5713
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
5714

    
5715
                    oSymbolNode.Tag = sLineNoUid
5716
                Next
5717
            Next
5718

    
5719
            For Each oEqplist In oEqpLists
5720
                Dim sEqpUid As String = oEqplist.Uid
5721
                Dim sEqpNo As String = "EQUIPMENT"
5722
                Dim oEqpNode As TreeNode = oParentNode.Nodes.Add(sEqpUid, sEqpNo)
5723

    
5724

    
5725
                For Each oSymbolRow In oEqplist.Dt_Equipment.Rows
5726
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5727
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
5728
                    Dim oSymbolNode As TreeNode = oEqpNode.Nodes.Add(sSymbolUid, sSymbolName)
5729
                    oSymbolNode.Tag = sEqpUid
5730
                Next
5731
            Next
5732
            Dim sTrimLine As String = "TrimLineNos"
5733
            Dim iTrimLinecnt As Integer = 1
5734
            For Each oTrimLinelist In oTrimLineLists
5735
                Dim sLineNoUid As String = oTrimLinelist.Uid
5736
                Dim sLineNo As String = sTrimLine & "_" & iTrimLinecnt
5737
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
5738
                For Each oLineRow In oTrimLinelist.Dt_Line.Rows
5739
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
5740
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
5741
                    Dim bValidLine As Boolean = oLineRow(_XML_LINE_ValieLine)
5742
                    If bValidLine = False Then
5743
                        oLineNoNode.ForeColor = Color.Red
5744
                        oPipeNode.ForeColor = Color.Red
5745
                    Else
5746
                        Dim bLineType As String = oLineRow(_XML_LINE_TYPE)
5747
                        If bLineType <> "Primary" Then
5748
                            MessageBox.Show("")
5749
                        End If
5750
                        Dim bLineColor As Color = GetPipeColor(bLineType)
5751
                        oPipeNode.ForeColor = bLineColor
5752
                    End If
5753
                    oPipeNode.Tag = sLineNoUid
5754
                Next
5755
                For Each oSymbolRow In oTrimLinelist.Dt_Symbol.Rows
5756
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5757
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
5758
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
5759
                    oSymbolNode.Tag = sLineNoUid
5760
                Next
5761
                iTrimLinecnt = iTrimLinecnt + 1
5762
            Next
5763

    
5764
        End If
5765

    
5766
        Return oDwg_Ds
5767
    End Function
5768
    Private Sub Tree_Result_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles Tree_Result.AfterCheck
5769
        If e.Node.Checked = True Then
5770
            For Each oNode As TreeNode In e.Node.Nodes
5771
                oNode.Checked = True
5772
            Next
5773
        Else
5774
            For Each oNode As TreeNode In e.Node.Nodes
5775
                oNode.Checked = False
5776
            Next
5777
        End If
5778
    End Sub
5779

    
5780
    Private Sub Btn_Setting_Click(sender As Object, e As EventArgs) Handles Btn_Setting.Click
5781
        Dim oSettings As Settings = New Settings()
5782
        oSettings.ShowDialog()
5783
    End Sub
5784

    
5785
    Private Sub Btn_TestNozzle_Click(sender As Object, e As EventArgs) Handles Btn_TestNozzle.Click
5786

    
5787
        Dim sVessel_ID As String = "841D5E640AE5421B9A017DDC2E87FF11"
5788
        Dim objVessel As LMVessel
5789
        objVessel = _Placement.PIDDataSource.GetVessel(sVessel_ID)
5790
        Dim oVesselLocation As LMLocations = objVessel.Locations
5791
        Dim symVessel As LMSymbol = _Placement.PIDDataSource.GetSymbol(objVessel.Representations.Nth(1).Id)
5792
        Dim XCoordinate As String = symVessel.Attributes("XCoordinate").Value
5793
        Dim YCoordinate As String = symVessel.Attributes("YCoordinate").Value
5794
        symVessel.Attributes("XCoordinate").Value = XCoordinate + 0.01
5795
        symVessel.Attributes("YCoordinate").Value = YCoordinate + 0.01
5796
        symVessel.Commit()
5797
        Dim sValve_ID As String = "DB7B0CA8A2664A6BA7A9615764BA62B0"
5798
        Dim objValve As LMSymbol
5799
        Dim objValves As LMPipingComp = _Placement.PIDDataSource.GetPipingComp(sValve_ID)
5800

    
5801
        objValve = _Placement.PIDDataSource.GetSymbol(objValves.Representations.Nth(1).Id)
5802
        objValve.Commit()
5803
        Dim dVesselX As Double = XCoordinate
5804
        Dim dVesselY As Double = YCoordinate
5805
        Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
5806

    
5807
        _Placement.PIDConnectPointLocation(objValve, 1, X1, Y1)
5808

    
5809
        _Placement.PIDConnectPointLocation(objValve, 2, X2, Y2)
5810

    
5811
        Dim nozzlename As String = "\Equipment Components\Nozzles\Flanged Nozzle.sym"
5812
        Dim dCalc_x As Double = 0
5813
        Dim dCalc_y As Double = 0
5814

    
5815
        If dVesselX - X2 > 0 Then
5816
            dCalc_x = dVesselX - (dVesselX - X2)
5817
        Else
5818
            dCalc_x = dVesselX + (X2 - dVesselX)
5819
        End If
5820
        If dVesselY - Y2 > 0 Then
5821
            dCalc_y = dVesselY - (dVesselY - Y2)
5822
        Else
5823
            dCalc_y = dVesselY + (Y2 - dVesselY)
5824
        End If
5825

    
5826
        Dim objNozzle As LMSymbol = _Placement.PIDPlaceSymbol(nozzlename, dCalc_x, dCalc_y,
5827
            TargetItem:=symVessel.AsLMRepresentation)
5828

    
5829
        Dim blnSuccess As Boolean = _Placement.PIDConnectPointLocation(objNozzle, 1, X1, Y1)
5830
        blnSuccess = _Placement.PIDConnectPointLocation(objNozzle, 2, X1, Y1)
5831

    
5832
        objValve = _Placement.PIDPlaceSymbol(objValve.FileName, X1, Y1, ExistingItem:=objValve.AsLMAItem,
5833
          TargetItem:=objNozzle.AsLMRepresentation)
5834

    
5835

    
5836

    
5837
    End Sub
5838

    
5839
    Private Sub Btn_SymbolLibrary_Click(sender As Object, e As EventArgs) Handles Btn_SymbolLibrary.Click
5840
        Dim oMapping As New Mapping(_PIDSymbol_DB)
5841
        oMapping.Show()
5842
    End Sub
5843

    
5844
    Private Sub Btn_Stop_Click(sender As Object, e As EventArgs) Handles Btn_Stop.Click
5845
        Try
5846
            SetListBoxItems(ListBox_Result, " Auto converting 중지....")
5847
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 중지....")
5848
            _Main_trd.Abort()
5849
            _Opc_trd.Abort()
5850
        Catch ex As Exception
5851

    
5852
        End Try
5853
    End Sub
5854

    
5855
    Private Sub AutoCheckTreeNode(ByVal iType As Integer, ByVal bCheck As Boolean)
5856

    
5857
        For Each oDrwing As TreeNode In Tree_Result.Nodes
5858
            For Each oDwgNode As TreeNode In oDrwing.Nodes
5859
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
5860
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
5861
                If CDrawing IsNot Nothing Then
5862
                    Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
5863
                    Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
5864
                    For Each oNode As TreeNode In oDwgNode.Nodes
5865
                        Dim iItemcnt As Integer = 0
5866
                        Dim sNodeUid As String = oNode.Name
5867
                        Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
5868

    
5869
                        If iType = 0 Then 'Symbol
5870
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
5871
                            If CLineNo IsNot Nothing Then
5872
                                Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
5873
                                For Each oSymbolRow In oSymbol_Dt.Rows
5874
                                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
5875
                                    For Each oSymbolNode As TreeNode In oNode.Nodes
5876
                                        Dim sSymbolNodeUid As String = oSymbolNode.Name
5877
                                        If sSymbolNodeUid = sSymbolUid Then
5878
                                            oSymbolNode.Checked = bCheck
5879
                                            Exit For
5880
                                        End If
5881
                                    Next
5882
                                Next
5883
                            End If
5884
                            Dim TrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
5885
                            If TrimLineNo IsNot Nothing Then
5886
                                Dim oSymbol_Dt As DataTable = TrimLineNo.Dt_Symbol
5887
                                For Each oSymbolRow In oSymbol_Dt.Rows
5888
                                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
5889
                                    For Each oSymbolNode As TreeNode In oNode.Nodes
5890
                                        Dim sSymbolNodeUid As String = oSymbolNode.Name
5891
                                        If sSymbolNodeUid = sSymbolUid Then
5892
                                            oSymbolNode.Checked = bCheck
5893
                                            Exit For
5894
                                        End If
5895
                                    Next
5896
                                Next
5897
                            End If
5898
                        End If
5899
                        If iType = 1 Then 'Line
5900
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
5901
                            If CLineNo IsNot Nothing Then
5902
                                Dim oLine_Dt As DataTable = CLineNo.Dt_Line
5903
                                For Each oLineRow In oLine_Dt.Rows
5904
                                    Dim sLineUid As String = oLineRow(_XML_LINE_UID).ToString()
5905
                                    For Each oLineNode As TreeNode In oNode.Nodes
5906
                                        Dim sLineNodeUid As String = oLineNode.Name
5907
                                        If sLineNodeUid = sLineUid Then
5908
                                            oLineNode.Checked = bCheck
5909
                                            Exit For
5910
                                        End If
5911
                                    Next
5912
                                Next
5913
                            End If
5914
                            Dim TrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
5915
                            If TrimLineNo IsNot Nothing Then
5916
                                Dim oLine_Dt As DataTable = TrimLineNo.Dt_Line
5917
                                For Each oLineRow In oLine_Dt.Rows
5918
                                    Dim sLineUid As String = oLineRow(_XML_SYMBOL_UID).ToString()
5919
                                    For Each oLineNode As TreeNode In oNode.Nodes
5920
                                        Dim sLineNodeUid As String = oLineNode.Name
5921
                                        If sLineNodeUid = sLineUid Then
5922
                                            oLineNode.Checked = bCheck
5923
                                            Exit For
5924
                                        End If
5925
                                    Next
5926
                                Next
5927
                            End If
5928
                        End If
5929
                        If iType = 2 Then 'Equipment
5930
                            Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
5931
                            If CEqpNo IsNot Nothing Then
5932
                                Dim oEqp_Dt As DataTable = CEqpNo.Dt_Equipment
5933
                                For Each oEqpRow In oEqp_Dt.Rows
5934
                                    Dim sEqpUid As String = oEqpRow(_XML_LINE_UID).ToString()
5935
                                    For Each oEqpNode As TreeNode In oNode.Nodes
5936
                                        Dim sEqpNodeUid As String = oEqpNode.Name
5937
                                        If sEqpNodeUid = sEqpUid Then
5938
                                            oEqpNode.Checked = bCheck
5939
                                            Exit For
5940
                                        End If
5941
                                    Next
5942
                                Next
5943
                            End If
5944
                        End If
5945
                    Next
5946
                End If
5947
            Next
5948
        Next
5949

    
5950

    
5951
    End Sub
5952

    
5953

    
5954

    
5955
    Private Sub Chk_Symbol_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Symbol.CheckedChanged
5956
        AutoCheckTreeNode(0, Chk_Symbol.Checked)
5957
    End Sub
5958

    
5959
    Private Sub Chk_Line_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Line.CheckedChanged
5960
        AutoCheckTreeNode(1, Chk_Line.Checked)
5961
    End Sub
5962

    
5963
    Private Sub Chk_Equipment_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Equipment.CheckedChanged
5964
        AutoCheckTreeNode(2, Chk_Equipment.Checked)
5965
    End Sub
5966
End Class
5967

    
5968

    
5969
Public Class DrawingInfo
5970
    Public mDrawingName As String
5971
    Public mSpID As String
5972
    Public mPath As String
5973
End Class
5974

    
5975

    
5976

    
5977

    
5978