프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / SPPIDConverter / Main.vb @ dd46ca83

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

1
Imports System.IO
2
Imports System.Data.SqlClient
3
Imports System.Data.SQLite
4
Imports Plaice
5
Imports Llama
6
Imports ComUtil.MessageLog.CEventLog
7

    
8
Imports System.Threading
9

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

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

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

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

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

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

    
103
    Private Function LoadSymbolInXml(ByVal sXmlPath As String) As Drawing
104
        Try
105
            ''  _TempSymbolDt = Symbol_Dt()
106
            Dim CDrawing As Drawing = New Drawing()
107
            Dim oDt As DataTable = LoadSymbol_DT()
108
            Dim oElement As XElement = XElement.Load(sXmlPath)
109
            If oElement IsNot Nothing Then
110
                CDrawing.DwgName = oElement.Element(_XML_DWGNAME).Value
111
                CDrawing.Size = oElement.Element(_XML_DWGSIZE).Value
112
                SplitLocation(CDrawing.Size, _IMG_X, _IMG_Y)
113
                CDrawing.Unit = oElement.Element(_XML_UNIT).Value
114
                Dim oLineno_list As New List(Of Line_no)
115
                Dim oEqp_list As New List(Of Eqp_no)
116
                Dim oTrim_Lineno_list As New List(Of Line_no)
117
                oLineno_list = LoadLineNo(oElement, _XML_CATEGORY_LINENO)
118
                For Each oEqpNo As Object In oElement.Elements(_XML_CATEGORY_EQUIPMENT)
119
                    Dim CEqp_no As Eqp_no = New Eqp_no()
120
                    Dim oSymbol_Dt As DataTable = Symbol_Dt()
121
                    Dim oAttribute_Dt As DataTable = Attribute_Dt()
122
                    Dim sUid As String = ""
123
                    For Each oSymbol As Object In oEqpNo.Elements(_XML_CATEGORY_SYMBOL)
124
                        Try
125
                            Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
126
                            Dim oEleObj As XElement
127
                            Dim sName As String
128
                            Dim sLocation As String
129
                            Dim sSize As String
130
                            Dim sAngle As String
131
                            Dim sOriginalPoint As String = ""
132
                            Dim sConnectionPoint As String = ""
133
                            Dim sConnectionUids As String = ""
134
                            Dim sConnArray As String()
135
                            Dim sSizeArray As String()
136
                            Dim sLocationArray As String()
137
                            Dim sChild As String = ""
138
                            Dim dCenterPos_x As Double = 0.0
139
                            Dim dCenterPos_y As Double = 0.0
140
                            Dim dDwgCenterPos_x As Double = 0.0
141
                            Dim dDwgCenterPos_y As Double = 0.0
142
                            Dim dConn1Pos_x As Double = 0.0
143
                            Dim dConn1Pos_y As Double = 0.0
144
                            Dim dConn2Pos_x As Double = 0.0
145
                            Dim dConn2Pos_y As Double = 0.0
146
                            Dim dConn3Pos_x As Double = 0.0
147
                            Dim dConn3Pos_y As Double = 0.0
148
                            Dim dConn4Pos_x As Double = 0.0
149
                            Dim dConn4Pos_y As Double = 0.0
150
                            Dim dDwg_Conn1Pos_x As Double = 0.0
151
                            Dim dDwg_Conn1Pos_y As Double = 0.0
152
                            Dim dDwg_Conn2Pos_x As Double = 0.0
153
                            Dim dDwg_Conn2Pos_y As Double = 0.0
154
                            Dim dDwg_Conn3Pos_x As Double = 0.0
155
                            Dim dDwg_Conn3Pos_y As Double = 0.0
156
                            Dim dDwg_Conn4Pos_x As Double = 0.0
157
                            Dim dDwg_Conn4Pos_y As Double = 0.0
158
                            oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
159
                            sUid = oEleObj.Value
160
                            oEleObj = oSymbol.Element(_XML_SYMBOL_PARENT)
161
                            sName = oEleObj.Value
162
                            oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
163
                            sLocation = oEleObj.Value
164
                            oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
165
                            sSize = oEleObj.Value
166
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
167
                            sAngle = oEleObj.Value
168
                            oEleObj = oSymbol.Element(_XML_SYMBOL_CONNECTIONPOINT)
169
                            sConnectionPoint = oEleObj.Value
170
                            oEleObj = oSymbol.Element(_XML_SYMBOL_CHILD)
171
                            sChild = oEleObj.Value
172
                            Try
173
                                oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
174
                                sOriginalPoint = oEleObj.Value
175
                            Catch ex As Exception
176

    
177
                            End Try
178
                            'oEleObj = oSymbol.Element(_XML_LINE_CONNS)
179
                            'sConnectionUids = oEleObj.Value
180
                            'sConnArray = sConnectionUids.Split(",")
181
                            'If sConnArray.Length > 4 Then
182
                            '    MessageBox.Show(sConnArray.Length)
183
                            'End If
184
                            'For i = 0 To sConnArray.Length - 1
185
                            '    If i = 0 Then
186
                            '        oAddrow(_XML_SYMBOL_Conn1_Uid) = sConnArray(i)
187
                            '    ElseIf i = 1 Then
188
                            '        oAddrow(_XML_SYMBOL_Conn2_Uid) = sConnArray(i)
189
                            '    ElseIf i = 2 Then
190
                            '        oAddrow(_XML_SYMBOL_Conn3_Uid) = sConnArray(i)
191
                            '    ElseIf i = 3 Then
192
                            '        oAddrow(_XML_SYMBOL_Conn4_Uid) = sConnArray(i)
193
                            '    End If
194
                            'Next
195
                            oAddrow(_XML_SYMBOL_Conn1_Uid) = ""
196
                            oAddrow(_XML_SYMBOL_Conn2_Uid) = ""
197
                            oAddrow(_XML_SYMBOL_Conn3_Uid) = ""
198
                            oAddrow(_XML_SYMBOL_Conn4_Uid) = ""
199
                            ConvertPointBystring(sOriginalPoint, dCenterPos_x, dCenterPos_y)
200
                            dDwgCenterPos_x = dCenterPos_x
201
                            dDwgCenterPos_y = dCenterPos_y
202
                            ConvertPointByImage(dDwgCenterPos_x, dDwgCenterPos_y, _IMG_X, _IMG_Y)
203
                            oAddrow(_XML_SYMBOL_CENTERPOINT_X) = dCenterPos_x
204
                            oAddrow(_XML_SYMBOL_CENTERPOINT_Y) = dCenterPos_y
205
                            oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_X) = dDwgCenterPos_x
206
                            oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_Y) = dDwgCenterPos_y
207
                            sConnArray = sConnectionPoint.Split("/")
208
                            sSizeArray = sSize.Split(",")
209
                            sLocationArray = sLocation.Split(",")
210
                            If sConnArray.Length > 4 Then
211
                                MessageBox.Show(sConnArray.Length)
212
                            End If
213
                            For i = 0 To sConnArray.Length - 1
214
                                If i = 0 Then
215
                                    oAddrow(_XML_SYMBOL_Conn1_Point) = sConnArray(i)
216
                                    ConvertPointBystring(sConnArray(i), dConn1Pos_x, dConn1Pos_y)
217
                                    dDwg_Conn1Pos_x = dConn1Pos_x
218
                                    dDwg_Conn1Pos_y = dConn1Pos_y
219
                                    ConvertPointByImage(dDwg_Conn1Pos_x, dDwg_Conn1Pos_y, _IMG_X, _IMG_Y)
220
                                    oAddrow(_XML_SYMBOL_CONN1_POINT_X) = dConn1Pos_x
221
                                    oAddrow(_XML_SYMBOL_CONN1_POINT_Y) = dConn1Pos_y
222
                                    oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_X) = dDwg_Conn1Pos_x
223
                                    oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_Y) = dDwg_Conn1Pos_y
224
                                ElseIf i = 1 Then
225
                                    oAddrow(_XML_SYMBOL_Conn2_Point) = sConnArray(i)
226
                                    ConvertPointBystring(sConnArray(i), dConn2Pos_x, dConn2Pos_y)
227
                                    dDwg_Conn2Pos_x = dConn2Pos_x
228
                                    dDwg_Conn2Pos_y = dConn2Pos_y
229
                                    ConvertPointByImage(dDwg_Conn2Pos_x, dDwg_Conn2Pos_y, _IMG_X, _IMG_Y)
230
                                    oAddrow(_XML_SYMBOL_CONN2_POINT_X) = dConn2Pos_x
231
                                    oAddrow(_XML_SYMBOL_CONN2_POINT_Y) = dConn2Pos_y
232
                                    oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_X) = dDwg_Conn2Pos_x
233
                                    oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_Y) = dDwg_Conn2Pos_y
234
                                ElseIf i = 2 Then
235
                                    oAddrow(_XML_SYMBOL_Conn3_Point) = sConnArray(i)
236
                                    ConvertPointBystring(sConnArray(i), dConn3Pos_x, dConn3Pos_y)
237
                                    dDwg_Conn3Pos_x = dConn3Pos_x
238
                                    dDwg_Conn3Pos_y = dConn3Pos_y
239
                                    ConvertPointByImage(dDwg_Conn3Pos_x, dDwg_Conn3Pos_y, _IMG_X, _IMG_Y)
240
                                    oAddrow(_XML_SYMBOL_CONN3_POINT_X) = dConn3Pos_x
241
                                    oAddrow(_XML_SYMBOL_CONN3_POINT_Y) = dConn3Pos_y
242
                                    oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_X) = dDwg_Conn3Pos_x
243
                                    oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_Y) = dDwg_Conn3Pos_y
244
                                ElseIf i = 3 Then
245
                                    oAddrow(_XML_SYMBOL_Conn4_Point) = sConnArray(i)
246
                                    ConvertPointBystring(sConnArray(i), dConn4Pos_x, dConn4Pos_y)
247
                                    dDwg_Conn4Pos_x = dConn4Pos_x
248
                                    dDwg_Conn4Pos_y = dConn4Pos_y
249
                                    ConvertPointByImage(dDwg_Conn4Pos_x, dDwg_Conn4Pos_y, _IMG_X, _IMG_Y)
250
                                    oAddrow(_XML_SYMBOL_CONN4_POINT_X) = dConn4Pos_x
251
                                    oAddrow(_XML_SYMBOL_CONN4_POINT_Y) = dConn4Pos_y
252
                                    oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_X) = dDwg_Conn4Pos_x
253
                                    oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_Y) = dDwg_Conn4Pos_y
254
                                End If
255
                            Next
256

    
257
                            Dim sXLength As String = ""
258
                            Dim sYLength As String = ""
259
                            Dim dMin_x As Double = 0
260
                            Dim dMax_x As Double = 0
261
                            Dim dMin_y As Double = 0
262
                            Dim dMax_y As Double = 0
263

    
264
                            For i = 0 To sSizeArray.Length - 1
265
                                If i = 0 Then
266
                                    sXLength = sSizeArray(i)
267
                                ElseIf i = 1 Then
268
                                    sYLength = sSizeArray(i)
269
                                End If
270
                            Next
271

    
272
                            For i = 0 To sLocationArray.Length - 1
273
                                If i = 0 Then
274
                                    dMin_x = sLocationArray(i)
275
                                    dMax_x = dMin_x + sXLength
276
                                ElseIf i = 1 Then
277
                                    'Y축은 반전
278
                                    dMax_y = sLocationArray(i)
279
                                    dMin_y = dMax_y + sYLength
280
                                End If
281
                            Next
282
                            ConvertPointByImage(dMin_x, dMin_y, _IMG_X, _IMG_Y)
283
                            ConvertPointByImage(dMax_x, dMax_y, _IMG_X, _IMG_Y)
284

    
285
                            oAddrow(_XML_SYMBOL_MIN_X) = dMin_x
286
                            oAddrow(_XML_SYMBOL_MAX_X) = dMax_x
287
                            oAddrow(_XML_SYMBOL_MIN_Y) = dMin_y
288
                            oAddrow(_XML_SYMBOL_MAX_Y) = dMax_y
289
                            oAddrow(_XML_SYMBOL_UID) = sUid
290
                            oAddrow(_XML_SYMBOL_NAME) = IO.Path.GetFileNameWithoutExtension(GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME))
291
                            oAddrow(_XML_SYMBOL_LOCATION) = sLocation
292
                            oAddrow(_XML_SYMBOL_SIZE) = sSize
293
                            oAddrow(_XML_SYMBOL_ANGLE) = sAngle
294
                            oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
295
                            oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
296
                            oAddrow(_XML_SYMBOL_CLASS) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_CLASS)
297
                            oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
298

    
299
                            oAddrow(_XML_SYMBOL_CONNECTIONPOINT) = sConnectionPoint
300
                            oAddrow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
301
                            oAddrow(_XML_SYMBOL_CHILD) = sChild
302
                            '   _AllSymbol_DT.Rows.Add(oAddrow)
303
                            oSymbol_Dt.Rows.Add(oAddrow)
304
                        Catch ex As Exception
305
                        End Try
306
                    Next
307
                    CEqp_no.Uid = sUid
308
                    CEqp_no.Dt_Equipment = oSymbol_Dt
309
                    CEqp_no.Dt_Attribute = oAttribute_Dt
310
                    oEqp_list.Add(CEqp_no)
311
                Next
312
                oTrim_Lineno_list = LoadLineNo(oElement, _XML_CATEGORY_TRIM_LINENO)
313
                CDrawing.Line_nos = oLineno_list
314
                CDrawing.Eqp_nos = oEqp_list
315
                CDrawing.TrimLine_nos = oTrim_Lineno_list
316

    
317
            End If
318
            Return CDrawing
319
        Catch ex As Exception
320
            Return Nothing
321
        End Try
322

    
323
    End Function
324

    
325
    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
326

    
327
        Dim sReturnUid As String = ""
328
        Try
329
            Dim oFindLineRow As DataRow() = oLine_Dt.Select(
330
            "[" & _XML_LINE_DWG_STARTPOINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
331
            "[" & _XML_LINE_DWG_STARTPOINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
332
            "[" & _XML_LINE_DWG_STARTPOINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
333
            "[" & _XML_LINE_DWG_STARTPOINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
334
            "[" & _XML_LINE_UID & "] <> '" & sUid & "' And " &
335
            "[" & _XML_LINE_Conn1_Uid & "] = ''")
336
            If oFindLineRow.Length = 0 Then
337
                oFindLineRow = oLine_Dt.Select(
338
                "[" & _XML_LINE_DWG_ENDPOINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
339
                "[" & _XML_LINE_DWG_ENDPOINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
340
                "[" & _XML_LINE_DWG_ENDPOINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
341
                "[" & _XML_LINE_DWG_ENDPOINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
342
                "[" & _XML_LINE_UID & "] <> '" & sUid & "' And " &
343
                "[" & _XML_LINE_Conn2_Uid & "] = ''")
344
                If oFindLineRow.Length = 0 Then
345
                    oFindLineRow = oSymbol_Dt.Select(
346
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
347
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
348
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
349
              "[" & _XML_SYMBOL_DWG_CONN1_POINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
350
              "[" & _XML_SYMBOL_UID & "] <> '" & sUid & "' And " &
351
              "[" & _XML_SYMBOL_Conn1_Uid & "] = ''")
352
                    If oFindLineRow.Length = 0 Then
353
                        oFindLineRow = oSymbol_Dt.Select(
354
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_X & "] >= '" & dPos_x - 0.001 & "' And " &
355
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_X & "] <= '" & dPos_x + 0.001 & "' And " &
356
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_Y & "] >= '" & dPos_y - 0.001 & "' And " &
357
                   "[" & _XML_SYMBOL_DWG_CONN2_POINT_Y & "] <= '" & dPos_y + 0.001 & "' And " &
358
                   "[" & _XML_SYMBOL_UID & "] <> '" & sUid & "' And " &
359
                   "[" & _XML_SYMBOL_Conn2_Uid & "] = ''")
360
                        If oFindLineRow.Length = 0 Then
361
                        Else
362
                            oFindLineRow(0)(_XML_SYMBOL_Conn2_Uid) = sUid
363
                            sReturnUid = oFindLineRow(0)(_XML_SYMBOL_UID).ToString()
364
                        End If
365
                    Else
366
                        oFindLineRow(0)(_XML_SYMBOL_Conn1_Uid) = sUid
367
                        sReturnUid = oFindLineRow(0)(_XML_SYMBOL_UID).ToString()
368
                    End If
369
                Else
370
                    oFindLineRow(0)(_XML_LINE_Conn2_Uid) = sUid
371
                    sReturnUid = oFindLineRow(0)(_XML_LINE_UID).ToString()
372
                End If
373
            Else
374
                oFindLineRow(0)(_XML_LINE_Conn1_Uid) = sUid
375
                sReturnUid = oFindLineRow(0)(_XML_LINE_UID).ToString()
376
            End If
377
        Catch ex As Exception
378

    
379
        End Try
380

    
381
        Return sReturnUid
382
    End Function
383

    
384

    
385
    Private Function SetConnectionInfo(ByRef oLine_Dt As DataTable, ByRef oSymbol_Dt As DataTable)
386
        Try
387
            For Each oLineInfo In oLine_Dt.Rows
388
                Dim sLineUid As String = oLineInfo(_XML_LINE_UID).ToString()
389
                Dim dStartPos_x As Double = oLineInfo(_XML_LINE_DWG_STARTPOINT_X)
390
                Dim dStartPos_y As Double = oLineInfo(_XML_LINE_DWG_STARTPOINT_Y)
391
                Dim dEndPos_x As Double = oLineInfo(_XML_LINE_DWG_ENDPOINT_X)
392
                Dim dEndPos_y As Double = oLineInfo(_XML_LINE_DWG_ENDPOINT_Y)
393
                Dim sConn1Uid As String = ""
394
                Dim sConn2Uid As String = ""
395
                sConn1Uid = FindConnection(oLine_Dt, oSymbol_Dt, sLineUid, dStartPos_x, dStartPos_y)
396
                If sConn1Uid <> "" Then
397
                    oLineInfo(_XML_LINE_Conn1_Uid) = sConn1Uid
398
                End If
399
                sConn2Uid = FindConnection(oLine_Dt, oSymbol_Dt, sLineUid, dEndPos_x, dEndPos_y)
400
                If sConn2Uid <> "" Then
401
                    oLineInfo(_XML_LINE_Conn2_Uid) = sConn2Uid
402
                End If
403
            Next
404
            For Each oSymbolInfo In oSymbol_Dt.Rows
405
                Dim sSymbolUid As String = oSymbolInfo(_XML_SYMBOL_UID).ToString()
406
                Dim dConn1Pos_x As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN1_POINT_X)
407
                Dim dConn1Pos_y As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN1_POINT_Y)
408
                Dim sConn1Uid As String = ""
409
                Dim sConn2Uid As String = ""
410
                sConn1Uid = FindConnection(oLine_Dt, oSymbol_Dt, sSymbolUid, dConn1Pos_x, dConn1Pos_y)
411
                If sConn1Uid <> "" Then
412
                    oSymbolInfo(_XML_SYMBOL_Conn1_Uid) = sConn1Uid
413
                End If
414
                Try
415
                    Dim dConn2Pos_x As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN2_POINT_X)
416
                    Dim dConn2Pos_y As Double = oSymbolInfo(_XML_SYMBOL_DWG_CONN2_POINT_Y)
417
                    sConn2Uid = FindConnection(oLine_Dt, oSymbol_Dt, sSymbolUid, dConn2Pos_x, dConn2Pos_y)
418
                    If sConn2Uid <> "" Then
419
                        oSymbolInfo(_XML_SYMBOL_Conn2_Uid) = sConn2Uid
420
                    End If
421
                Catch ex As Exception
422
                End Try
423
            Next
424
        Catch ex As Exception
425
        End Try
426
    End Function
427

    
428
    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
429
        Dim bValidLine As Boolean = True
430
        If Math.Abs(dStart_x - dEnd_x) > Math.Abs(dStart_y - dEnd_y) Then
431
            If dStart_x > dEnd_x Then
432
                sDirection = "X"
433
                sFlowdirection = "Left_x"
434
                If Math.Abs(dStart_y - dEnd_y) < 5 Then
435
                    dEnd_y = dStart_y
436
                End If
437
            Else
438
                sDirection = "X"
439
                sFlowdirection = "Right_x"
440
                If Math.Abs(dStart_y - dEnd_y) < 5 Then
441
                    dEnd_y = dStart_y
442
                End If
443
            End If
444
            If Math.Abs(dStart_x - dEnd_x) <= 15 Then
445
                bValidLine = False
446
            End If
447
        Else
448
            If dStart_y > dEnd_y Then
449
                sDirection = "Y"
450
                sFlowdirection = "Down_y"
451
                If Math.Abs(dStart_x - dEnd_x) < 5 Then
452
                    dEnd_x = dStart_x
453
                End If
454

    
455
            Else
456
                sDirection = "Y"
457
                sFlowdirection = "Up_y"
458
                If Math.Abs(dStart_x - dEnd_x) < 5 Then
459
                    dEnd_x = dStart_x
460
                End If
461
            End If
462
            If Math.Abs(dStart_y - dEnd_y) <= 20 Then
463
                bValidLine = False
464
            End If
465
        End If
466
        Return bValidLine
467
    End Function
468

    
469
    Private Function LoadLineNo(ByVal oElement As XElement, ByVal sLineType As String) As List(Of Line_no)
470

    
471
        Dim oLineno_list As New List(Of Line_no)
472
        For Each oLineNo As Object In oElement.Elements(sLineType)
473
            Dim CLineNo As Line_no = New Line_no()
474
            Try
475
                CLineNo.Uid = oLineNo.Element(_XML_LINENO_UID).Value
476
                CLineNo.Text = oLineNo.Element(_XML_LINENO_TEXT).Value
477
                CLineNo.Location = oLineNo.Element(_XML_LINENO_LOCATION).Value
478
                CLineNo.Angle = oLineNo.Element(_XML_LINENO_ANGLE).Value
479
                CLineNo.SystemPath = "\Piping\Labels - Piping Segments\Kemya Line Number.sym" 'GetDataFromMappingDB(_XML_CATEGORY_LINENO, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
480
            Catch ex As Exception
481
            End Try
482
            Dim oLine_Dt As DataTable = Line_Dt()
483
            Dim oSymbol_Dt As DataTable = Symbol_Dt()
484
            Dim oAttribute_Dt As DataTable = Attribute_Dt()
485
            Dim iRunCnt As Integer = 0
486
            For Each oRun As Object In oLineNo.Elements(_XML_CATEGORY_RUN)
487
                iRunCnt = iRunCnt + 1
488
                Dim sRunName As String = CLineNo.Text & "_" & iRunCnt
489
                For Each oMERGEDLine As Object In oRun.Elements(_XML_CATEGORY_MERGEDLINE)
490
                    For Each oLine As Object In oMERGEDLine.Elements(_XML_CATEGORY_LINE)
491
                        Try
492
                            Dim oAddrow As DataRow = oLine_Dt.NewRow()
493
                            Dim oEleObj As XElement
494
                            Dim sUid As String
495
                            Dim sStartpoint As String
496
                            Dim sEndpoint As String
497
                            Dim sType As String
498
                            Dim sConnectionUids As String = ""
499
                            Dim dStartPos_x As Double = 0.0
500
                            Dim dStartPos_y As Double = 0.0
501
                            Dim dEndPos_x As Double = 0.0
502
                            Dim dEndPos_y As Double = 0.0
503
                            Dim dDWG_StartPos_x As Double = 0.0
504
                            Dim dDWG_StartPos_y As Double = 0.0
505
                            Dim dDWG_EndPos_x As Double = 0.0
506
                            Dim dDWG_EndPos_y As Double = 0.0
507
                            oEleObj = oLine.Element(_XML_LINE_UID)
508
                            sUid = oEleObj.Value
509

    
510
                            If oLine_Dt.Select(_XML_LINE_UID & "='" & sUid & "'").Length = 0 Then
511
                                oEleObj = oLine.Element(_XML_LINE_STARTPOINT)
512
                                sStartpoint = oEleObj.Value
513
                                oEleObj = oLine.Element(_XML_LINE_ENDPOINT)
514
                                sEndpoint = oEleObj.Value
515
                                oEleObj = oLine.Element(_XML_LINE_TYPE)
516
                                sType = oEleObj.Value
517
                                'oEleObj = oLine.Element(_XML_LINE_CONNS)
518
                                'sConnectionUids = oEleObj.Value
519
                                'sConnArray = sConnectionUids.Split(",")
520
                                'For i = 0 To sConnArray.Length - 1
521
                                '    If i = 0 Then
522
                                '        oAddrow(_XML_LINE_Conn1_Uid) = sConnArray(i)
523
                                '    ElseIf i = 1 Then
524
                                '        oAddrow(_XML_LINE_Conn2_Uid) = sConnArray(i)
525
                                '    End If
526
                                'Next
527
                                'If sConnArray.Length > 2 Then
528
                                '    MessageBox.Show(sConnArray.Length)
529
                                'End If
530
                                oAddrow(_XML_LINE_Conn1_Uid) = ""
531
                                oAddrow(_XML_LINE_Conn2_Uid) = ""
532
                                oAddrow(_XML_LINE_UID) = sUid
533
                                oAddrow(_XML_LINE_RUNNAME) = sRunName
534
                                oAddrow(_XML_LINE_LINENOUID) = CLineNo.Uid
535
                                oAddrow(_XML_LINENO_TEXT) = CLineNo.Text
536
                                oAddrow(_XML_LINE_STARTPOINT) = sStartpoint
537
                                oAddrow(_XML_LINE_ENDPOINT) = sEndpoint
538

    
539
                                ConvertPointBystring(sStartpoint, dStartPos_x, dStartPos_y)
540
                                ConvertPointBystring(sEndpoint, dEndPos_x, dEndPos_y)
541
                                Dim sDirection As String = ""
542
                                Dim sFlowDirection As String = ""
543
                                Dim bValidLine As Boolean = GetFlowDirection(dStartPos_x, dStartPos_y, dEndPos_x, dEndPos_y, sDirection, sFlowDirection)
544
                                oAddrow(_XML_LINE_FlowDirection) = sFlowDirection
545
                                oAddrow(_XML_LINE_Direction) = sDirection
546
                                oAddrow(_XML_LINE_ValieLine) = bValidLine
547
                                dDWG_StartPos_x = dStartPos_x
548
                                dDWG_StartPos_y = dStartPos_y
549
                                ConvertPointByImage(dDWG_StartPos_x, dDWG_StartPos_y, _IMG_X, _IMG_Y)
550
                                dDWG_EndPos_x = dEndPos_x
551
                                dDWG_EndPos_y = dEndPos_y
552
                                ConvertPointByImage(dDWG_EndPos_x, dDWG_EndPos_y, _IMG_X, _IMG_Y)
553

    
554
                                oAddrow(_XML_LINE_STARTPOINT_X) = dStartPos_x
555
                                oAddrow(_XML_LINE_STARTPOINT_Y) = dStartPos_y
556
                                oAddrow(_XML_LINE_ENDPOINT_X) = dEndPos_x
557
                                oAddrow(_XML_LINE_ENDPOINT_Y) = dEndPos_y
558

    
559
                                oAddrow(_XML_LINE_DWG_STARTPOINT_X) = dDWG_StartPos_x
560
                                oAddrow(_XML_LINE_DWG_STARTPOINT_Y) = dDWG_StartPos_y
561
                                oAddrow(_XML_LINE_DWG_ENDPOINT_X) = dDWG_EndPos_x
562
                                oAddrow(_XML_LINE_DWG_ENDPOINT_Y) = dDWG_EndPos_y
563

    
564
                                oAddrow(_XML_LINE_SYSTEMPATH) = GetDataFromMappingDB(_XML_CATEGORY_LINE, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
565
                                If oAddrow(_XML_LINE_SYSTEMPATH) = "" Then
566
                                    MessageBox.Show("")
567
                                End If
568
                                oAddrow(_XML_LINE_DRAWING_TF) = "FALSE"
569
                                oAddrow(_XML_LINE_TYPE) = sType
570
                                '  _AllLine_DT.Rows.Add(oAddrow)
571
                                oLine_Dt.Rows.Add(oAddrow)
572
                            Else
573
                            End If
574
                        Catch ex As Exception
575
                        End Try
576
                    Next
577
                Next
578

    
579
                For Each oSymbol As Object In oRun.Elements(_XML_CATEGORY_SYMBOL)
580
                    Try
581

    
582
                        Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
583
                        Dim oEleObj As XElement
584
                        Dim sUid As String
585
                        Dim sName As String
586
                        Dim sLocation As String
587
                        Dim sSize As String
588
                        Dim sAngle As String
589
                        Dim sOriginalPoint As String = ""
590
                        Dim sConnectionPoint As String = ""
591
                        Dim sConnectionUids As String = ""
592
                        Dim sConnArray As String()
593
                        Dim sSizeArray As String()
594
                        Dim sLocationArray As String()
595
                        Dim sChild As String = ""
596
                        Dim dCenterPos_x As Double = 0.0
597
                        Dim dCenterPos_y As Double = 0.0
598
                        Dim dDwgCenterPos_x As Double = 0.0
599
                        Dim dDwgCenterPos_y As Double = 0.0
600

    
601
                        Dim dConn1Pos_x As Double = 0.0
602
                        Dim dConn1Pos_y As Double = 0.0
603
                        Dim dConn2Pos_x As Double = 0.0
604
                        Dim dConn2Pos_y As Double = 0.0
605
                        Dim dConn3Pos_x As Double = 0.0
606
                        Dim dConn3Pos_y As Double = 0.0
607
                        Dim dConn4Pos_x As Double = 0.0
608
                        Dim dConn4Pos_y As Double = 0.0
609

    
610
                        Dim dDwg_Conn1Pos_x As Double = 0.0
611
                        Dim dDwg_Conn1Pos_y As Double = 0.0
612
                        Dim dDwg_Conn2Pos_x As Double = 0.0
613
                        Dim dDwg_Conn2Pos_y As Double = 0.0
614
                        Dim dDwg_Conn3Pos_x As Double = 0.0
615
                        Dim dDwg_Conn3Pos_y As Double = 0.0
616
                        Dim dDwg_Conn4Pos_x As Double = 0.0
617
                        Dim dDwg_Conn4Pos_y As Double = 0.0
618

    
619
                        oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
620
                        sUid = oEleObj.Value
621
                        oEleObj = oSymbol.Element(_XML_SYMBOL_PARENT)
622
                        sName = oEleObj.Value
623
                        oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
624
                        sLocation = oEleObj.Value
625
                        oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
626
                        sSize = oEleObj.Value
627
                        oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
628
                        sAngle = oEleObj.Value
629
                        oEleObj = oSymbol.Element(_XML_SYMBOL_CONNECTIONPOINT)
630
                        sConnectionPoint = oEleObj.Value
631
                        oEleObj = oSymbol.Element(_XML_SYMBOL_CHILD)
632
                        sChild = oEleObj.Value
633
                        Try
634
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
635
                            sOriginalPoint = oEleObj.Value
636
                        Catch ex As Exception
637

    
638
                        End Try
639
                        'oEleObj = oSymbol.Element(_XML_LINE_CONNS)
640
                        'sConnectionUids = oEleObj.Value
641
                        'sConnArray = sConnectionUids.Split(",")
642
                        'If sConnArray.Length > 4 Then
643
                        '    MessageBox.Show(sConnArray.Length)
644
                        'End If
645
                        'For i = 0 To sConnArray.Length - 1
646
                        '    If i = 0 Then
647
                        '        oAddrow(_XML_SYMBOL_Conn1_Uid) = sConnArray(i)
648
                        '    ElseIf i = 1 Then
649
                        '        oAddrow(_XML_SYMBOL_Conn2_Uid) = sConnArray(i)
650
                        '    ElseIf i = 2 Then
651
                        '        oAddrow(_XML_SYMBOL_Conn3_Uid) = sConnArray(i)
652
                        '    ElseIf i = 3 Then
653
                        '        oAddrow(_XML_SYMBOL_Conn4_Uid) = sConnArray(i)
654
                        '    End If
655
                        'Next
656
                        oAddrow(_XML_SYMBOL_Conn1_Uid) = ""
657
                        oAddrow(_XML_SYMBOL_Conn2_Uid) = ""
658
                        oAddrow(_XML_SYMBOL_Conn3_Uid) = ""
659
                        oAddrow(_XML_SYMBOL_Conn4_Uid) = ""
660
                        ConvertPointBystring(sOriginalPoint, dCenterPos_x, dCenterPos_y)
661
                        dDwgCenterPos_x = dCenterPos_x
662
                        dDwgCenterPos_y = dCenterPos_y
663
                        ConvertPointByImage(dDwgCenterPos_x, dDwgCenterPos_y, _IMG_X, _IMG_Y)
664

    
665
                        oAddrow(_XML_SYMBOL_CENTERPOINT_X) = dCenterPos_x
666
                        oAddrow(_XML_SYMBOL_CENTERPOINT_Y) = dCenterPos_y
667
                        oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_X) = dDwgCenterPos_x
668
                        oAddrow(_XML_SYMBOL_DWG_CENTERPOINT_Y) = dDwgCenterPos_y
669
                        sConnArray = sConnectionPoint.Split("/")
670
                        sSizeArray = sSize.Split(",")
671
                        sLocationArray = sLocation.Split(",")
672
                        If sConnArray.Length > 4 Then
673
                            MessageBox.Show(sConnArray.Length)
674
                        End If
675
                        For i = 0 To sConnArray.Length - 1
676
                            If i = 0 Then
677
                                oAddrow(_XML_SYMBOL_Conn1_Point) = sConnArray(i)
678
                                ConvertPointBystring(sConnArray(i), dConn1Pos_x, dConn1Pos_y)
679
                                dDwg_Conn1Pos_x = dConn1Pos_x
680
                                dDwg_Conn1Pos_y = dConn1Pos_y
681
                                ConvertPointByImage(dDwg_Conn1Pos_x, dDwg_Conn1Pos_y, _IMG_X, _IMG_Y)
682

    
683
                                oAddrow(_XML_SYMBOL_CONN1_POINT_X) = dConn1Pos_x
684
                                oAddrow(_XML_SYMBOL_CONN1_POINT_Y) = dConn1Pos_y
685
                                oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_X) = dDwg_Conn1Pos_x
686
                                oAddrow(_XML_SYMBOL_DWG_CONN1_POINT_Y) = dDwg_Conn1Pos_y
687
                            ElseIf i = 1 Then
688
                                oAddrow(_XML_SYMBOL_Conn2_Point) = sConnArray(i)
689
                                ConvertPointBystring(sConnArray(i), dConn2Pos_x, dConn2Pos_y)
690
                                dDwg_Conn2Pos_x = dConn2Pos_x
691
                                dDwg_Conn2Pos_y = dConn2Pos_y
692
                                ConvertPointByImage(dDwg_Conn2Pos_x, dDwg_Conn2Pos_y, _IMG_X, _IMG_Y)
693
                                oAddrow(_XML_SYMBOL_CONN2_POINT_X) = dConn2Pos_x
694
                                oAddrow(_XML_SYMBOL_CONN2_POINT_Y) = dConn2Pos_y
695
                                oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_X) = dDwg_Conn2Pos_x
696
                                oAddrow(_XML_SYMBOL_DWG_CONN2_POINT_Y) = dDwg_Conn2Pos_y
697
                            ElseIf i = 2 Then
698
                                oAddrow(_XML_SYMBOL_Conn3_Point) = sConnArray(i)
699
                                ConvertPointBystring(sConnArray(i), dConn3Pos_x, dConn3Pos_y)
700
                                dDwg_Conn3Pos_x = dConn3Pos_x
701
                                dDwg_Conn3Pos_y = dConn3Pos_y
702
                                ConvertPointByImage(dDwg_Conn3Pos_x, dDwg_Conn3Pos_y, _IMG_X, _IMG_Y)
703
                                oAddrow(_XML_SYMBOL_CONN3_POINT_X) = dConn3Pos_x
704
                                oAddrow(_XML_SYMBOL_CONN3_POINT_Y) = dConn3Pos_y
705
                                oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_X) = dDwg_Conn3Pos_x
706
                                oAddrow(_XML_SYMBOL_DWG_CONN3_POINT_Y) = dDwg_Conn3Pos_y
707
                            ElseIf i = 3 Then
708
                                oAddrow(_XML_SYMBOL_Conn4_Point) = sConnArray(i)
709
                                ConvertPointBystring(sConnArray(i), dConn4Pos_x, dConn4Pos_y)
710
                                dDwg_Conn4Pos_x = dConn4Pos_x
711
                                dDwg_Conn4Pos_y = dConn4Pos_y
712
                                ConvertPointByImage(dDwg_Conn4Pos_x, dDwg_Conn4Pos_y, _IMG_X, _IMG_Y)
713
                                oAddrow(_XML_SYMBOL_CONN4_POINT_X) = dConn4Pos_x
714
                                oAddrow(_XML_SYMBOL_CONN4_POINT_Y) = dConn4Pos_y
715
                                oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_X) = dDwg_Conn4Pos_x
716
                                oAddrow(_XML_SYMBOL_DWG_CONN4_POINT_Y) = dDwg_Conn4Pos_y
717
                            End If
718
                        Next
719

    
720
                        Dim sXLength As String = ""
721
                        Dim sYLength As String = ""
722

    
723
                        Dim dMin_x As Double = 0
724
                        Dim dMax_x As Double = 0
725
                        Dim dMin_y As Double = 0
726
                        Dim dMax_y As Double = 0
727

    
728
                        For i = 0 To sSizeArray.Length - 1
729
                            If i = 0 Then
730
                                sXLength = sSizeArray(i)
731
                            ElseIf i = 1 Then
732
                                sYLength = sSizeArray(i)
733
                            End If
734
                        Next
735

    
736
                        For i = 0 To sLocationArray.Length - 1
737
                            If i = 0 Then
738
                                dMin_x = sLocationArray(i)
739
                                dMax_x = dMin_x + sXLength
740
                            ElseIf i = 1 Then
741
                                'Y축은 반전
742
                                dMax_y = sLocationArray(i)
743
                                dMin_y = dMax_y + sYLength
744
                            End If
745
                        Next
746
                        ConvertPointByImage(dMin_x, dMin_y, _IMG_X, _IMG_Y)
747
                        ConvertPointByImage(dMax_x, dMax_y, _IMG_X, _IMG_Y)
748

    
749
                        oAddrow(_XML_SYMBOL_MIN_X) = dMin_x
750
                        oAddrow(_XML_SYMBOL_MAX_X) = dMax_x
751
                        oAddrow(_XML_SYMBOL_MIN_Y) = dMin_y
752
                        oAddrow(_XML_SYMBOL_MAX_Y) = dMax_y
753
                        oAddrow(_XML_SYMBOL_UID) = sUid
754
                        oAddrow(_XML_LINE_LINENOUID) = CLineNo.Uid
755
                        oAddrow(_XML_SYMBOL_RUNNAME) = sRunName
756
                        oAddrow(_XML_LINENO_TEXT) = CLineNo.Text
757
                        oAddrow(_XML_SYMBOL_NAME) = IO.Path.GetFileNameWithoutExtension(GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME))
758
                        oAddrow(_XML_SYMBOL_LOCATION) = sLocation
759
                        oAddrow(_XML_SYMBOL_SIZE) = sSize
760
                        oAddrow(_XML_SYMBOL_ANGLE) = sAngle
761
                        oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
762
                        oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
763
                        oAddrow(_XML_SYMBOL_CLASS) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_CLASS)
764
                        oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
765

    
766
                        oAddrow(_XML_SYMBOL_CONNECTIONPOINT) = sConnectionPoint
767
                        oAddrow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
768
                        oAddrow(_XML_SYMBOL_CHILD) = sChild
769
                        '   _AllSymbol_DT.Rows.Add(oAddrow)
770
                        oSymbol_Dt.Rows.Add(oAddrow)
771
                    Catch ex As Exception
772
                    End Try
773
                Next
774

    
775
                For Each oAtrribute As Object In oRun.Elements(_XML_CATEGORY_ATTRIBUTE)
776
                    Try
777
                        Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
778
                        Dim oEleObj As XElement
779
                        Dim sUid As String
780
                        Dim sName As String
781
                        Dim sValue As String
782
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
783
                        sUid = oEleObj.Value
784
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
785
                        sName = oEleObj.Value
786
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
787
                        sValue = oEleObj.Value
788
                        oAddrow(_XML_ATTRIBUTE_UID) = sUid
789
                        oAddrow(_XML_ATTRIBUTE_NAME) = sName
790
                        oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
791
                        oAttribute_Dt.Rows.Add(oAddrow)
792
                    Catch ex As Exception
793
                    End Try
794
                Next
795
            Next
796
            'Line No Attribute
797
            For Each oAtrribute As Object In oLineNo.Elements(_XML_CATEGORY_ATTRIBUTE)
798
                Try
799
                    Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
800
                    Dim oEleObj As XElement
801
                    Dim sUid As String = ""
802
                    Dim sName As String
803
                    Dim sValue As String
804

    
805
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
806
                    sUid = oEleObj.Value
807
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
808
                    sName = oEleObj.Value
809
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
810
                    sValue = oEleObj.Value
811
                    oAddrow(_XML_ATTRIBUTE_UID) = sUid
812
                    oAddrow(_XML_ATTRIBUTE_NAME) = sName
813
                    oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
814
                    oAttribute_Dt.Rows.Add(oAddrow)
815
                Catch ex As Exception
816
                End Try
817
            Next
818
            SetConnectionInfo(oLine_Dt, oSymbol_Dt)
819
            _AllLine_DT.Merge(oLine_Dt)
820
            _AllSymbol_DT.Merge(oSymbol_Dt)
821
            CLineNo.Dt_Line = oLine_Dt
822
            CLineNo.Dt_Symbol = oSymbol_Dt
823
            CLineNo.Dt_Attribute = oAttribute_Dt
824
            oLineno_list.Add(CLineNo)
825
        Next
826
        Return oLineno_list
827
    End Function
828

    
829
    Private Sub ConvertPointByImage(ByRef dX As Double, ByRef dY As Double, ByVal dDwgX As Double, ByVal dDwgY As Double)
830

    
831
        Dim calcx As Double = 0
832
        Dim calcy As Double = 0
833
        calcx = (dX * _DWG_X) / dDwgX 'Math.Round((dX * _DWG_X) / dDwgX, 2)
834
        'calcx = Math.Round(calcx, 4, MidpointRounding.)
835
        calcx = Math.Truncate(calcx * 1000) / 1000
836
        calcy = _DWG_Y - ((dY * _DWG_Y) / dDwgY) '_DWG_Y - Math.Round((dY * _DWG_Y) / dDwgY, 2)
837
        '   calcy = Math.Round(calcy, 4)
838
        calcy = Math.Truncate(calcy * 1000) / 1000
839
        dX = calcx
840
        dY = calcy
841
    End Sub
842
    '@brief Convert To SPPID
843
    '@author : Gyusu Park
844
    '@date : 2018-04-10
845
    '@history:
846
    Private Sub SplitLocation(ByVal sLocation As String, ByRef dX As Double, ByRef dY As Double)
847

    
848
        Dim opointstr As String() = Split(sLocation, ",")
849
        If (opointstr.Length > 1) Then
850
            If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
851
                dX = opointstr(0)
852
                dY = opointstr(1)
853
            End If
854
        End If
855

    
856
    End Sub
857

    
858
    Private Function Load_DB(ByVal sDBPath As String, ByVal sTableName As String) As DataTable
859

    
860
        Try
861
            Dim oDt As New DataTable
862
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
863
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
864
            conn.Open()
865
            Dim sQuery As String = "Select * from " & sTableName
866
            Dim cmd As SQLiteCommand = conn.CreateCommand()
867
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
868
            Dim oDataSet As DataSet = New DataSet()
869
            adapter.Fill(oDataSet)
870
            oDt = oDataSet.Tables(0)
871
            Return oDt
872
        Catch ex As Exception
873
            Return Nothing
874
        End Try
875
    End Function
876

    
877
    Private Function LoadAllDrawing() As DataTable
878
        SetListBoxItems(ListBox_Result, "도면정보 로드중....")
879
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "도면정보 로드중....")
880
        Dim oDt As DataTable = Drawing_Dt()
881
        Dim sHierarchy As String = My.Settings.Plant_Hierarchy
882
        Dim files() As String
883
        files = Directory.GetFiles(sHierarchy, "*.pid", SearchOption.AllDirectories)
884
        For Each FileName As String In files
885
            Dim sName As String = FileName
886
            Dim oAddRow As DataRow = oDt.NewRow()
887
            oAddRow("Name") = Path.GetFileNameWithoutExtension(sName)
888
            oAddRow("Path") = FileName
889
            oDt.Rows.Add(oAddRow)
890
        Next
891
        Return oDt
892
    End Function
893

    
894
    Dim _XMLList As ListView = New ListView()
895

    
896
    Private Function CheckOpenDrawing() As Boolean
897
        Try
898

    
899
            Dim lobjDatasource As Object
900
            _Placement = CreateObject("Plaice.Placement", "")
901
            lobjDatasource = _Placement.PIDDataSource
902
            Return True
903
        Catch ex As Exception
904
            Return False
905
        End Try
906

    
907
    End Function
908

    
909

    
910
    Private Sub Btn_Convert_Click(sender As Object, e As EventArgs) Handles Btn_Convert.Click
911

    
912
        Main_Tab.SelectedIndex = 1
913
        ListBox_Result.Items.Clear()
914
        Me.ProgressBar_Status.Visible = True
915
        ProgressBar_Status.Maximum = 100
916
        ProgressBar_Status.Value = 0
917
        InitItemCount()
918
        _Main_trd = New Thread(AddressOf ThreadConvert)
919
        _Main_trd.IsBackground = True
920
        _Main_trd.Start()
921
        FineOPCForm()
922
    End Sub
923

    
924
    Private Sub FineOPCForm()
925
        _Opc_trd = New Thread(AddressOf ThreadOPCRemove)
926
        _Opc_trd.IsBackground = True
927
        _Opc_trd.Start()
928
    End Sub
929

    
930

    
931
    Dim _objPIDAutoApp As Object
932

    
933
    Private Function OpenSPPID(ByVal oDwg_Dt As DataTable, ByVal sDwgName As String) As Boolean
934
        Dim bCheckOpen As Boolean = False
935
        '   Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgPath)
936
        SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
937
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, sDwgName & " 도면 Open....")
938
        _objPIDAutoApp = CreateObject("PIDAutomation.Application")
939

    
940
        Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
941
        If sPath <> "" Then
942
            Process.Start(sPath)
943
        Else
944
            Return bCheckOpen
945
        End If
946

    
947
        Dim bCheckOpenDrawing As Boolean = False
948
        While (True)
949
            bCheckOpenDrawing = CheckOpenDrawing()
950
            If bCheckOpenDrawing = True Then
951
                bCheckOpen = True
952
                Exit While
953
            Else
954
                Thread.Sleep(2000)
955
            End If
956
        End While
957

    
958

    
959
        Return bCheckOpen
960
    End Function
961

    
962
    Private Function GetDrawing(ByVal sDwgName As String) As Drawing
963
        For Each CDrawing In _DrawingsList
964
            If CDrawing.DwgName.ToUpper() = sDwgName.ToUpper() Then
965
                Return CDrawing
966
            End If
967
        Next
968
        Return Nothing
969
    End Function
970

    
971
    Private Function GetLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
972
        For Each CLineNo In CDrawing.Line_nos
973
            If CLineNo.Uid = sLineNoUid Then
974
                Return CLineNo
975
            End If
976
        Next
977
        Return Nothing
978
    End Function
979

    
980
    Private Function GetTrimLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
981
        For Each CLineNo In CDrawing.TrimLine_nos
982
            If CLineNo.Uid = sLineNoUid Then
983
                Return CLineNo
984
            End If
985
        Next
986
        Return Nothing
987
    End Function
988

    
989

    
990

    
991
    Private Function GetPipeFromConnection(ByVal CDrawing As Drawing, ByVal sSymbolUid As String, ByRef sConnTypeNo As String) As DataTable
992
        For Each CLineNo In CDrawing.Line_nos
993
            Dim odt As DataTable = CLineNo.Dt_Line
994
            If odt.Rows.Count > 0 Then
995
                If odt.Rows(0)(_XML_LINE_Conn1_Uid).ToString = sSymbolUid Then
996
                    sConnTypeNo = "1"
997
                    Return odt
998
                ElseIf odt.Rows(0)(_XML_LINE_Conn2_Uid).ToString() = sSymbolUid Then
999
                    sConnTypeNo = "2"
1000
                    Return odt
1001
                End If
1002
            End If
1003
        Next
1004
        Return New DataTable
1005
    End Function
1006

    
1007
    Private Function GetSymbolFromConnection(ByVal CDrawing As Drawing, ByVal sSymbolUid As String, ByRef sConnTypeNo As String) As DataTable
1008
        For Each CLineNo In CDrawing.Line_nos
1009
            Dim odt As DataTable = CLineNo.Dt_Symbol
1010
            If odt.Rows.Count > 0 Then
1011
                If odt.Rows(0)(_XML_SYMBOL_Conn1_Uid).ToString = sSymbolUid Then
1012
                    sConnTypeNo = "1"
1013
                    Return odt
1014
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn2_Uid).ToString() = sSymbolUid Then
1015
                    sConnTypeNo = "2"
1016
                    Return odt
1017
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn3_Uid).ToString() = sSymbolUid Then
1018
                    sConnTypeNo = "3"
1019
                    Return odt
1020
                ElseIf odt.Rows(0)(_XML_SYMBOL_Conn4_Uid).ToString() = sSymbolUid Then
1021
                    sConnTypeNo = "4"
1022
                    Return odt
1023
                End If
1024
            End If
1025
        Next
1026
        Return New DataTable
1027
    End Function
1028

    
1029
    Private Function GetEqpNo(ByVal CDrawing As Drawing, ByVal sEqpUid As String) As Eqp_no
1030
        For Each CEqpNo In CDrawing.Eqp_nos
1031
            If CEqpNo.Uid = sEqpUid Then
1032
                Return CEqpNo
1033
            End If
1034
        Next
1035
        Return Nothing
1036
    End Function
1037
    Private Function ConvertPointBystring(ByVal sPoint As String, ByRef dX As Double, ByRef dY As Double) As Boolean
1038
        Try
1039
            Dim opointstr As String() = Split(sPoint, ",")
1040
            If (opointstr.Length > 1) Then
1041
                If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
1042
                    dX = opointstr(0)
1043
                    dY = opointstr(1)
1044

    
1045
                Else
1046
                    dX = 0
1047
                    dY = 0
1048
                    Return False
1049
                End If
1050
            End If
1051
            Return True
1052
        Catch ex As Exception
1053
            Return False
1054
        End Try
1055
    End Function
1056

    
1057

    
1058
    Dim _DrawLine_Dt As DataTable = DrawLind_Dt()
1059

    
1060

    
1061
    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)
1062
        Dim oAddRow = _DrawLine_Dt.NewRow()
1063
        oAddRow(_XML_LINE_UID) = sUid
1064
        oAddRow(_XML_LINE_STARTPOINT_X) = dStart_x
1065
        oAddRow(_XML_LINE_STARTPOINT_Y) = dStart_y
1066
        oAddRow(_XML_LINE_ENDPOINT_X) = dEnd_x
1067
        oAddRow(_XML_LINE_ENDPOINT_Y) = dEnd_y
1068
        _DrawLine_Dt.Rows.Add(oAddRow)
1069
    End Sub
1070

    
1071
    Private Sub PlaceEquipment(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sEqpName As String)
1072
        Try
1073
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1074
            Dim oAttributeRow() As DataRow
1075
            If oAttribute_Dt.Rows.Count > 0 Then
1076
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1077
            End If
1078
            If oSymbolRow.Length > 0 Then
1079
                Dim oDatasource As Object = _Placement.PIDDataSource
1080
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1081
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1082
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1083
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1084
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1085
                Dim dAngle As Double = 0.0
1086
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1087
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1088
                End If
1089
                Dim dLocationX As Double = 0.0
1090
                Dim dLocationY As Double = 0.0
1091
                Dim dX As Double = 0.0
1092
                Dim dY As Double = 0.0
1093

    
1094
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1095
                    dX = dLocationX
1096
                    dY = dLocationY
1097
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1098
                    _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1099
                    SetListBoxItems(ListBox_Result, "Place Equipment.." & sUid & " (" & dLocationX & "," & dLocationY & ")..." & _iEquipmentcnt & " count ")
1100
                    _iEquipmentcnt = _iEquipmentcnt + 1
1101
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Equipment : " & sUid)
1102
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Equipment Name : " & sEqpName)
1103
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1104
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
1105
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Equipment Count : " & _iEquipmentcnt)
1106
                End If
1107
            End If
1108
        Catch ex As Exception
1109
        End Try
1110
    End Sub
1111

    
1112
    Private Function PlacePipingOPC(ByVal sUid As String, ByVal oOPCRow As DataRow, ByVal oAttribute_Dt As DataTable, ByVal sLineNoText As String) As LMSymbol
1113
        Try
1114
            Dim oAttributeRow() As DataRow
1115
            If oAttribute_Dt.Rows.Count > 0 Then
1116
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1117
            End If
1118
            Dim oDatasource As Object = _Placement.PIDDataSource
1119
            Dim sSymbolCompType As String = oOPCRow(_XML_SYMBOL_TYPE).ToString()
1120
            Dim sSystemPath As String = oOPCRow(_XML_SYMBOL_SYSTEMPATH).ToString()
1121
            Dim sClass As String = oOPCRow(_XML_SYMBOL_CLASS).ToString()
1122
            Dim sLocation As String = oOPCRow(_XML_SYMBOL_LOCATION).ToString()
1123
            Dim sOriginalPoint As String = oOPCRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
1124
            Dim dAngle As Double = 0.0
1125
            If IsNumeric(oOPCRow(_XML_SYMBOL_ANGLE).ToString()) Then
1126
                dAngle = Double.Parse(oOPCRow(_XML_SYMBOL_ANGLE).ToString())
1127
            End If
1128

    
1129
            Dim dLocationX As Double = 0.0
1130
            Dim dLocationY As Double = 0.0
1131
            Dim dX As Double = 0.0
1132
            Dim dY As Double = 0.0
1133
            Dim oLMSymbol As LMSymbol = Nothing
1134
            If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1135
                dX = dLocationX
1136
                dY = dLocationY
1137
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1138
                _iPipintOpccnt = _iPipintOpccnt + 1
1139
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1140
                '모델링된 형상은 Drawing True 로 처리
1141
                oOPCRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
1142
                SetListBoxItems(ListBox_Result, "Place Piping OPC.." & sUid & " (" & dLocationX & "," & dLocationY & ")..." & _iPipintOpccnt & " count ")
1143
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Piping OPC : " & sUid & "")
1144
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
1145
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oOPCRow(_XML_SYMBOL_Conn1_Uid).ToString())
1146
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oOPCRow(_XML_SYMBOL_Conn2_Uid).ToString())
1147
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1148
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
1149
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OPC Count : " & _iPipintOpccnt)
1150

    
1151
                Dim dConn_X1 As Double, dConn_Y1 As Double, dConn_X2 As Double, dConn_Y2 As Double
1152
                _Placement.PIDConnectPointLocation(oLMSymbol, 1, dConn_X1, dConn_Y1)
1153
                _Placement.PIDConnectPointLocation(oLMSymbol, 2, dConn_X2, dConn_Y2)
1154

    
1155
                'Dim oAddrow As DataRow = _ResultModeling_DT.NewRow()
1156
                'oAddrow(_Modeling_Uid) = sUid
1157
                'oAddrow(_Modeling_Location_X) = dLocationX
1158
                'oAddrow(_Modeling_Location_Y) = dLocationY
1159
                'oAddrow(_Modeling_LineNoUid) = sLineUid
1160
                'oAddrow(_Modeling_Type) = sSymbolCompType
1161
                'oAddrow(_Modeling_Connection1_X) = dConn_X1
1162
                'oAddrow(_Modeling_Connection1_Y) = dConn_Y1
1163
                'oAddrow(_Modeling_Connection2_X) = dConn_X2
1164
                'oAddrow(_Modeling_Connection2_X) = dConn_Y2
1165
                'oAddrow(_Modeling_LMSymbol) = oLMSymbol
1166

    
1167
                '_ResultModeling_DT.Rows.Add(oAddrow)
1168
            End If
1169
            _Itemcnt = _Itemcnt + 1
1170
            Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1171
            SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1172
            Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1173
            Return oLMSymbol
1174
        Catch ex As Exception
1175

    
1176
        End Try
1177
        Return Nothing
1178

    
1179
    End Function
1180

    
1181
    Private Sub AddProgress()
1182
        _Itemcnt = _Itemcnt + 1
1183
        Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1184
        SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1185
        Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1186
    End Sub
1187
    Private Function DrawSymbol(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal oLine_Dt As DataTable) As Boolean
1188
        Try
1189

    
1190
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1191
            Dim oAttributeRow() As DataRow
1192
            If oAttribute_Dt.Rows.Count > 0 Then
1193
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1194
            End If
1195

    
1196
            If oSymbolRow.Length > 0 Then
1197
                Dim oDatasource As Object = _Placement.PIDDataSource
1198
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1199
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1200
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1201
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1202
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1203
                Dim dAngle As Double = 0.0
1204
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1205
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1206
                End If
1207

    
1208
                Dim objSymbol As LMSymbol
1209
                Dim dLocationX As Double = 0.0
1210
                Dim dLocationY As Double = 0.0
1211
                Dim dX As Double = 0.0
1212
                Dim dY As Double = 0.0
1213

    
1214
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1215
                    dX = dLocationX
1216
                    dY = dLocationY
1217
                    If sSymbolCompType = "" Or sSymbolCompType = "Piping OPC's" Then
1218
                        FindConnectionLine(oLine_Dt, dX, dY)
1219
                    End If
1220

    
1221
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1222
                    Dim oInstrument As LMInstrument
1223
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
1224
                        _iInstrumentcnt = _iInstrumentcnt + 1
1225
                        objSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1226
                        SetListBoxItems(ListBox_Result, "Place Instrument..(" & dLocationX & "," & dLocationY & ")..." & _iInstrumentcnt & " count ")
1227
                        oInstrument = oDatasource.GetInstrument(objSymbol.ModelItemID)
1228
                        Try
1229
                            If oAttributeRow.Length > 0 Then
1230
                                For Each oAttribute In oAttributeRow
1231
                                    Try
1232
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1233
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1234
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1235
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
1236
                                    Catch ex As Exception
1237

    
1238
                                    End Try
1239

    
1240
                                Next
1241
                                oInstrument.Commit()
1242
                            End If
1243
                        Catch ex As Exception
1244
                        End Try
1245
                    ElseIf sSymbolCompType.ToUpper() = _DB_FITTINGS.ToUpper() Then
1246
                        _iValvecnt = _iValvecnt + 1
1247
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1248
                        SetListBoxItems(ListBox_Result, "Place Valve..(" & dLocationX & "," & dLocationY & ")..." & _iValvecnt & " count ")
1249

    
1250
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_FITTINGS.ToUpper() Then
1251
                        _iFittingcnt = _iFittingcnt + 1
1252
                        If sSystemPath.Contains(",") Then
1253

    
1254
                            Dim sDuplicatePath As String() = sSystemPath.Split(",")
1255
                            Dim sMainSymbol As String = ""
1256
                            Dim sSubSymbol As String = ""
1257
                            For Each sPath In sDuplicatePath
1258
                                If sMainSymbol = "" Then
1259
                                    sMainSymbol = sPath.Replace(vbLf, "")
1260
                                Else
1261
                                    sSubSymbol = sPath.Replace(vbLf, "")
1262
                                End If
1263
                            Next
1264
                            Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1265
                            Dim dConnpos_x As Double = 0.0
1266
                            Dim dConnpos_y As Double = 0.0
1267
                            _Placement.PIDConnectPointLocation(oSymbolObj, 2, dConnpos_x, dConnpos_y)
1268
                            '   _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y, dAngle, TargetItem:=oSymbolObj.AsLMRepresentation)
1269
                            _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y,, dAngle)
1270

    
1271
                        Else
1272
                            _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1273
                        End If
1274

    
1275

    
1276
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1277
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() And sClass.ToUpper() = _SYMBOL_ACTUATORS.ToUpper() Then
1278
                        _iFittingcnt = _iFittingcnt + 1
1279
                        Dim sDuplicatePath As String() = sSystemPath.Split(",")
1280
                        Dim sMainSymbol As String = ""
1281
                        Dim sSubSymbol As String = ""
1282
                        For Each sPath In sDuplicatePath
1283
                            If sMainSymbol = "" Then
1284
                                sMainSymbol = sPath.Replace(vbLf, "")
1285
                            Else
1286
                                sSubSymbol = sPath.Replace(vbLf, "")
1287
                            End If
1288
                        Next
1289
                        Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1290
                        Dim dSymbolpos_x As Double = oSymbolObj.XCoordinate
1291
                        Dim dSymbolpos_y As Double = oSymbolObj.YCoordinate
1292
                        _Placement.PIDPlaceSymbol(sSubSymbol, dSymbolpos_x, dSymbolpos_y, , dAngle, TargetItem:=oSymbolObj.AsLMAItem)
1293

    
1294
                    Else
1295
                        _iFittingcnt = _iFittingcnt + 1
1296
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1297
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1298
                    End If
1299

    
1300
                End If
1301
                _Itemcnt = _Itemcnt + 1
1302
                Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1303
                SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1304
                Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1305
            End If
1306

    
1307
        Catch ex As Exception
1308
            Return False
1309
        End Try
1310
    End Function
1311

    
1312

    
1313
    Private Sub FindConnectionLine(ByVal oLine_Dt As DataTable, ByRef dx As Double, ByRef dy As Double)
1314

    
1315
        Try
1316
            For Each oRow In oLine_Dt.Rows
1317
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1318
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1319
                Dim d기준s_x As Double = 0
1320
                Dim d기준s_y As Double = 0
1321
                Dim d기준e_x As Double = 0
1322
                Dim d기준e_y As Double = 0
1323
                ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1324
                ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1325
                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
1326
                    dx = d기준s_x
1327
                    dy = d기준s_y
1328
                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
1329
                    dx = d기준e_x
1330
                    dy = d기준e_y
1331
                End If
1332
            Next
1333
        Catch ex As Exception
1334
        End Try
1335
    End Sub
1336

    
1337

    
1338
    Dim _라인보정기준값 As Integer = 10
1339

    
1340
    Private Function 라인보정(ByRef oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1341
                                      ByRef dex As Double, ByRef dey As Double)
1342
        Try
1343
            Dim bCheck라인 As Boolean = False
1344
            '일치하는 Line 찾기
1345
            For Each oRow In oLine_Dt.Rows
1346
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1347
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1348
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1349
                If sBUid <> sUid Then
1350
                    Dim d기준s_x As Double = 0
1351
                    Dim d기준s_y As Double = 0
1352
                    Dim d기준e_x As Double = 0
1353
                    Dim d기준e_y As Double = 0
1354
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1355
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1356

    
1357
                    If (dsx = d기준s_x And dsy = d기준s_y) Or (dsx = d기준e_x And dsy = d기준e_y) Or
1358
                       (dex = d기준s_x And dey = d기준s_y) Or (dex = d기준e_x And dey = d기준e_y) Then
1359
                        bCheck라인 = True
1360
                    End If
1361
                End If
1362
            Next
1363

    
1364
            If bCheck라인 = False Then
1365
                For Each oRow In oLine_Dt.Rows
1366
                    Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1367
                    Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1368
                    Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1369
                    If sBUid <> sUid Then
1370
                        Dim d기준s_x As Double = 0
1371
                        Dim d기준s_y As Double = 0
1372
                        Dim d기준e_x As Double = 0
1373
                        Dim d기준e_y As Double = 0
1374
                        ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1375
                        ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1376
                        If ((dsx - _라인보정기준값 <= d기준s_x And dsx + _라인보정기준값 >= d기준s_x) And (dsy - _라인보정기준값 <= d기준s_y And dsy + _라인보정기준값 >= d기준s_y)) Then
1377
                            oRow(_XML_LINE_STARTPOINT) = dsx & "," & dsy
1378
                            bCheck라인 = True
1379
                            Exit For
1380
                        ElseIf ((dsx - _라인보정기준값 <= d기준e_x And dsx + _라인보정기준값 >= d기준e_x) And (dsy - _라인보정기준값 <= d기준e_y And dsy + _라인보정기준값 >= d기준e_y)) Then
1381
                            oRow(_XML_LINE_ENDPOINT) = dsx & "," & dsy
1382
                            bCheck라인 = True
1383
                            Exit For
1384
                        ElseIf ((dex - _라인보정기준값 <= d기준s_x And dex + _라인보정기준값 >= d기준s_x) And (dey - _라인보정기준값 <= d기준s_y And dey + _라인보정기준값 >= d기준s_y)) Then
1385
                            oRow(_XML_LINE_STARTPOINT) = dex & "," & dey
1386
                            bCheck라인 = True
1387
                            Exit For
1388
                        ElseIf ((dex - _라인보정기준값 <= d기준e_x And dex + _라인보정기준값 >= d기준e_x) And (dey - _라인보정기준값 <= d기준e_y And dey + _라인보정기준값 >= d기준e_y)) Then
1389
                            oRow(_XML_LINE_ENDPOINT) = dex & "," & dey
1390
                            bCheck라인 = True
1391
                            Exit For
1392
                        End If
1393

    
1394
                    End If
1395
                Next
1396
            End If
1397

    
1398
            Return bCheck라인
1399
        Catch ex As Exception
1400
            Return False
1401
        End Try
1402

    
1403

    
1404
    End Function
1405

    
1406
    Private Function FindOverlapLine(ByVal oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1407
                                      ByRef dex As Double, ByRef dey As Double)
1408
        Try
1409
            Dim bCheckOverlap As Boolean = False
1410
            For Each oRow In oLine_Dt.Rows
1411
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1412
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1413
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1414
                If sBUid <> sUid Then
1415
                    Dim d기준s_x As Double = 0
1416
                    Dim d기준s_y As Double = 0
1417
                    Dim d기준e_x As Double = 0
1418
                    Dim d기준e_y As Double = 0
1419
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1420
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1421
                    If (d기준s_x <= dsx And d기준e_x >= dex And
1422
                        d기준s_y <= dsy And d기준e_y >= dey) Then
1423
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1424
                        If dsy - d기준s_y > d기준e_y - dey Then
1425
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1426
                            If dResultCalc < 10 Then
1427
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1428
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1429
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1430
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1431
                                If dCalcStartY = 0 Then
1432
                                    dey = d기준e_y
1433
                                Else
1434
                                    dey = dCalcStartY
1435
                                End If
1436
                            End If
1437
                        Else
1438
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1439
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1440
                            If dResultCalc < 10 Then
1441
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1442
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1443
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1444
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1445
                                If dCalcStartY = 0 Then
1446
                                    dsy = d기준s_y
1447
                                Else
1448
                                    dsy = dCalcStartY
1449
                                End If
1450
                            End If
1451
                        End If
1452
                        bCheckOverlap = True
1453
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1454
                            d기준s_y <= dey And d기준e_y >= dsy Then
1455
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1456
                        If dey - d기준s_y > d기준e_y - dsy Then
1457
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1458
                            If dResultCalc < 10 Then
1459
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1460
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1461
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1462
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1463
                                If dCalcStartY = 0 Then
1464
                                    dsy = d기준e_y
1465
                                Else
1466
                                    dsy = dCalcStartY
1467
                                End If
1468

    
1469
                            End If
1470
                            '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1471
                        Else
1472
                            '  Dim dResultCalc As Double = (Math.Abs((dsy - d기준s_y)) / Math.Abs((d기준e_y - dey))) * 100
1473
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1474
                            If dResultCalc < 10 Then
1475
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1476
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1477
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1478
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1479
                                If dCalcStartY = 0 Then
1480
                                    dey = d기준e_y
1481
                                Else
1482
                                    dey = dCalcStartY
1483
                                End If
1484
                            End If
1485
                        End If
1486
                        bCheckOverlap = True
1487
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1488
                            d기준s_y <= dey And d기준e_y >= dsy Then
1489

    
1490
                        If dsx - d기준s_x > d기준e_x - dex Then
1491
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1492
                            If dResultCalc < 10 Then
1493
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1494
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1495
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1496
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1497
                                If dCalcStartX = 0 Then
1498
                                    dex = d기준e_x
1499
                                Else
1500
                                    dex = dCalcStartX
1501
                                End If
1502
                            End If
1503
                        Else
1504
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1505
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1506
                            If dResultCalc < 10 Then
1507
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1508
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1509
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1510
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1511
                                If dCalcStartX = 0 Then
1512
                                    dsx = d기준s_x
1513
                                Else
1514
                                    dsx = dCalcStartX
1515
                                End If
1516
                            End If
1517
                        End If
1518
                        bCheckOverlap = True
1519
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1520
                            d기준s_y <= dey And d기준e_y >= dsy Then
1521

    
1522
                        If dex - d기준s_x > d기준e_x - dsx Then
1523
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1524
                            If dResultCalc < 10 Then
1525
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1526
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1527
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1528
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1529
                                If dCalcStartX = 0 Then
1530
                                    dsx = d기준e_x
1531
                                Else
1532
                                    dsx = dCalcStartX
1533
                                End If
1534
                            End If
1535
                        Else
1536
                            ' Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1537
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1538
                            If dResultCalc < 10 Then
1539
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1540
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1541
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1542
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1543
                                If dCalcStartX = 0 Then
1544
                                    dex = d기준s_x
1545
                                Else
1546
                                    dex = dCalcStartX
1547
                                End If
1548
                            End If
1549

    
1550
                        End If
1551
                        bCheckOverlap = True
1552
                    End If
1553
                End If
1554
            Next
1555

    
1556
            Return bCheckOverlap
1557
        Catch ex As Exception
1558
            Return False
1559
        End Try
1560
    End Function
1561

    
1562
    Private Sub CalcSperateLine(ByRef dStartX As Double, ByRef dStartY As Double,
1563
                                      ByRef dEndX As Double, ByRef dEndY As Double)
1564
        Try
1565
            Dim dRange As Double = 1 'Line 전체 길이의 10%씩 늘이기
1566
            If Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
1567
                Dim dCalc_x As Double = Math.Abs(dStartX - dEndX) * 0.1
1568
                If dStartX > dEndX Then
1569
                    dStartX = dStartX + dCalc_x
1570
                    dEndX = dEndX - dCalc_x
1571
                Else
1572
                    dEndX = dEndX + dCalc_x
1573
                    dStartX = dStartX - dCalc_x
1574
                End If
1575
            Else
1576
                Dim dCalc_y As Double = Math.Abs(dStartY - dEndY) * 0.1
1577
                If dStartY > dEndY Then
1578
                    dStartY = dStartY + dCalc_y
1579
                    dEndY = dEndY - dCalc_y
1580
                Else
1581
                    dEndY = dEndY + dCalc_y
1582
                    dStartY = dStartY - dCalc_y
1583
                End If
1584
            End If
1585

    
1586
        Catch ex As Exception
1587

    
1588
        End Try
1589

    
1590

    
1591
    End Sub
1592

    
1593
    Private Function DrawLineNo(ByVal oPipeRun_Dt As DataTable, ByVal CLine_No As Line_no) As Boolean
1594
        Try
1595
            Dim oDatasource As Object = _Placement.PIDDataSource
1596
            Dim sLocation = CLine_No.Location
1597
            Dim dLocationx As Double = 0.0
1598
            Dim dLocationy As Double = 0.0
1599
            Dim dX As Double = 0.0
1600
            Dim dY As Double = 0.0
1601
            If ConvertPointBystring(sLocation, dLocationx, dLocationy) Then
1602
                dX = dLocationx
1603
                dY = dLocationy
1604
                For Each oRow In oPipeRun_Dt.Rows
1605
                    Dim dStartx As Double = Double.Parse(oRow("startx").ToString())
1606
                    Dim dStarty As Double = Double.Parse(oRow("starty").ToString())
1607
                    Dim dEndx As Double = Double.Parse(oRow("endx").ToString())
1608
                    Dim dEndy As Double = Double.Parse(oRow("endy").ToString())
1609
                    Dim dStartSum As Double = Math.Abs(dStartx - dLocationx) + Math.Abs(dStarty - dLocationy)
1610
                    Dim dEndSum As Double = Math.Abs(dEndx - dLocationx) + Math.Abs(dEndy - dLocationy)
1611
                    If dStartSum > dEndSum Then
1612
                        oRow("value") = dEndSum
1613
                    Else
1614
                        oRow("value") = dStartSum
1615
                    End If
1616
                Next
1617
                Dim dataView As New DataView(oPipeRun_Dt)
1618
                dataView.Sort = " value asc"
1619
                Dim oDt As DataTable = dataView.ToTable()
1620
                If oDt.Rows.Count > 0 Then
1621
                    Try
1622
                        Dim oPiperun As LMPipeRun = CType(oDt.Rows(0)("Piperun"), LMPipeRun)
1623
                        ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1624
                        Dim dLineNoLocation(2) As Double
1625
                        dLineNoLocation(1) = dX
1626
                        dLineNoLocation(2) = dY
1627
                        'Label
1628
                        Dim sSystemPath As String = CLine_No.SystemPath
1629
                        Dim dAngle As Double = CLine_No.Angle
1630
                        Dim labelpersist As LMLabelPersist
1631
                        For Each representation In oPiperun.Representations
1632
                            If representation.RepresentationType = "Connector" Then
1633
                                labelpersist = _Placement.PIDPlaceLabel(sSystemPath,
1634
                                dLineNoLocation,, dAngle, LabeledItem:=representation)
1635
                                _iPipeLineNocnt = _iPipeLineNocnt + 1
1636
                                SetListBoxItems(ListBox_Result, "Place PipeLineNo Label.." & CLine_No.Uid & " (" & dLocationx & "," & dLocationy & ")..." & _iPipeLineNocnt & " count ")
1637
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & CLine_No.Uid & "")
1638
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & CLine_No.Text)
1639
                                'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
1640
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Origina lPoint : " & dLocationx & "," & dLocationy)
1641
                                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "PipeLineNo Count : " & _iPipeLineNocnt)
1642
                            End If
1643
                        Next
1644
                    Catch ex As Exception
1645
                    End Try
1646
                End If
1647
                Return True
1648
            Else
1649
                Return False
1650
            End If
1651
        Catch ex As Exception
1652
            Return False
1653
        End Try
1654
    End Function
1655

    
1656

    
1657
    Private Sub InitItemCount()
1658
        _iPipeLineNocnt = 0
1659
        _iPipecnt = 1
1660
        _iFittingcnt = 1
1661
        _iValvecnt = 0
1662
        _iInstrumentcnt = 0
1663
        _iEquipmentcnt = 0
1664
        _iNozzlecnt = 1
1665
        _iPipintOpccnt = 0
1666
    End Sub
1667

    
1668
    Private Function GetAllCheckNodeCount() As Integer
1669
        _allItem = 0
1670
        For i = 0 To Tree_Result.Nodes.Count - 1
1671
            For j = 0 To Tree_Result.Nodes(i).Nodes.Count - 1
1672
                For k = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes.Count - 1
1673
                    For l = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes.Count - 1
1674
                        If Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes(l).Checked = True Then
1675
                            _allItem = _allItem + 1
1676
                        End If
1677
                    Next
1678
                Next
1679
            Next
1680
        Next
1681
        Return _allItem
1682
    End Function
1683

    
1684

    
1685
    ''' <summary>
1686
    ''' Equipment 모델링
1687
    ''' </summary>
1688
    Private Sub EquipmentModeling(ByVal oDwg_Dt As DataTable)
1689
        For Each oDrwing As TreeNode In Tree_Result.Nodes
1690
            For Each oDwgNode As TreeNode In oDrwing.Nodes
1691
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
1692
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
1693
                If CDrawing IsNot Nothing Then
1694
                    If OpenSPPID(oDwg_Dt, oDwgNode.Text) Then
1695

    
1696
                        For Each oNode As TreeNode In oDwgNode.Nodes
1697
                            Dim iItemcnt As Integer = 0
1698
                            Dim sNodeUid As String = oNode.Name
1699
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
1700
                            '1.Equipment
1701
                            '2.Piping OPC
1702
                            '3.OPC 시작되는 Line
1703
                            'Equipment 생성
1704
                            Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
1705
                            If CEqpNo IsNot Nothing Then
1706
                                Dim oSymbol_Dt As DataTable = CEqpNo.Dt_Equipment
1707
                                Dim oAttribute_Dt As DataTable = CEqpNo.Dt_Attribute
1708
                                For Each oSymbolNode As TreeNode In oNode.Nodes
1709
                                    If oSymbolNode.Checked Then
1710
                                        Dim sUid As String = oSymbolNode.Name
1711
                                        PlaceEquipment(sUid, oSymbol_Dt, oAttribute_Dt, CEqpNo.Text)
1712
                                    End If
1713
                                Next
1714
                            End If
1715
                        Next
1716
                    End If
1717
                End If
1718
            Next
1719
        Next
1720
    End Sub
1721

    
1722
    Private Sub ManualCheckNode(ByRef oDt As DataTable)
1723
        For Each oDrwing As TreeNode In Tree_Result.Nodes
1724
            For Each oDwgNode As TreeNode In oDrwing.Nodes
1725
                For Each oNode As TreeNode In oDwgNode.Nodes
1726
                    For Each oSymbolNode As TreeNode In oNode.Nodes
1727
                        Dim sUid As String = oSymbolNode.Name
1728
                        'Dim oSelectRows() As DataRow = oDt.Select("[" & _XML_SYMBOL_UID & "] = '" & sUid &
1729
                        '                                      "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False'")
1730
                        If oSymbolNode.Checked Then
1731
                            Dim oSelectRows() As DataRow = oDt.Select("[" & _XML_SYMBOL_UID & "] = '" & sUid & "'")
1732
                            If oSelectRows.Length = 1 Then
1733
                                oSelectRows(0)(_XML_SYMBOL_DRAWING_TF) = "FALSE"
1734
                                If oSymbolNode.Checked Then
1735
                                    oSelectRows(0)(_XML_SYMBOL_Check) = "TRUE"
1736
                                Else
1737
                                    oSelectRows(0)(_XML_SYMBOL_Check) = "FALSE"
1738
                                End If
1739
                            End If
1740
                        End If
1741
                    Next
1742
                Next
1743
            Next
1744
        Next
1745

    
1746
    End Sub
1747

    
1748
    Private Function FinalSymbolModeling(ByVal oCurrentSymbolRow As DataRow, ByVal oLine_Dt As DataTable, ByVal oSymbol_Dt As DataTable,
1749
                                  ByVal oAttribute_Dt As DataTable) As String
1750
        Dim sReturnUid As String = ""
1751
        Dim sOriginalPoint As String = ""
1752
        Dim dOriginal_x As Double = 0.0
1753
        Dim dOriginal_y As Double = 0.0
1754
        Dim dConn1_x As Double = 0.0
1755
        Dim dConn1_y As Double = 0.0
1756
        Dim dConn2_x As Double = 0.0
1757
        Dim dConn2_y As Double = 0.0
1758
        Dim dConn3_x As Double = 0.0
1759
        Dim dConn3_y As Double = 0.0
1760
        Dim dConn4_x As Double = 0.0
1761
        Dim dConn4_y As Double = 0.0
1762
        Dim sUid As String = oCurrentSymbolRow(_XML_SYMBOL_UID)
1763
        Dim sSystemPath As String = oCurrentSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
1764
        Dim dAngle As Double = oCurrentSymbolRow(_XML_SYMBOL_ANGLE)
1765
        Dim sLineNoText As String = oCurrentSymbolRow(_XML_LINENO_TEXT)
1766
        Dim sLineNoUid As String = oCurrentSymbolRow(_XML_LINE_LINENOUID).ToString()
1767
        sOriginalPoint = oCurrentSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
1768
        Dim sSymbolCompType As String = oCurrentSymbolRow(_XML_SYMBOL_TYPE).ToString()
1769
        ConvertPointBystring(sOriginalPoint, dOriginal_x, dOriginal_y)
1770
        ConvertPointByImage(dOriginal_x, dOriginal_y, _IMG_X, _IMG_Y)
1771
        Dim sChildItem As String = oCurrentSymbolRow(_XML_SYMBOL_CHILD)
1772
        'Connection 정보 체크, 모델링 되어 있는지 유무
1773
        '양 커넥션의 모델링 유무를 체크한다.
1774
        Dim sConn1Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn1_Uid).ToString()
1775
        Dim sConn2Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn2_Uid).ToString()
1776
        Dim sConn3Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn3_Uid).ToString()
1777
        Dim sConn4Uid As String = oCurrentSymbolRow(_XML_SYMBOL_Conn4_Uid).ToString()
1778
        Dim sConn1Type As String = ""
1779
        Dim sConn2Type As String = ""
1780
        Dim sConn3Type As String = ""
1781
        Dim sConn4Type As String = ""
1782
        Dim oConn1Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn1Uid & "'")
1783
        If oConn1Rows.Length = 0 Then
1784
            oConn1Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn1Uid & "'")
1785
            If oConn1Rows.Length = 1 Then
1786
                sConn1Type = "Line"
1787
            End If
1788
        Else
1789
            sConn1Type = "Symbol"
1790
        End If
1791

    
1792
        Dim oConn2Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn2Uid & "'")
1793
        If oConn2Rows.Length = 0 Then
1794
            oConn2Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn2Uid & "'")
1795
            If oConn2Rows.Length = 1 Then
1796
                sConn2Type = "Line"
1797
            End If
1798
        Else
1799
            sConn2Type = "Symbol"
1800
        End If
1801

    
1802
        Dim oConn3Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn3Uid & "'")
1803
        If oConn3Rows.Length = 0 Then
1804
            oConn3Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn3Uid & "'")
1805
            If oConn3Rows.Length = 1 Then
1806
                sConn3Type = "Line"
1807
            End If
1808
        Else
1809
            sConn3Type = "Symbol"
1810
        End If
1811

    
1812
        Dim oConn4Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn4Uid & "'")
1813
        If oConn4Rows.Length = 0 Then
1814
            oConn4Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn4Uid & "'")
1815
            If oConn4Rows.Length = 1 Then
1816
                sConn4Type = "Line"
1817
            End If
1818
        Else
1819
            sConn4Type = "Symbol"
1820
        End If
1821

    
1822
        Dim oStartLMConnector As LMConnector = Nothing
1823
        Dim oEndLMConnector As LMConnector = Nothing
1824
        Dim objInputs As PlaceRunInputs
1825
        objInputs = New PlaceRunInputs
1826
        Dim iModelingType As Integer = 0
1827
        If sConn1Type <> "" Then
1828
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn1_Point).ToString(), dConn1_x, dConn1_y)
1829
        End If
1830
        If sConn2Type <> "" Then
1831
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn2_Point).ToString(), dConn2_x, dConn2_y)
1832
        End If
1833
        If sConn3Type <> "" Then
1834
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn3_Point).ToString(), dConn3_x, dConn3_y)
1835
        End If
1836
        If sConn4Type <> "" Then
1837
            ConvertPoint(oCurrentSymbolRow(_XML_SYMBOL_Conn4_Point).ToString(), dConn4_x, dConn4_y)
1838
        End If
1839

    
1840
        Dim sFirstUid As String = ""
1841
        Dim sSecondUid As String = ""
1842
        Dim oLMSymbol As LMSymbol = Nothing
1843
        Dim dPreConn_x As Double = 0
1844
        Dim dPreConn_y As Double = 0
1845
        Dim sStartConnectionUid As String = ""
1846
        Dim sEndConnectionUid As String = ""
1847
        If sConn1Type <> "" And sConn2Type <> "" Then
1848
            If sConn1Type = "Line" Then
1849
                CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector, sStartConnectionUid)
1850
            Else
1851
                CheckConnectionSymbolToSymbol(oConn1Rows, dConn1_x, dConn1_y, oStartLMConnector)
1852
            End If
1853

    
1854
            If sConn2Type = "Line" Then
1855
                CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector, sEndConnectionUid)
1856
            Else
1857
                CheckConnectionSymbolToSymbol(oConn2Rows, dConn2_x, dConn2_y, oEndLMConnector)
1858
            End If
1859

    
1860
            sFirstUid = CheckExistModeling(oConn1Rows(0))
1861
            sSecondUid = CheckExistModeling(oConn2Rows(0))
1862
            Dim oCurrentLMConnector As LMConnector = Nothing
1863

    
1864
        ElseIf sConn1Type <> "" And sConn2Type = "" Then
1865
            If sConn1Type = "Line" Then
1866
                CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector, sStartConnectionUid)
1867
            Else
1868
                CheckConnectionSymbolToSymbol(oConn1Rows, dConn1_x, dConn1_y, oStartLMConnector)
1869
                dOriginal_x = dConn1_x
1870
                dOriginal_y = dConn1_y
1871
            End If
1872

    
1873
            sFirstUid = CheckExistModeling(oConn1Rows(0))
1874

    
1875
        ElseIf sConn1Type = "" And sConn2Type <> "" Then
1876

    
1877
            If sConn1Type = "Line" Then
1878
                CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector, sEndConnectionUid)
1879
            Else
1880
                CheckConnectionSymbolToSymbol(oConn2Rows, dConn2_x, dConn2_y, oEndLMConnector)
1881
                dOriginal_x = dConn2_x
1882
                dOriginal_y = dConn2_y
1883
            End If
1884
            sSecondUid = CheckExistModeling(oConn2Rows(0))
1885

    
1886
        ElseIf sConn3Type <> "" And sConn4Type <> "" Then
1887
            If sConn1Type = "Line" Then
1888
                CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector, sStartConnectionUid)
1889
            Else
1890
                CheckConnectionSymbolToSymbol(oConn3Rows, dConn3_x, dConn3_y, oStartLMConnector)
1891
            End If
1892

    
1893
            If sConn2Type = "Line" Then
1894
                CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector, sEndConnectionUid)
1895
            Else
1896
                CheckConnectionSymbolToSymbol(oConn4Rows, dConn4_x, dConn4_y, oEndLMConnector)
1897
            End If
1898

    
1899
            sFirstUid = CheckExistModeling(oConn3Rows(0))
1900
            sSecondUid = CheckExistModeling(oConn4Rows(0))
1901

    
1902
        ElseIf sConn3Type <> "" And sConn4Type = "" Then
1903
            If sConn1Type = "Line" Then
1904
                CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector, sStartConnectionUid)
1905
            Else
1906
                CheckConnectionSymbolToSymbol(oConn3Rows, dConn3_x, dConn3_y, oStartLMConnector)
1907
                dOriginal_x = dConn3_x
1908
                dOriginal_y = dConn3_y
1909
            End If
1910

    
1911
            sFirstUid = CheckExistModeling(oConn3Rows(0))
1912

    
1913
        ElseIf sConn3Type = "" And sConn4Type <> "" Then
1914
            If sConn2Type = "Line" Then
1915
                CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector, sEndConnectionUid)
1916
            Else
1917
                CheckConnectionSymbolToSymbol(oConn4Rows, dConn4_x, dConn4_y, oEndLMConnector)
1918
                dOriginal_x = dConn4_x
1919
                dOriginal_y = dConn4_y
1920
            End If
1921

    
1922
            sSecondUid = CheckExistModeling(oConn4Rows(0))
1923

    
1924
        Else
1925

    
1926
        End If
1927

    
1928
        If sFirstUid <> "" And sSecondUid <> "" Then
1929
            sReturnUid = sSecondUid
1930
        ElseIf sFirstUid <> "" And sSecondUid = "" Then
1931
            sReturnUid = sFirstUid
1932
        ElseIf sFirstUid <> "" And sSecondUid = "" Then
1933
            sReturnUid = sFirstUid
1934
        ElseIf sSecondUid <> "" And sFirstUid = "" Then
1935
            sReturnUid = sSecondUid
1936
        ElseIf sSecondUid <> "" And sFirstUid = "" Then
1937
            sReturnUid = sSecondUid
1938
        Else
1939
            sReturnUid = ""
1940
        End If
1941

    
1942
        If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
1943
            oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle)
1944
            oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
1945
        Else
1946
            If oStartLMConnector IsNot Nothing And oEndLMConnector IsNot Nothing Then
1947
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle)
1948
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
1949
            ElseIf oStartLMConnector IsNot Nothing And oEndLMConnector Is Nothing Then
1950
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle,,
1951
                            TargetItem:=oStartLMConnector.AsLMAItem)
1952
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
1953
            ElseIf oStartLMConnector Is Nothing And oEndLMConnector IsNot Nothing Then
1954
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle,,
1955
                TargetItem:=oEndLMConnector.AsLMAItem)
1956
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
1957
            Else
1958
                oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dOriginal_x, dOriginal_y,, dAngle)
1959
                oCurrentSymbolRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
1960
            End If
1961
        End If
1962

    
1963
        '모델링 된 PipeLine 데이터 테이블 저장
1964
        Dim oAddRow As DataRow = _ModelingSymbol_Dt.NewRow
1965
        oAddRow(_XML_SYMBOL_SPID) = oLMSymbol.ModelItemID
1966
        oAddRow(_XML_SYMBOL_LMSYMBOL) = oLMSymbol
1967
        oAddRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
1968
        oAddRow(_XML_SYMBOL_CENTERPOINT_X) = dOriginal_x
1969
        oAddRow(_XML_SYMBOL_CENTERPOINT_Y) = dOriginal_y
1970
        oAddRow(_XML_SYMBOL_MIN_X) = oCurrentSymbolRow(_XML_SYMBOL_MIN_X)
1971
        oAddRow(_XML_SYMBOL_MAX_X) = oCurrentSymbolRow(_XML_SYMBOL_MAX_X)
1972
        oAddRow(_XML_SYMBOL_MIN_Y) = oCurrentSymbolRow(_XML_SYMBOL_MIN_Y)
1973
        oAddRow(_XML_SYMBOL_MAX_Y) = oCurrentSymbolRow(_XML_SYMBOL_MAX_Y)
1974
        _ModelingSymbol_Dt.Rows.Add(oAddRow)
1975

    
1976
        If sChildItem <> "" Then
1977
            Dim sConn1_Systempath As String = ""
1978
            Dim sConn2_Systempath As String = ""
1979
            Dim sConn1_Angle As Double = 0
1980
            Dim sConn2_Angle As Double = 0
1981

    
1982
            For Each sDirection In sChildItem.Split("/")
1983
                Dim iType As Integer = 0
1984
                For Each sType In sDirection.Split(",")
1985
                    If sConn1_Systempath = "" Then
1986

    
1987
                        If iType = 0 Then
1988
                            sConn1_Angle = GetChildSymbolDirection(sType)
1989
                            iType = iType + 1
1990
                        Else
1991
                            Dim sStartpoint As String = oCurrentSymbolRow(_XML_SYMBOL_Conn1_Point).ToString()
1992
                            ConvertPointBystring(sStartpoint, dConn1_x, dConn1_y)
1993
                            ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
1994
                            sConn1_Systempath = GetDataFromMappingDB(sType, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
1995
                            Dim dChildConn1_x As Double = 0
1996
                            Dim dChildConn1_y As Double = 0
1997

    
1998
                            If oLMSymbol IsNot Nothing Then
1999
                                _Placement.PIDConnectPointLocation(oLMSymbol, 1, dChildConn1_x, dChildConn1_y)
2000
                                _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn1_x, dChildConn1_y,, sConn1_Angle,,
2001
                                 TargetItem:=oLMSymbol.AsLMAItem)
2002
                            Else
2003
                                _Placement.PIDPlaceSymbol(sConn1_Systempath, dConn1_x, dConn1_y,, sConn1_Angle,,)
2004
                            End If
2005
                        End If
2006

    
2007
                    Else
2008
                        If iType = 0 Then
2009
                            sConn2_Angle = GetChildSymbolDirection(sType)
2010
                            iType = iType + 1
2011
                        Else
2012
                            Dim sEndPoint As String = oCurrentSymbolRow(_XML_SYMBOL_Conn2_Point).ToString()
2013
                            ConvertPointBystring(sEndPoint, dConn2_x, dConn2_y)
2014
                            ConvertPointByImage(dConn2_x, dConn2_y, _IMG_X, _IMG_Y)
2015
                            sConn2_Systempath = GetDataFromMappingDB(sType, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
2016

    
2017
                            Dim dChildConn2_x As Double = 0
2018
                            Dim dChildConn2_y As Double = 0
2019

    
2020
                            If oLMSymbol IsNot Nothing Then
2021
                                _Placement.PIDConnectPointLocation(oLMSymbol, 2, dChildConn2_x, dChildConn2_y)
2022
                                _Placement.PIDPlaceSymbol(sConn1_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle,,
2023
                                        TargetItem:=oLMSymbol.AsLMAItem)
2024
                            Else
2025
                                _Placement.PIDPlaceSymbol(sConn2_Systempath, dChildConn2_x, dChildConn2_y,, sConn2_Angle,,)
2026
                            End If
2027

    
2028
                        End If
2029
                    End If
2030
                Next
2031
            Next
2032
        End If
2033

    
2034
        AddProgress()
2035

    
2036
        SetListBoxItems(ListBox_Result, "Place Fitting.." & sUid & " (" & dOriginal_x & "," & dOriginal_y & ")..." & _iFittingcnt & " count ")
2037
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Fitting : " & sUid)
2038
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
2039
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "ModelingType : " & iModelingType)
2040
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn1_Point : " & dConn1_x & "," & dConn1_y)
2041
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn2_Point : " & dConn2_x & "," & dConn2_y)
2042
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn3_Point : " & dConn3_x & "," & dConn3_y)
2043
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Conn4_Point : " & dConn4_x & "," & dConn4_y)
2044
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn1_Uid).ToString())
2045
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn2_Uid).ToString())
2046
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection3 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn3_Uid).ToString())
2047
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection4 : " & oCurrentSymbolRow(_XML_SYMBOL_Conn4_Uid).ToString())
2048
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
2049
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dOriginal_x & "," & dOriginal_y)
2050
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Fitting Count : " & _iFittingcnt)
2051
        _iFittingcnt = _iFittingcnt + 1
2052
        oCurrentSymbolRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
2053

    
2054
        Dim oAttributeRow() As DataRow
2055
        oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
2056
        If oAttribute_Dt.Rows.Count > 0 Then
2057

    
2058
            If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
2059
                Dim oInstrument As LMInstrument
2060
                oInstrument = _Placement.PIDDataSource.GetInstrument(oLMSymbol.ModelItemID)
2061
                Try
2062
                    If oAttributeRow.Length > 0 Then
2063
                        For Each oAttribute In oAttributeRow
2064
                            Try
2065
                                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2066
                                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2067
                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2068
                                oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
2069
                            Catch ex As Exception
2070
                            End Try
2071
                        Next
2072
                        oInstrument.Commit()
2073
                    End If
2074
                Catch ex As Exception
2075
                End Try
2076
            Else
2077
                Try
2078
                    If oAttributeRow.Length > 0 And oLMSymbol IsNot Nothing Then
2079
                        For Each oAttribute In oAttributeRow
2080
                            Try
2081
                                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2082
                                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2083
                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2084
                                oLMSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
2085

    
2086
                            Catch ex As Exception
2087
                            End Try
2088
                        Next
2089
                        oLMSymbol.Commit()
2090
                    End If
2091
                Catch ex As Exception
2092
                End Try
2093
            End If
2094
        End If
2095

    
2096
        Return sReturnUid
2097
    End Function
2098
    Private Function GetChildSymbolDirection(ByVal sDirection As String) As Double
2099
        Dim sReturnDirection As String = ""
2100
        If sDirection.ToUpper() = "RIGHT" Then
2101
            Return 3.14
2102
        ElseIf sDirection.ToUpper() = "LEFT" Then
2103
            Return 0
2104
        ElseIf sDirection.ToUpper = "DOWN" Then
2105
            Return 1.57
2106
        ElseIf sDirection.ToUpper() = "UP" Then
2107
            Return 4.71
2108
        Else
2109
            Return 0
2110
        End If
2111
    End Function
2112

    
2113
    Private Function CheckExistModeling(ByVal oRow As DataRow) As String
2114
        If oRow(_XML_LINE_DRAWING_TF).ToString() = "FALSE" And oRow(_XML_LINE_Check).ToString() = "TRUE" Then
2115
            Return oRow(_XML_LINE_UID).ToString()
2116
        End If
2117
        Return String.Empty
2118
    End Function
2119

    
2120

    
2121
    Private Sub ConvertPoint(ByVal sOriginalPoint As String, ByRef dConn1_x As Double, ByRef dConn1_y As Double)
2122
        ConvertPointBystring(sOriginalPoint, dConn1_x, dConn1_y)
2123
        ConvertPointByImage(dConn1_x, dConn1_y, _IMG_X, _IMG_Y)
2124
    End Sub
2125

    
2126
    Private Function FinalLineModeling(ByVal oCurrentLineRow As DataRow,
2127
                              ByVal oLine_Dt As DataTable, ByVal oSymbol_Dt As DataTable,
2128
                                  ByVal oAttribute_Dt As DataTable) As String
2129
        Dim sReturnUid As String = ""
2130
        Try
2131
            Dim bCheckBranchItem As Boolean = False
2132
            Dim dCenterPos_x As Double = 0.0
2133
            Dim dCenterPos_y As Double = 0.0
2134
            Dim objItem As LMAItem
2135
            Dim sUid As String = oCurrentLineRow(_XML_LINE_UID).ToString()
2136
            Dim sLineType As String = oCurrentLineRow(_XML_LINE_TYPE).ToString()
2137
            Dim sSystemPath As String = GetPipeType(sLineType)
2138
            Dim sLineNoText As String = oCurrentLineRow(_XML_LINENO_TEXT).ToString()
2139
            Dim sLineNoUid As String = oCurrentLineRow(_XML_LINE_LINENOUID).ToString()
2140
            Dim dStart_Dwg_x As Double = oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_X)
2141
            Dim dStart_Dwg_y As Double = oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_Y)
2142
            Dim dEnd_Dwg_x As Double = oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_X)
2143
            Dim dEnd_Dwg_y As Double = oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_Y)
2144
            Dim sPreFlowDirection As String = ""
2145
            Dim sFlowDirection As String = oCurrentLineRow(_XML_LINE_FlowDirection)
2146
            Dim sPreConn1Direction As String = ""
2147
            Dim sPreConn2Direction As String = ""
2148
            Dim sDirection As String = oCurrentLineRow(_XML_LINE_Direction)
2149
            dCenterPos_x = Math.Abs(dStart_Dwg_x + dEnd_Dwg_x) / 2
2150
            dCenterPos_y = Math.Abs(dStart_Dwg_y + dEnd_Dwg_y) / 2
2151
            Dim oPidDataSource As LMADataSource = Nothing
2152
            Try
2153
                oPidDataSource = _Placement.PIDDataSource
2154
            Catch ex As Exception
2155
                CheckOpenDrawing()
2156
                oPidDataSource = _Placement.PIDDataSource
2157
            End Try
2158
            'Connection 정보 체크, 모델링 되어 있는지 유무
2159
            '양 커넥션의 모델링 유무를 체크한다.
2160
            Dim sConn1Uid As String = oCurrentLineRow(_XML_LINE_Conn1_Uid).ToString()
2161
            Dim sConn2Uid As String = oCurrentLineRow(_XML_LINE_Conn2_Uid).ToString()
2162
            Dim sConn1Type As String = ""
2163
            Dim sConn2Type As String = ""
2164
            Dim oConn1Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn1Uid & "'")
2165
            If oConn1Rows.Length = 0 Then
2166
                oConn1Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn1Uid & "'")
2167
                If oConn1Rows.Length = 1 Then
2168
                    sConn1Type = "Line"
2169
                End If
2170
            Else
2171
                Dim oOriginalPoint As String = oConn1Rows(0)(_XML_SYMBOL_ORIGINALPOINT)
2172
                ConvertPointBystring(oOriginalPoint, dStart_Dwg_x, dStart_Dwg_y)
2173
                ConvertPointByImage(dStart_Dwg_x, dStart_Dwg_y, _IMG_X, _IMG_Y)
2174
                oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_X) = dStart_Dwg_x
2175
                oCurrentLineRow(_XML_LINE_DWG_STARTPOINT_Y) = dStart_Dwg_y
2176
                sConn1Type = "Symbol"
2177
            End If
2178
            Dim oConn2Rows() As DataRow = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "] = '" & sConn2Uid & "'")
2179
            If oConn2Rows.Length = 0 Then
2180
                oConn2Rows = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sConn2Uid & "'")
2181
                If oConn2Rows.Length = 1 Then
2182
                    sConn2Type = "Line"
2183
                End If
2184
            Else
2185
                Dim oOriginalPoint As String = oConn2Rows(0)(_XML_SYMBOL_ORIGINALPOINT)
2186
                ConvertPointBystring(oOriginalPoint, dEnd_Dwg_x, dEnd_Dwg_y)
2187
                ConvertPointByImage(dEnd_Dwg_x, dEnd_Dwg_y, _IMG_X, _IMG_Y)
2188
                oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_X) = dEnd_Dwg_x
2189
                oCurrentLineRow(_XML_LINE_DWG_ENDPOINT_Y) = dEnd_Dwg_y
2190
                sConn2Type = "Symbol"
2191
            End If
2192
            Dim sConn1LineNo As String = ""
2193
            Dim sConn2LineNo As String = ""
2194
            Dim oLMConnector As LMConnector = Nothing
2195
            Dim oStartLMConnector As LMConnector = Nothing
2196
            Dim oEndLMConnector As LMConnector = Nothing
2197
            Dim oLMSymbol1 As LMSymbol = Nothing
2198
            Dim oLMSymbol2 As LMSymbol = Nothing
2199
            Dim objInputs As PlaceRunInputs
2200
            objInputs = New PlaceRunInputs
2201
            Dim iModelingType As Integer = 0
2202
            If sConn1Type = "Line" And sConn2Type = "Line" Then
2203
                iModelingType = 1
2204
            ElseIf sConn1Type = "Line" And sConn2Type = "Symbol" Then
2205
                iModelingType = 1
2206
            ElseIf sConn1Type = "Symbol" And sConn2Type = "Line" Then
2207
                iModelingType = 1
2208
            ElseIf sConn1Type = "Symbol" And sConn2Type = "Symbol" Then
2209
                iModelingType = 1
2210
            ElseIf sConn1Type = "Line" And sConn2Type = "" Then
2211
                iModelingType = 2
2212
            ElseIf sConn1Type = "Symbol" And sConn2Type = "" Then
2213
                iModelingType = 2
2214
            ElseIf sConn1Type = "" And sConn2Type = "Line" Then
2215
                iModelingType = 3
2216
            ElseIf sConn1Type = "" And sConn2Type = "Symbol" Then
2217
                iModelingType = 3
2218
            Else
2219
                iModelingType = 4
2220
            End If
2221
            Dim dPreConnX As Double = 0
2222
            Dim dPreConnY As Double = 0
2223
            Dim sStartConnectionUid As String = ""
2224
            Dim sEndConnectionUid As String = ""
2225
            Dim bAlreadyCheckBranchLine As Boolean = False
2226
            '브런치라인이 먼저있는상태에서 메인라인을 그릴경우..해당되는 브런치라인 수 만큼 라인을 따로 생성 
2227
            If CheckAlreadyBranchLine(sSystemPath, dStart_Dwg_x, dStart_Dwg_y, dEnd_Dwg_x, dEnd_Dwg_y) = False Then
2228

    
2229
                CheckConnectionLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector, sStartConnectionUid)
2230
                If oStartLMConnector Is Nothing Then
2231
                    bCheckBranchItem = UpdateCheckBranchLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector, sStartConnectionUid)
2232
                    If oStartLMConnector Is Nothing Then
2233
                        oLMSymbol1 = CheckConnectionSymbolToLine(oConn1Rows, dStart_Dwg_x, dStart_Dwg_y, dCenterPos_x, dCenterPos_y, oStartLMConnector)
2234
                        If oLMSymbol1 IsNot Nothing Then
2235
                            sConn1Type = "Symbol"
2236
                        Else
2237
                            sConn1Type = ""
2238
                        End If
2239
                    Else
2240
                        sConn1Type = "Line"
2241
                    End If
2242
                Else
2243
                    sConn1Type = "Line"
2244
                End If
2245
                CheckConnectionLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector, sEndConnectionUid)
2246
                If oEndLMConnector Is Nothing Then
2247
                    bCheckBranchItem = UpdateCheckBranchLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector, sEndConnectionUid)
2248
                    If oEndLMConnector Is Nothing Then
2249
                        oLMSymbol2 = CheckConnectionSymbolToLine(oConn2Rows, dEnd_Dwg_x, dEnd_Dwg_y, dCenterPos_x, dCenterPos_y, oEndLMConnector)
2250
                        If oLMSymbol2 IsNot Nothing Then
2251
                            sConn2Type = "Symbol"
2252
                        End If
2253
                    Else
2254
                        sConn2Type = "Line"
2255
                    End If
2256
                Else
2257
                    sConn2Type = "Line"
2258
                End If
2259
                Dim sFirstUid As String = ""
2260
                Dim sSecondUid As String = ""
2261
                Try
2262
                    If oStartLMConnector Is Nothing And oEndLMConnector Is Nothing Then
2263
                        If oLMSymbol1 Is Nothing Then
2264
                            objInputs.AddPoint(dStart_Dwg_x, dStart_Dwg_y)
2265
                        Else
2266
                            objInputs.AddSymbolTarget(oLMSymbol1, dStart_Dwg_x, dStart_Dwg_y)
2267
                        End If
2268

    
2269
                        If oLMSymbol2 Is Nothing Then
2270
                            objInputs.AddPoint(dEnd_Dwg_x, dEnd_Dwg_y)
2271
                        Else
2272
                            objInputs.AddSymbolTarget(oLMSymbol2, dEnd_Dwg_x, dEnd_Dwg_y)
2273
                        End If
2274

    
2275
                    ElseIf oStartLMConnector IsNot Nothing And oEndLMConnector Is Nothing Then
2276
                        If sConn1Type = "Line" Then
2277
                            objInputs.AddConnectorTarget(oStartLMConnector, dStart_Dwg_x, dStart_Dwg_y)
2278
                        Else
2279
                            objInputs.AddSymbolTarget(oLMSymbol1, dStart_Dwg_x, dStart_Dwg_y)
2280
                        End If
2281
                        If oLMSymbol2 Is Nothing Then
2282
                            objInputs.AddPoint(dEnd_Dwg_x, dEnd_Dwg_y)
2283
                        Else
2284
                            objInputs.AddSymbolTarget(oLMSymbol2, dEnd_Dwg_x, dEnd_Dwg_y)
2285
                        End If
2286

    
2287
                    ElseIf oStartLMConnector Is Nothing And oEndLMConnector IsNot Nothing Then
2288
                        If sConn2Type = "Line" Then
2289
                            objInputs.AddConnectorTarget(oEndLMConnector, dEnd_Dwg_x, dEnd_Dwg_y)
2290
                        Else
2291
                            objInputs.AddSymbolTarget(oLMSymbol2, dEnd_Dwg_x, dEnd_Dwg_y)
2292
                        End If
2293
                        If oLMSymbol1 Is Nothing Then
2294
                            objInputs.AddPoint(dStart_Dwg_x, dStart_Dwg_y)
2295
                        Else
2296
                            objInputs.AddSymbolTarget(oLMSymbol1, dStart_Dwg_x, dStart_Dwg_y)
2297
                        End If
2298

    
2299
                    Else
2300
                        If sConn1Type = "Line" Then
2301
                            objInputs.AddConnectorTarget(oStartLMConnector, dStart_Dwg_x, dStart_Dwg_y)
2302
                        Else
2303
                            objInputs.AddSymbolTarget(oLMSymbol1, dStart_Dwg_x, dStart_Dwg_y)
2304
                        End If
2305
                        If sConn2Type = "Line" Then
2306
                            objInputs.AddConnectorTarget(oEndLMConnector, dEnd_Dwg_x, dEnd_Dwg_y)
2307
                        Else
2308
                            objInputs.AddSymbolTarget(oLMSymbol2, dEnd_Dwg_x, dEnd_Dwg_y)
2309
                        End If
2310

    
2311
                    End If
2312
                    If sConn1Type <> "" And sConn2Type <> "" Then
2313
                        If oConn1Rows.Count > 0 Then
2314
                            sFirstUid = CheckExistModeling(oConn1Rows(0))
2315
                        End If
2316
                        If oConn2Rows.Count > 0 Then
2317
                            sSecondUid = CheckExistModeling(oConn2Rows(0))
2318
                        End If
2319

    
2320
                    ElseIf sConn1Type <> "" And sConn2Type = "" Then
2321
                        If oConn1Rows.Count > 0 Then
2322
                            sFirstUid = CheckExistModeling(oConn1Rows(0))
2323
                        End If
2324

    
2325
                    ElseIf sConn1Type = "" And sConn2Type <> "" Then
2326
                        If oConn2Rows.Count > 0 Then
2327
                            sSecondUid = CheckExistModeling(oConn2Rows(0))
2328
                        End If
2329

    
2330
                    End If
2331

    
2332
                    If sFirstUid <> "" And sSecondUid <> "" Then
2333
                        sReturnUid = sSecondUid
2334
                    ElseIf sFirstUid = "" And sSecondUid <> "" Then
2335
                        sReturnUid = sSecondUid
2336
                    ElseIf sFirstUid <> "" And sSecondUid = "" Then
2337
                        sReturnUid = sFirstUid
2338
                    Else
2339
                        sReturnUid = ""
2340
                    End If
2341
                    _iPipecnt = _iPipecnt + 1
2342

    
2343
                    '배관 모델링
2344
                    Dim oCurrentConnector As LMConnector = LineModeling(objInputs, sSystemPath)
2345

    
2346
                    If oCurrentConnector IsNot Nothing Then
2347
                        oCurrentLineRow(_XML_LINE_LMCONNECTOR) = oCurrentConnector
2348
                        oCurrentLineRow(_XML_LINE_DRAWING_TF) = "TRUE"
2349
                        '로그 출력
2350
                        AddLog(sUid, sSystemPath, dStart_Dwg_x, dStart_Dwg_y, dEnd_Dwg_x, dEnd_Dwg_y, sLineNoText, sConn1Uid, sConn2Uid)
2351
                        Dim oPipeRun As LMPipeRun = oPidDataSource.GetPipeRun(oCurrentConnector.ModelItemID)
2352
                        '배관 속성 입력
2353
                        AddAttribute(oPipeRun, oAttribute_Dt, sLineNoUid)
2354

    
2355
                        Dim sID_1 As String = ""
2356
                        Dim sID_2 As String = ""
2357
                        Dim oAddConnector As LMConnector = Nothing
2358
                        If oStartLMConnector IsNot Nothing Then
2359
                            sID_1 = oStartLMConnector.ModelItemID
2360
                            sID_2 = oCurrentConnector.ModelItemID
2361
                            oAddConnector = oStartLMConnector
2362
                        ElseIf oEndLMConnector IsNot Nothing Then
2363
                            sID_1 = oEndLMConnector.ModelItemID
2364
                            sID_2 = oCurrentConnector.ModelItemID
2365
                            oAddConnector = oEndLMConnector
2366
                        End If
2367
                        If sID_1 <> "" And sID_2 <> "" Then
2368
                            'PipeRun 합치기
2369

    
2370

    
2371
                            If bCheckBranchItem Then
2372
                                '모델링 된 PipeLine 데이터 테이블 저장
2373
                                AddModelingDT(sUid, oCurrentConnector.ModelItemID, oCurrentConnector, dStart_Dwg_x, dStart_Dwg_y, dEnd_Dwg_x, dEnd_Dwg_y)
2374
                            Else
2375
                                JoinPipeRun(sID_1, sID_2)
2376
                                '모델링 된 PipeLine 데이터 테이블 저장
2377
                                AddModelingDT(sUid, sID_1, oAddConnector, dStart_Dwg_x, dStart_Dwg_y, dEnd_Dwg_x, dEnd_Dwg_y)
2378
                            End If
2379
                        Else
2380
                            '모델링 된 PipeLine 데이터 테이블 저장
2381
                            AddModelingDT(sUid, oCurrentConnector.ModelItemID, oCurrentConnector, dStart_Dwg_x, dStart_Dwg_y, dEnd_Dwg_x, dEnd_Dwg_y)
2382
                        End If
2383
                        If bCheckBranchItem = False Then
2384
                            '//2018.09.07 LMControl에 따라서 inconsitency가 달라지는듯 확인
2385
                            If sStartConnectionUid <> "" Then
2386
                                Dim oChangeRow() As DataRow = _ModelingLine_Dt.Select(_XML_LINE_UID & " = '" & sStartConnectionUid & "'")
2387
                                If oChangeRow.Length = 1 Then
2388
                                    oChangeRow(0)(_XML_LINE_SPID) = sID_1
2389
                                    oChangeRow(0)(_XML_LINE_LMCONNECTOR) = oAddConnector
2390
                                End If
2391
                            End If
2392
                            If sEndConnectionUid <> "" Then
2393
                                Dim oChangeRow() As DataRow = _ModelingLine_Dt.Select(_XML_LINE_UID & " = '" & sEndConnectionUid & "'")
2394
                                If oChangeRow.Length = 1 Then
2395
                                    oChangeRow(0)(_XML_LINE_SPID) = sID_1
2396
                                    oChangeRow(0)(_XML_LINE_LMCONNECTOR) = oAddConnector
2397
                                End If
2398
                            End If
2399
                        End If
2400

    
2401
                    Else
2402
                        sReturnUid = ""
2403
                    End If
2404
                Catch ex As Exception
2405
                End Try
2406
            End If
2407
        Catch ex As Exception
2408
        End Try
2409
        Return sReturnUid
2410
        '현재 Uid 모델링
2411
    End Function
2412
    Private Sub AddLog(ByVal sUid As String, ByVal sSystemPath As String,
2413
                             ByVal dStart_Dwg_x As Double, ByVal dStart_Dwg_y As Double, ByVal dEnd_Dwg_x As Double, ByVal dEnd_Dwg_y As Double,
2414
                       ByVal sLineNoText As String, ByVal sConn1Uid As String, ByVal sConn2Uid As String)
2415
        SetListBoxItems(ListBox_Result, "Place Pipe.." & sUid & " (" & dStart_Dwg_x & "," & dStart_Dwg_y & ") - (" & dEnd_Dwg_x & "," & dEnd_Dwg_y & ")..." & _iPipecnt & " count ")
2416
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & sUid)
2417
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
2418
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & sConn1Uid)
2419
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & sConn2Uid)
2420
        'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
2421
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "StartPoint : " & dStart_Dwg_x & "," & dStart_Dwg_y)
2422
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "EndPoint : " & dEnd_Dwg_x & "," & dEnd_Dwg_y)
2423
        ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Pipe Count : " & _iPipecnt)
2424
    End Sub
2425

    
2426
    Private Sub AddAttribute(ByVal oPipeRun As LMPipeRun, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String)
2427
        Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
2428
        If oAttributeRow.Length > 0 Then
2429
            For Each oAttribute In oAttributeRow
2430
                Try
2431
                    Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
2432
                    Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
2433
                    If sPIDValue.Contains("'") Then
2434
                        sPIDValue = sPIDValue.Replace("'", """")
2435
                    End If
2436
                    Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
2437
                    oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
2438
                Catch ex As Exception
2439
                End Try
2440
            Next
2441
            oPipeRun.Commit()
2442
        End If
2443
    End Sub
2444

    
2445
    Private Sub AddModelingDT(ByVal sUid As String, ByVal sModelID As String, ByVal oCurrentConnector As LMConnector,
2446
                              ByVal dStart_Dwg_x As Double, ByVal dStart_Dwg_y As Double,
2447
                              ByVal dEnd_Dwg_x As Double, ByVal dEnd_Dwg_y As Double)
2448
        Dim oAddRow As DataRow = _ModelingLine_Dt.NewRow
2449
        oAddRow(_XML_LINE_UID) = sUid
2450
        oAddRow(_XML_LINE_SPID) = sModelID
2451
        oAddRow(_XML_LINE_LMCONNECTOR) = oCurrentConnector
2452
        oAddRow(_XML_LINE_DRAWING_TF) = "TRUE"
2453
        oAddRow(_XML_LINE_DWG_STARTPOINT_X) = dStart_Dwg_x
2454
        oAddRow(_XML_LINE_DWG_STARTPOINT_Y) = dStart_Dwg_y
2455
        oAddRow(_XML_LINE_DWG_ENDPOINT_X) = dEnd_Dwg_x
2456
        oAddRow(_XML_LINE_DWG_ENDPOINT_Y) = dEnd_Dwg_y
2457
        _ModelingLine_Dt.Rows.Add(oAddRow)
2458
    End Sub
2459

    
2460
    Private Function JoinPipeRun(ByVal sID_1 As String, ByVal sID_2 As String) As Boolean
2461
        Try
2462
            Dim objSurvivorItem As LMAItem = Nothing
2463
            Dim oPipeRun1 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_1)
2464
            Dim oPipeRun2 As LMPipeRun = _Placement.PIDDataSource.GetPipeRun(sID_2)
2465
            _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
2466
            Return True
2467
        Catch ex As Exception
2468
            Return False
2469
        End Try
2470
    End Function
2471

    
2472

    
2473
    Private Function LineModeling(ByVal objInputs As PlaceRunInputs, ByVal sSystemPath As String) As LMConnector
2474
        Dim oCurrentConnector As LMConnector = Nothing
2475
        Dim objItem As LMAItem
2476
        objItem = _Placement.PIDCreateItem(sSystemPath)
2477
        Try
2478
            oCurrentConnector = _Placement.PIDPlaceRun(objItem, objInputs)
2479
            AddProgress()
2480
        Catch ex As Exception
2481
        End Try
2482
        Return oCurrentConnector
2483
    End Function
2484

    
2485
    Private Sub InstumentLineModeling(ByVal CLineNo As Line_no, ByVal oNode As TreeNode)
2486
        If CLineNo IsNot Nothing Then
2487
            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2488
            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2489
            Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2490
            Dim oDrawLinenoLabel As Boolean = False
2491
            For Each oSymbolNode As TreeNode In oNode.Nodes
2492
                If oSymbolNode.Checked Then
2493
                    Try
2494
                        Dim sUid As String = oSymbolNode.Name
2495
                        Dim sLineNoUid As String = CLineNo.Uid
2496
                        Dim sReturnUid = sUid
2497
                        '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2498
                        While True
2499
                            Dim oLineRows As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False' And [" &
2500
                                               _XML_SYMBOL_Check & "] = 'TRUE' And [" & _XML_LINE_ValieLine & "] = 'True'")
2501
                            If oLineRows.Count > 0 Then
2502
                                Dim sPipeType As String = oLineRows(0)(_XML_LINE_TYPE).ToString()
2503
                                If sPipeType.ToUpper() <> "PRIMARY" Then
2504
                                    sReturnUid = FinalLineModeling(oLineRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2505
                                Else
2506
                                    sReturnUid = ""
2507
                                End If
2508
                            Else
2509
                                sReturnUid = ""
2510
                            End If
2511
                            If sReturnUid = "" Then
2512
                                Exit While
2513
                            End If
2514
                        End While
2515
                    Catch ex As Exception
2516
                    End Try
2517
                End If
2518
            Next
2519
        End If
2520
    End Sub
2521

    
2522
    Private Sub PipeLineModeling(ByVal CLineNo As Line_no, ByVal oNode As TreeNode)
2523
        If CLineNo IsNot Nothing Then
2524
            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2525
            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2526
            Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2527
            Dim oDrawLinenoLabel As Boolean = False
2528
            Try
2529
                ManualCheckNode(oLine_Dt)
2530
                ManualCheckNode(oSymbol_Dt)
2531
            Catch ex As Exception
2532
            End Try
2533
            For Each oSymbolNode As TreeNode In oNode.Nodes
2534
                If oSymbolNode.Checked Then
2535
                    Try
2536
                        Dim sUid As String = oSymbolNode.Name
2537
                        Dim sLineNoUid As String = CLineNo.Uid
2538
                        Dim sReturnUid = sUid
2539
                        '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2540
                        While True
2541
                            Dim oLineRows As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False' And [" &
2542
                                               _XML_SYMBOL_Check & "] = 'TRUE' And [" & _XML_LINE_ValieLine & "] = 'True'")
2543
                            If oLineRows.Count > 0 Then
2544
                                Dim sPipeType As String = oLineRows(0)(_XML_LINE_TYPE).ToString()
2545
                                If sPipeType.ToUpper() = "PRIMARY" Then
2546
                                    sReturnUid = FinalLineModeling(oLineRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2547
                                Else
2548
                                    sReturnUid = ""
2549
                                End If
2550

    
2551
                            Else
2552
                                sReturnUid = ""
2553
                            End If
2554
                            If sReturnUid = "" Then
2555
                                Exit While
2556
                            End If
2557
                        End While
2558
                    Catch ex As Exception
2559
                    End Try
2560
                End If
2561
            Next
2562
        End If
2563
    End Sub
2564

    
2565
    Private Sub InstrumentSymbolModeling(ByVal CLineNo As Line_no, ByVal oNode As TreeNode)
2566
        If CLineNo IsNot Nothing Then
2567
            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2568
            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2569
            Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2570
            Dim oDrawLinenoLabel As Boolean = False
2571
            Try
2572
                ManualCheckNode(oLine_Dt)
2573
                ManualCheckNode(oSymbol_Dt)
2574
            Catch ex As Exception
2575
            End Try
2576
            For Each oSymbolNode As TreeNode In oNode.Nodes
2577
                If oSymbolNode.Checked Then
2578
                    Try
2579
                        Dim sUid As String = oSymbolNode.Name
2580
                        Dim sLineNoUid As String = CLineNo.Uid
2581
                        Dim sReturnUid = sUid
2582
                        '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2583
                        Dim oSymbolRows As DataRow() = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'FALSE' And [" &
2584
                                                                           _XML_SYMBOL_Check & "] = 'TRUE'")
2585
                        If oSymbolRows.Count > 0 Then
2586
                            Dim sSymbolType As String = oSymbolRows(0)(_XML_SYMBOL_TYPE).ToString().ToUpper()
2587
                            If sSymbolType = "INSTRUMENT" Then
2588
                                sReturnUid = FinalSymbolModeling(oSymbolRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2589
                            End If
2590
                        Else
2591
                            sReturnUid = ""
2592
                        End If
2593
                        If sReturnUid = "" Then
2594
                        End If
2595
                    Catch ex As Exception
2596
                    End Try
2597
                End If
2598
            Next
2599
        End If
2600
    End Sub
2601

    
2602
    Private Sub PipeSymbolModeling(ByVal CLineNo As Line_no, ByVal oNode As TreeNode)
2603
        If CLineNo IsNot Nothing Then
2604
            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2605
            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2606
            Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2607
            Dim oDrawLinenoLabel As Boolean = False
2608
            Try
2609
                ManualCheckNode(oLine_Dt)
2610
                ManualCheckNode(oSymbol_Dt)
2611
            Catch ex As Exception
2612
            End Try
2613
            For Each oSymbolNode As TreeNode In oNode.Nodes
2614
                If oSymbolNode.Checked Then
2615
                    Try
2616
                        Dim sUid As String = oSymbolNode.Name
2617
                        Dim sLineNoUid As String = CLineNo.Uid
2618
                        Dim sReturnUid = sUid
2619
                        '  FinalModeling(sUid, oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2620
                        Dim oSymbolRows As DataRow() = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sReturnUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'FALSE' And [" &
2621
                                                                           _XML_SYMBOL_Check & "] = 'TRUE'")
2622
                        If oSymbolRows.Count > 0 Then
2623
                            Dim sSymbolType As String = oSymbolRows(0)(_XML_SYMBOL_TYPE).ToString().ToUpper()
2624
                            If sSymbolType <> "INSTRUMENT" Then
2625
                                sReturnUid = FinalSymbolModeling(oSymbolRows(0), oLine_Dt, oSymbol_Dt, oAttribute_Dt)
2626
                            End If
2627
                        Else
2628
                            sReturnUid = ""
2629
                        End If
2630
                        If sReturnUid = "" Then
2631
                        End If
2632
                    Catch ex As Exception
2633
                    End Try
2634
                End If
2635
            Next
2636
        End If
2637
    End Sub
2638

    
2639
    Private Sub PipingModeling()
2640

    
2641
        Try
2642
            For Each oDrwing As TreeNode In Tree_Result.Nodes
2643
                For Each oDwgNode As TreeNode In oDrwing.Nodes
2644
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
2645
                    Dim CDrawing As Drawing = GetDrawing(sDwgName)
2646
                    If CDrawing IsNot Nothing Then
2647
                        Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
2648
                        Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
2649

    
2650
                        'PipeModeling
2651
                        For Each oNode As TreeNode In oDwgNode.Nodes
2652
                            Dim iItemcnt As Integer = 0
2653
                            Dim sNodeUid As String = oNode.Name
2654
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2655
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2656
                            PipeLineModeling(CLineNo, oNode)
2657
                            Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2658
                            PipeLineModeling(CTrimLineNo, oNode)
2659
                        Next
2660

    
2661
                        'Instrument Modeling
2662
                        For Each oNode As TreeNode In oDwgNode.Nodes
2663
                            Dim iItemcnt As Integer = 0
2664
                            Dim sNodeUid As String = oNode.Name
2665
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2666
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2667
                            InstrumentSymbolModeling(CLineNo, oNode)
2668
                            Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2669
                            InstrumentSymbolModeling(CTrimLineNo, oNode)
2670
                        Next
2671

    
2672
                        'Instrument Line Modeling
2673
                        For Each oNode As TreeNode In oDwgNode.Nodes
2674
                            Dim iItemcnt As Integer = 0
2675
                            Dim sNodeUid As String = oNode.Name
2676
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2677
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2678
                            InstumentLineModeling(CLineNo, oNode)
2679
                            Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2680
                            InstumentLineModeling(CTrimLineNo, oNode)
2681
                        Next
2682

    
2683
                        'Symbol Modeling
2684
                        For Each oNode As TreeNode In oDwgNode.Nodes
2685
                            Dim iItemcnt As Integer = 0
2686
                            Dim sNodeUid As String = oNode.Name
2687
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2688
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2689
                            PipeSymbolModeling(CLineNo, oNode)
2690
                            Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2691
                            PipeSymbolModeling(CTrimLineNo, oNode)
2692
                        Next
2693
                    End If
2694
                Next
2695
            Next
2696
        Catch ex As Exception
2697

    
2698
        End Try
2699
    End Sub
2700

    
2701

    
2702
    Private Sub FindNearPoint(ByVal oOPCSymbol As LMSymbol, ByRef dNear_x As Double, ByRef dNear_y As Double)
2703
        Dim oConnectionPoints_x(4) As Double
2704
        Dim oConnectionPoints_y(4) As Double
2705

    
2706
        Try
2707
            _Placement.PIDConnectPointLocation(oOPCSymbol, 1, oConnectionPoints_x(0), oConnectionPoints_y(0))
2708
            _Placement.PIDConnectPointLocation(oOPCSymbol, 2, oConnectionPoints_x(1), oConnectionPoints_y(1))
2709
            _Placement.PIDConnectPointLocation(oOPCSymbol, 3, oConnectionPoints_x(2), oConnectionPoints_y(2))
2710
            _Placement.PIDConnectPointLocation(oOPCSymbol, 4, oConnectionPoints_x(3), oConnectionPoints_y(3))
2711
            Dim iNearPoint As Integer = 0
2712
            Dim dGap As Double = 0
2713
            For i = 0 To 3
2714
                If dGap = 0 Then
2715
                    iNearPoint = i
2716
                    dGap = Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y)
2717
                Else
2718
                    If dGap >= Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y) Then
2719
                        iNearPoint = i
2720
                        dGap = Math.Abs(oConnectionPoints_x(i) - dNear_x) + Math.Abs(oConnectionPoints_y(i) - dNear_y)
2721
                    End If
2722
                End If
2723
            Next
2724
            dNear_x = oConnectionPoints_x(iNearPoint)
2725
            dNear_y = oConnectionPoints_y(iNearPoint)
2726
        Catch ex As Exception
2727

    
2728
        End Try
2729

    
2730
    End Sub
2731

    
2732
    Private Function GetPipeColor(ByVal sType As String) As Color
2733
        If sType.ToUpper() = "ELECTRIC" Then
2734
            Return Color.DarkOrange
2735
        ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
2736
            Return Color.Green
2737
        ElseIf sType.ToUpper() = "SOFTWARE" Then
2738
            Return Color.Blue
2739
        ElseIf sType.ToUpper() = "PNEUMATIC" Then
2740
            Return Color.Gray
2741
        Else
2742
            Return Color.Black
2743
        End If
2744
    End Function
2745

    
2746
    Private Function GetPipeType(ByVal sType As String) As String
2747
        Dim sSystempath As String = "\Piping\Routing\Process Lines\Primary Piping.sym" ' oPipeRow(0)(_XML_LINE_SYSTEMPATH).ToString()
2748
        If sType.ToUpper() = "ELECTRIC" Then
2749
            sSystempath = "\Instrumentation\Signal Line\Electric.sym"
2750
        ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
2751
            sSystempath = "\Instrumentation\Signal Line\Connect to Process.sym"
2752
        ElseIf sType.ToUpper() = "SOFTWARE" Then
2753
            sSystempath = "\Instrumentation\Signal Line\Software Link.sym"
2754
        ElseIf sType.ToUpper() = "PNEUMATIC" Then
2755
            sSystempath = "\Instrumentation\Signal Line\Pneumatic.sym"
2756
        Else
2757
        End If
2758
        Return sSystempath
2759
    End Function
2760

    
2761
    Private Sub InitAutoRouting()
2762
        For Each oDrwing As TreeNode In Tree_Result.Nodes
2763
            For Each oDwgNode As TreeNode In oDrwing.Nodes
2764
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
2765
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
2766
                If CDrawing IsNot Nothing Then
2767
                    Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
2768
                    Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
2769
                    SetListBoxItems(ListBox_Result, "Place " & CDrawing.DwgName & "....")
2770

    
2771
                    For Each oNode As TreeNode In oDwgNode.Nodes
2772
                        Dim iItemcnt As Integer = 0
2773
                        Dim sNodeUid As String = oNode.Name
2774
                        Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2775
                        Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2776
                        If CLineNo IsNot Nothing Then
2777
                            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2778
                            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2779

    
2780
                            For Each oLineRow In oLine_Dt.Rows
2781
                                ' oLineRow(_XML_LINE_UID) = ""
2782
                                oLineRow(_XML_LINE_SPID) = ""
2783
                                oLineRow(_XML_LINE_LMCONNECTOR) = Nothing
2784
                                oLineRow(_XML_LINE_LMCONNECTOR_1) = Nothing
2785
                                oLineRow(_XML_LINE_LMCONNECTOR_2) = Nothing
2786
                                oLineRow(_XML_LINE_DRAWING_TF) = "FALSE"
2787
                                oLineRow(_XML_LINE_Check) = "FALSE"
2788
                            Next
2789
                            For Each oSymbolRow In oSymbol_Dt.Rows
2790
                                '   oSymbolRow(_XML_SYMBOL_UID) = ""
2791
                                oSymbolRow(_XML_SYMBOL_SPID) = ""
2792
                                oSymbolRow(_XML_SYMBOL_LMSYMBOL) = Nothing
2793
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_1) = Nothing
2794
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_2) = Nothing
2795
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_3) = Nothing
2796
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_4) = Nothing
2797
                                oSymbolRow(_XML_SYMBOL_Check) = "FALSE"
2798
                                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
2799

    
2800
                            Next
2801

    
2802
                        End If
2803

    
2804
                        Dim CTRIMLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2805
                        If CTRIMLineNo IsNot Nothing Then
2806
                            Dim oLine_Dt As DataTable = CTRIMLineNo.Dt_Line
2807
                            Dim oSymbol_Dt As DataTable = CTRIMLineNo.Dt_Symbol
2808

    
2809
                            For Each oLineRow In oLine_Dt.Rows
2810
                                ' oLineRow(_XML_LINE_UID) = ""
2811
                                oLineRow(_XML_LINE_SPID) = ""
2812
                                oLineRow(_XML_LINE_LMCONNECTOR) = Nothing
2813
                                oLineRow(_XML_LINE_LMCONNECTOR_1) = Nothing
2814
                                oLineRow(_XML_LINE_LMCONNECTOR_2) = Nothing
2815
                                oLineRow(_XML_LINE_DRAWING_TF) = "FALSE"
2816
                                oLineRow(_XML_LINE_Check) = "FALSE"
2817
                            Next
2818
                            For Each oSymbolRow In oSymbol_Dt.Rows
2819
                                '   oSymbolRow(_XML_SYMBOL_UID) = ""
2820
                                oSymbolRow(_XML_SYMBOL_SPID) = ""
2821
                                oSymbolRow(_XML_SYMBOL_LMSYMBOL) = Nothing
2822
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_1) = Nothing
2823
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_2) = Nothing
2824
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_3) = Nothing
2825
                                oSymbolRow(_XML_SYMBOL_LMCONNECTOR_4) = Nothing
2826
                                oSymbolRow(_XML_SYMBOL_Check) = "FALSE"
2827
                                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
2828

    
2829
                            Next
2830

    
2831
                        End If
2832
                    Next
2833
                End If
2834
            Next
2835
        Next
2836
    End Sub
2837

    
2838

    
2839

    
2840

    
2841

    
2842

    
2843
    Private Function CheckBranchLine(ByVal dStartX As Double, ByVal dStartY As Double,
2844
                                ByRef dEndX As Double, ByRef dEndY As Double, ByRef sBranchType As String, ByRef oLMConnector As LMConnector) As Boolean
2845

    
2846
        Try
2847

    
2848
            For Each oModelrow In _ModelingLine_Dt.Rows
2849
                'Dim sStartPoint As String = oModelrow(_XML_LINE_STARTPOINT)
2850
                'Dim sEndPoint As String = oModelrow(_XML_LINE_ENDPOINT)
2851
                Dim dModelStartX As Double
2852
                Dim dModelStartY As Double
2853
                Dim dModelEndX As Double
2854
                Dim dModelEndY As Double
2855
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
2856
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
2857
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
2858
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
2859
                'ConvertPointBystring(sStartPoint, dModelStartX, dModelStartY)
2860
                'ConvertPointBystring(sEndPoint, dModelEndX, dModelEndY)
2861
                'ConvertPointByImage(dModelStartX, dModelStartY, _IMG_X, _IMG_Y)
2862
                'ConvertPointByImage(dModelEndX, dModelEndY, _IMG_X, _IMG_Y)
2863
                Dim dGap As Double = 0.0002
2864
                Dim d기준x As Double = (dModelStartX + dModelEndX) / 2
2865
                Dim d기준y As Double = (dModelStartY + dModelEndY) / 2
2866
                Try
2867
                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
2868
                Catch ex As Exception
2869

    
2870
                End Try
2871
                Dim oRun As LMPipeRun = Nothing
2872
                Try
2873

    
2874
                    oRun = _Placement.PIDDataSource.GetPipeRun(oLMConnector.ModelItemID)
2875
                    Dim dResultCalc As Double = -1
2876
                    For Each objRep In oRun.Representations
2877
                        If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then
2878
                            Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
2879
                            For Each objConnectorVertex In objConnector.ConnectorVertices
2880
                                Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
2881
                                Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
2882
                                Dim dStartCalc As Double = Math.Abs(dStartX - dConn_X) + Math.Abs(dStartY - dConn_Y)
2883

    
2884
                                If dResultCalc > dStartCalc Or dResultCalc = -1 Then
2885
                                    dResultCalc = dStartCalc
2886
                                    oLMConnector = objConnector
2887
                                    d기준x = dConn_X
2888
                                    d기준y = dConn_Y
2889
                                End If
2890
                                Dim dEndCalc As Double = Math.Abs(dEndX - dConn_X) + Math.Abs(dEndY - dConn_Y)
2891
                                If dResultCalc > dEndCalc Then
2892
                                    dResultCalc = dEndCalc
2893
                                    oLMConnector = objConnector
2894
                                    d기준x = dConn_X
2895
                                    d기준y = dConn_Y
2896
                                End If
2897
                            Next
2898
                        End If
2899
                    Next
2900
                    '        _Placement.PIDConnectPointLocation(oRun, 1, dModelStartX, dModelEndX)
2901
                    '       _Placement.PIDConnectPointLocation(oRun, 2, dModelEndX, dModelEndY)
2902
                Catch ex As Exception
2903
                End Try
2904

    
2905

    
2906
                'Dim sSPID As String = oModelrow(_XML_LINE_SPID).ToString()
2907
                'Dim oPipeRun As LMPipeRun = _Placement.PIDDataSource.Get PipeRun(sSPID)
2908
                'If dModelStartX + dGap > dStartX And dModelStartX - dGap < dStartX And
2909
                '        dModelStartY + dGap > dStartY And dModelStartY - dGap < dStartY Then
2910
                '    dStartX = dModelStartX
2911
                '    dStartY = dModelStartY
2912
                'ElseIf dModelEndX + dGap > dStartX And dModelEndX - dGap < dStartX And
2913
                '        dModelEndY + dGap > dStartY And dModelEndY - dGap < dStartY Then
2914
                '    dStartX = dModelEndX
2915
                '    dStartY = dModelEndY
2916
                'End If
2917

    
2918
                'Vetical
2919
                If Math.Abs(dModelStartX - dModelEndX) <= Math.Abs(dModelStartY - dModelEndY) Then
2920
                    If Math.Abs(dStartX - dEndX) >= Math.Abs(dStartY - dEndY) Then
2921
                        'Horizontal 
2922
                        ' dGap = 0.0002 'Math.Abs(dStartX - dEndX) / 20
2923
                        '기준선의 Y범위안에 가로선이 포함되어야됨
2924
                        If (dModelStartY + dGap >= dStartY And dModelEndY - dGap <= dStartY) Or
2925
                            (dModelStartY - dGap <= dStartY And dModelEndY + dGap >= dStartY) And
2926
                            (dModelStartY + dGap >= dEndY And dModelEndY - dGap <= dEndY) Or
2927
                            (dModelStartY - dGap <= dEndY And dModelEndY + dGap >= dEndY) Then
2928
                            '기준선보다 왼쪽에 가로선이 있을때
2929
                            If d기준x >= dStartX And d기준x >= dEndX Then
2930
                                If dStartX >= dEndX Then
2931
                                    'dStartX 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
2932
                                    If dStartX + dGap >= d기준x Then
2933
                                        dStartX = d기준x
2934
                                        sBranchType = "1"
2935
                                        Return True
2936
                                    End If
2937
                                Else
2938
                                    'dEndX 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
2939
                                    If dEndX + dGap >= d기준x Then
2940
                                        dEndX = d기준x
2941
                                        sBranchType = "2"
2942
                                        Return True
2943
                                    End If
2944
                                End If
2945
                                '기준선보다 오른쪽에 가로선이 있을때
2946
                            ElseIf d기준x <= dStartX And d기준x <= dEndX Then
2947
                                If dStartX >= dEndX Then
2948
                                    'dEndX 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
2949
                                    If dEndX - dGap <= d기준x Then
2950
                                        dEndX = d기준x
2951
                                        sBranchType = "2"
2952
                                        Return True
2953
                                    End If
2954
                                Else
2955
                                    'dStartX 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
2956
                                    If dStartX - dGap <= d기준x Then
2957
                                        dStartX = d기준x
2958
                                        sBranchType = "1"
2959
                                        Return True
2960
                                    End If
2961
                                End If
2962
                            Else
2963
                                '기준선과 세로선이 겹칠때
2964
                                If (d기준x >= dStartX And d기준x <= dEndX) Or
2965
                                        (d기준x <= dStartX And d기준x >= dEndX) Then
2966
                                    If (dModelStartY <= dStartY And dModelEndY >= dEndY) Or
2967
                                        (dModelStartY >= dStartY And dModelEndY <= dEndY) Then
2968
                                        '기준선이 dStartX와 dEndX중 어느쪽에 가까운지 확인
2969
                                        '가로선의 왼쪽점과 기준선이 가까울때는 gap만큼 뺐을때 기준선보다 작은지확인
2970
                                        '가로선의 오른쪽점과 기준선이 가까울때는 gap만큼 더했을때 기준선보다 큰지확인
2971
                                        If Math.Abs(d기준x - dStartX) >= Math.Abs(d기준x - dEndX) Then
2972
                                            'EndX점이 기준선과 더 가까이 있음
2973
                                            If dStartX >= dEndX Then
2974
                                                '가로선의 왼쪽점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
2975
                                                If dEndX - dGap <= d기준x Then
2976
                                                    dEndX = d기준x
2977
                                                    sBranchType = "4"
2978
                                                    Return True
2979
                                                End If
2980
                                            Else
2981
                                                '가로선의 오른쪽점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
2982
                                                If dEndX + dGap >= d기준x Then
2983
                                                    dEndX = d기준x
2984
                                                    sBranchType = "4"
2985
                                                    Return True
2986
                                                End If
2987

    
2988
                                            End If
2989
                                        Else
2990
                                            'dStartX점이 기준선과 더 가까이 있음
2991
                                            If dStartX >= dEndX Then
2992
                                                '가로선의 오른쪽점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
2993
                                                If dStartX + dGap >= d기준x Then
2994
                                                    dStartX = d기준x
2995
                                                    sBranchType = "3"
2996
                                                    Return True
2997
                                                End If
2998

    
2999
                                            Else
3000
                                                '가로선의 왼쪽점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
3001
                                                If dStartX - dGap <= d기준x Then
3002
                                                    dStartX = d기준x
3003
                                                    sBranchType = "3"
3004
                                                    Return True
3005
                                                End If
3006
                                            End If
3007
                                        End If
3008
                                    End If
3009

    
3010
                                End If
3011
                            End If
3012
                        End If
3013

    
3014
                    End If
3015
                Else
3016
                    'Horizontal
3017
                    If Math.Abs(dModelStartX - dModelEndX) >= Math.Abs(dModelStartY - dModelEndY) Then
3018
                        'Vertical
3019
                        If Math.Abs(dStartX - dEndX) <= Math.Abs(dStartY - dEndY) Then
3020
                            '  dGap = 0.0015 'Math.Abs(dStartY - dEndY) / 80
3021

    
3022
                            '기준선의 X범위안에 세로선이 포함되어야됨
3023
                            If ((dModelStartX + dGap >= dStartX And dModelEndX - dGap <= dStartX) Or
3024
                            (dModelStartX - dGap <= dStartX And dModelEndX + dGap >= dStartX)) And
3025
                            ((dModelStartX + dGap >= dEndX And dModelEndX - dGap <= dEndX) Or
3026
                            (dModelStartX - dGap <= dEndX And dModelEndX + dGap >= dEndX)) Then
3027

    
3028
                                '가로선보다 아래에 세로선이 있을때
3029
                                If d기준y >= dStartY And d기준y >= dEndY Then
3030
                                    If dStartY >= dEndY Then
3031
                                        'dStartY 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
3032
                                        If dStartY + dGap >= d기준y Then
3033
                                            dStartY = d기준y
3034
                                            sBranchType = "3"
3035
                                            Return True
3036
                                        End If
3037
                                    Else
3038
                                        'dEndY 좌표를 기준으로 Gap만큼 더했을때 기준선보다 큰지 확인
3039
                                        If dEndY + dGap >= d기준y Then
3040
                                            dEndY = d기준y
3041

    
3042
                                            If Math.Abs(dEndX - dModelStartX) > Math.Abs(dEndX - dModelEndX) Then
3043
                                                dEndX = dModelEndX
3044
                                            Else
3045
                                                dEndX = dModelStartX
3046
                                            End If
3047

    
3048
                                            sBranchType = "4"
3049
                                            Return True
3050
                                        End If
3051
                                    End If
3052
                                    '기준선보다 위에 세로선이 있을때
3053
                                ElseIf d기준y <= dStartY And d기준y <= dEndY Then
3054
                                    If dStartY >= dEndY Then
3055
                                        'dEndY 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
3056
                                        If dEndY - dGap <= d기준y Then
3057
                                            dEndY = d기준y
3058
                                            sBranchType = "4"
3059
                                            Return True
3060
                                        End If
3061
                                    Else
3062
                                        'dStartY 좌표를 기준으로 Gap만큼 뺐을때 기준선보다 작은지 확인
3063
                                        If dStartY - dGap <= d기준y Then
3064
                                            dStartY = d기준y
3065
                                            sBranchType = "3"
3066
                                            Return True
3067
                                        End If
3068
                                    End If
3069
                                Else
3070
                                    '기준선과 세로선이 겹칠때
3071
                                    If (d기준y >= dStartY And d기준y <= dEndY) Or
3072
                                            (d기준y <= dStartY And d기준y >= dEndY) Then
3073
                                        '기준선이 dStartY와 dEndY중 어느쪽에 가까운지 확인
3074
                                        '세로선의 윗점과 기준선이 가까울때는 gap만큼 뺐을때 기준선보다 작은지확인
3075
                                        '세로선의 아래점과 기준선이 가까울때는 gap만큼 더했을때 기준선보다 큰지확인
3076
                                        If (dModelStartX <= dStartX And dModelEndX >= dEndX) Or
3077
                                            (dModelStartX >= dStartX And dModelEndX <= dEndX) Then
3078
                                            If Math.Abs(d기준y - dStartY) >= Math.Abs(d기준y - dEndY) Then
3079
                                                'Endy점이 기준선과 더 가까이 있음
3080
                                                If dStartY >= dEndY Then
3081
                                                    '세로선의 아래점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
3082
                                                    If dEndY + dGap >= d기준y Then
3083
                                                        dEndY = d기준y
3084
                                                        sBranchType = "4"
3085
                                                        Return True
3086
                                                    End If
3087
                                                Else
3088
                                                    '세로선의 윗점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
3089
                                                    If dEndY - dGap <= d기준y Then
3090
                                                        dEndY = d기준y
3091
                                                        sBranchType = "4"
3092
                                                        Return True
3093
                                                    End If
3094
                                                End If
3095
                                            Else
3096
                                                'dStartY점이 기준선과 더 가까이 있음
3097
                                                If dStartY >= dEndY Then
3098
                                                    '세로선의 윗점과 기준선이 가까우므로 gap만큼 뺐을때 기준선보다 작은지확인
3099
                                                    If dStartY - dGap <= d기준y Then
3100
                                                        dStartY = d기준y
3101
                                                        sBranchType = "3"
3102
                                                        Return True
3103
                                                    End If
3104
                                                Else
3105
                                                    '세로선의 아래점과 기준선이 가까우므로 gap만큼 더했을때 기준선보다 큰지확인
3106
                                                    If dStartY + dGap >= d기준y Then
3107
                                                        dStartY = d기준y
3108
                                                        sBranchType = "3"
3109
                                                        Return True
3110
                                                    End If
3111
                                                End If
3112
                                            End If
3113
                                        End If
3114

    
3115
                                    End If
3116
                                End If
3117
                            End If
3118
                        End If
3119
                    End If
3120
                End If
3121
            Next
3122
        Catch ex As Exception
3123

    
3124
        End Try
3125
        oLMConnector = Nothing
3126
        Return False
3127
    End Function
3128

    
3129
    Private Function CheckConnectionSymbolToSymbol(ByVal oModelingLineRows() As DataRow, ByRef dX As Double, ByRef dY As Double,
3130
                                  ByRef oLMConnector As LMConnector) As Boolean
3131
        Dim bConnectionFlag As Boolean = False
3132
        Try
3133
            For Each oModelrow In oModelingLineRows
3134
                Dim d기준x As Double = dX
3135
                Dim d기준y As Double = dY
3136
                Dim dGap As Double = 0.0002
3137
                Dim oRun As LMPipeRun = Nothing
3138
                Try
3139
                    Dim oLMSymbol As LMSymbol = oModelrow(_XML_SYMBOL_LMSYMBOL)
3140
                    Dim dX1 As Double = 0.0
3141
                    Dim dY1 As Double = 0.0
3142
                    Dim dX2 As Double = 0.0
3143
                    Dim dY2 As Double = 0.0
3144
                    For Each oConnector In oLMSymbol.Connect1Connectors
3145
                        oLMConnector = oConnector
3146
                    Next
3147
                    '  oRun = _Placement.PIDDataSource.GetPipeRun(oLMSymbol.Connect1Connectors.Nth(1).ModelItemID)
3148
                    _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
3149
                    _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
3150
                    If Math.Abs(dX - dX1) < dGap And Math.Abs(dY - dY1) < dGap Then
3151
                        dX = dX1
3152
                        dY = dY1
3153
                        bConnectionFlag = True
3154
                        Exit For
3155
                    End If
3156
                    If Math.Abs(dX - dX2) < dGap And Math.Abs(dY - dY2) < dGap Then
3157
                        dX = dX2
3158
                        dY = dY2
3159
                        bConnectionFlag = True
3160
                        Exit For
3161
                    End If
3162

    
3163
                    'For Each oConnector In oLMSymbol.Connect1Connectors
3164
                    '    For Each objConnectorVertex In oConnector.ConnectorVertices
3165
                    '        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3166
                    '        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3167
                    '        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3168
                    '            oLMConnector = oConnector
3169
                    '            dX = dConn_X
3170
                    '            dY = dConn_Y
3171
                    '            bConnectionFlag = True
3172
                    '            Exit For
3173
                    '        End If
3174
                    '    Next
3175
                    'Next
3176

    
3177
                    'For Each oConnector In oLMSymbol.Connect2Connectors
3178
                    '    For Each objConnectorVertex In oConnector.ConnectorVertices
3179
                    '        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3180
                    '        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3181
                    '        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3182
                    '            oLMConnector = oConnector
3183
                    '            dX = dConn_X
3184
                    '            dY = dConn_Y
3185
                    '            bConnectionFlag = True
3186
                    '            Exit For
3187
                    '        End If
3188
                    '    Next
3189
                    'Next
3190

    
3191

    
3192
                    'If oRun IsNot Nothing Then
3193
                    '    Dim dResultCalc As Double = -1
3194
                    '    For Each objRep In oRun.Representations
3195
                    '        Dim sRepresentationType As String = objRep.Attributes("RepresentationType").Value
3196
                    '        If objRep.Attributes("RepresentationType").Value = "Connector" Or
3197
                    '            objRep.Attributes("RepresentationType").Value = "Symbol" And
3198
                    '             objRep.Attributes("ItemStatus").Value = "Active" Then
3199
                    '            Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
3200
                    '            For Each objConnectorVertex In objConnector.ConnectorVertices
3201
                    '                Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3202
                    '                Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3203
                    '                If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3204
                    '                    oLMConnector = objConnector
3205
                    '                    d기준x = dConn_X
3206
                    '                    d기준y = dConn_Y
3207
                    '                    bConnectionFlag = True
3208
                    '                    Exit For
3209
                    '                End If
3210
                    '            Next
3211
                    '        End If
3212
                    '    Next
3213
                    'End If
3214

    
3215
                Catch ex As Exception
3216
                End Try
3217
            Next
3218

    
3219
        Catch ex As Exception
3220

    
3221
        End Try
3222
        Return bConnectionFlag
3223
    End Function
3224

    
3225
    Private Function CheckConnectionSymbolToLine(ByVal oModelingLineRows() As DataRow, ByRef dX As Double, ByRef dY As Double,
3226
ByVal dCenterX As Double, ByVal dCenterY As Double, ByRef oLMConnector As LMConnector) As LMSymbol
3227
        Dim bConnectionFlag As Boolean = False
3228
        Dim oLMSymbol As LMSymbol = Nothing
3229
        Try
3230

    
3231
            For Each oModelrow In _ModelingSymbol_Dt.Rows
3232
                Dim dMinx As Double = oModelrow(_XML_SYMBOL_MIN_X)
3233
                Dim dMaxx As Double = oModelrow(_XML_SYMBOL_MAX_X)
3234
                Dim dMiny As Double = oModelrow(_XML_SYMBOL_MIN_Y)
3235
                Dim dMaxy As Double = oModelrow(_XML_SYMBOL_MAX_Y)
3236
                Dim dGap As Double = 0.001
3237
                If dMinx <= dX And dMaxx >= dX And dMiny <= dY And dMaxy >= dY Then
3238
                    oLMSymbol = oModelrow(_XML_SYMBOL_LMSYMBOL)
3239
                    Dim dX1 As Double = 0.0
3240
                    Dim dY1 As Double = 0.0
3241
                    Dim dX2 As Double = 0.0
3242
                    Dim dY2 As Double = 0.0
3243
                    Dim dX3 As Double = 0.0
3244
                    Dim dY3 As Double = 0.0
3245
                    Dim dX4 As Double = 0.0
3246
                    Dim dY4 As Double = 0.0
3247
                    Dim dX5 As Double = 0.0
3248
                    Dim dY5 As Double = 0.0
3249
                    Dim dX6 As Double = 0.0
3250
                    Dim dY6 As Double = 0.0
3251
                    Dim dX7 As Double = 0.0
3252
                    Dim dY7 As Double = 0.0
3253
                    Dim dX8 As Double = 0.0
3254
                    Dim dY8 As Double = 0.0
3255
                    _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
3256
                    _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
3257
                    _Placement.PIDConnectPointLocation(oLMSymbol, 3, dX3, dY3)
3258
                    _Placement.PIDConnectPointLocation(oLMSymbol, 4, dX4, dY4)
3259
                    _Placement.PIDConnectPointLocation(oLMSymbol, 5, dX5, dY5)
3260
                    _Placement.PIDConnectPointLocation(oLMSymbol, 6, dX6, dY6)
3261
                    _Placement.PIDConnectPointLocation(oLMSymbol, 7, dX7, dY7)
3262
                    _Placement.PIDConnectPointLocation(oLMSymbol, 8, dX8, dY8)
3263

    
3264
                    If Math.Abs(dX - dX1) <= dGap And Math.Abs(dY - dY1) <= dGap Then
3265
                        dX = dX1
3266
                        dY = dY1
3267
                    ElseIf Math.Abs(dX - dX2) <= dGap And Math.Abs(dY - dY2) <= dGap Then
3268
                        dX = dX2
3269
                        dY = dY2
3270
                    ElseIf Math.Abs(dX - dX3) <= dGap And Math.Abs(dY - dY3) <= dGap Then
3271
                        dX = dX3
3272
                        dY = dY3
3273
                    ElseIf Math.Abs(dX - dX4) <= dGap And Math.Abs(dY - dY4) <= dGap Then
3274
                        dX = dX4
3275
                        dY = dY4
3276
                    ElseIf Math.Abs(dX - dX5) <= dGap And Math.Abs(dY - dY5) <= dGap Then
3277
                        dX = dX5
3278
                        dY = dY5
3279
                    ElseIf Math.Abs(dX - dX6) <= dGap And Math.Abs(dY - dY6) <= dGap Then
3280
                        dX = dX6
3281
                        dY = dY6
3282
                    ElseIf Math.Abs(dX - dX7) <= dGap And Math.Abs(dY - dY7) <= dGap Then
3283
                        dX = dX7
3284
                        dY = dY7
3285
                    ElseIf Math.Abs(dX - dX8) <= dGap And Math.Abs(dY - dY8) <= dGap Then
3286
                        dX = dX8
3287
                        dY = dY8
3288
                    End If
3289
                End If
3290
            Next
3291

    
3292

    
3293

    
3294
            'For Each oModelrow In oModelingLineRows
3295
            '    Dim d기준x As Double = dCenterX
3296
            '    Dim d기준y As Double = dCenterY
3297
            '    Dim dGap As Double = 0.001
3298
            '    Dim oRun As LMPipeRun = Nothing
3299
            '    Dim dCheckGap As Double = 0
3300
            '    Try
3301

    
3302
            '        Dim dX1 As Double = 0.0
3303
            '        Dim dY1 As Double = 0.0
3304
            '        Dim dX2 As Double = 0.0
3305
            '        Dim dY2 As Double = 0.0
3306
            '        '  oRun = _Placement.PIDDataSource.GetPipeRun(oLMSymbol.Connect1Connectors.Nth(1).ModelItemID)
3307
            '        oLMSymbol = oModelrow(_XML_SYMBOL_LMSYMBOL)
3308
            '        For Each oConnector In oLMSymbol.Connect1Connectors
3309
            '            oLMConnector = oConnector
3310
            '        Next
3311
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
3312
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
3313
            '        '  If Math.Abs(dX - dX1) < dGap And Math.Abs(dY - dY1) < dGap And
3314
            '        If Math.Abs(d기준x - dX1) < dCheckGap And Math.Abs(d기준y - dY1) < dCheckGap Or dCheckGap = 0 Then
3315
            '            dX = dX1
3316
            '            dY = dY1
3317
            '            bConnectionFlag = True
3318
            '            dCheckGap = Math.Abs(d기준x - dX1) + Math.Abs(d기준y - dY1)
3319
            '        End If
3320
            '        'If Math.Abs(dX - dX2) < dGap And Math.Abs(dY - dY2) < dGap And
3321
            '        '  Math.Abs(d기준x - dX2) < dCheckGap And Math.Abs(d기준y - dY2 < dCheckGap) Or dCheckGap = 0 Then
3322
            '        If Math.Abs(d기준x - dX2) < dCheckGap And Math.Abs(d기준y - dY2) < dCheckGap Or dCheckGap = 0 Then
3323
            '            dX = dX2
3324
            '            dY = dY2
3325
            '            bConnectionFlag = True
3326
            '        End If
3327

    
3328
            '    Catch ex As Exception
3329
            '    End Try
3330
            '    If bConnectionFlag Then
3331
            '        oLMSymbol = oModelrow(_XML_SYMBOL_LMSYMBOL)
3332
            '    Else
3333
            '        oLMSymbol = Nothing
3334
            '    End If
3335
            'Next
3336

    
3337
        Catch ex As Exception
3338

    
3339
        End Try
3340

    
3341
        Return oLMSymbol
3342
    End Function
3343

    
3344
    ''' <summary>
3345
    ''' 라인과 라인이 만나는점이 브런치점인지 확인, 오차범위내 라인보정
3346
    ''' </summary>
3347
    ''' <param name="oModelingLineRows"></param>
3348
    ''' <param name="dStartX"></param>
3349
    ''' <param name="dStartY"></param>
3350
    ''' <param name="dEndX"></param>
3351
    ''' <param name="dEndY"></param>
3352
    ''' <param name="oLMConnector"></param>
3353
    ''' <returns></returns>
3354
    Private Function CheckBranchLine(ByVal oModelingLineRows As DataRowCollection, ByRef dStartX As Double, ByRef dStartY As Double,
3355
                                     ByRef dEndX As Double, ByRef dEndY As Double, ByRef oLMConnector As LMConnector) As String
3356
        Dim bConnectionFlag As Boolean = False
3357
        Dim sBranchDirection As String = ""
3358
        Try
3359
            For Each oModelrow In oModelingLineRows
3360
                Dim dModelStartX As Double
3361
                Dim dModelStartY As Double
3362
                Dim dModelEndX As Double
3363
                Dim dModelEndY As Double
3364
                Dim dGap As Double = 0.002
3365
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3366
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3367
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3368
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3369

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

    
3374
                    '기본라인의 X축영역안에 현재선이 있어야됨
3375
                    '      If dModelEndY > dModelStartY Then
3376
                    If (dStartX < dModelEndX And dStartX > dModelStartX) Or
3377
                            (dStartX > dModelEndX And dStartX < dModelStartX) Then
3378
                        '[오차범위 수정]
3379
                        '현재선의 Y축방향이 기존라인의 X축방향을 통과하는지 확인
3380
                        If dStartY < dEndY Then
3381
                            If dEndY > dModelStartY And dModelStartY > dStartY Then
3382
                                If dEndY - dModelStartY > dModelStartY - dStartY Then
3383
                                    '위쪽으로 라인이 나와있을때
3384
                                    '현재선 중 작은 Y좌표를 오차범위만큼 더했을때 기존라인의 Y축보다 큰지확인 
3385
                                    'Y축보다 클경우 작은 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 큰 Y좌표에 더한다.
3386
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3387
                                        Dim dAddPoint As Double = dModelStartY - dStartY
3388
                                        dEndY = dEndY + dAddPoint
3389
                                        dStartY = dModelStartY
3390
                                        sBranchDirection = "START"
3391
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3392
                                        Exit For
3393
                                    End If
3394
                                Else
3395
                                    '아래쪽으로 라인이 나와있을때
3396
                                    '현재선 중 큰 Y좌표를 오차범위만큼 뺐을때 기존라인의 Y축보다 작은지확인 
3397
                                    'Y축보다 작을경우 큰 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 작은 Y좌표에 뺀다.
3398
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3399
                                        Dim dAddPoint As Double = dEndY - dModelStartY
3400
                                        dStartY = dStartY - dAddPoint
3401
                                        dEndY = dModelStartY
3402
                                        sBranchDirection = "END"
3403
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3404
                                        Exit For
3405
                                    End If
3406
                                End If
3407
                            Else
3408
                                '현재선의 Y축방향이 기존라인의 X축방향에 못미치는지 확인
3409
                                If dStartY > dModelStartY Then
3410
                                    '기존라인보다 위쪽에 현재선이 있을때
3411
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3412
                                        '오차범위만큼 작은 y좌표를 뺐을때 기존라인보다 아래쪽에 있을경우 오차보정
3413
                                        Dim dAddPoint As Double = dStartY - dModelStartY
3414
                                        dEndY = dEndY - dAddPoint
3415
                                        dStartY = dModelStartY
3416
                                        sBranchDirection = "START"
3417
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3418
                                        Exit For
3419
                                    End If
3420
                                Else
3421
                                    '기존라인보다 아래쪽에 현재선이 있을때
3422
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3423
                                        '오차범위만큼 큰 y좌표를 더했을때 기존라인보다 위쪽에 있을경우 오차보정
3424
                                        Dim dAddPoint As Double = dModelStartY - dEndY
3425
                                        dEndY = dModelStartY
3426
                                        dStartY = dStartY + dAddPoint
3427
                                        sBranchDirection = "END"
3428
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3429
                                        Exit For
3430
                                    End If
3431
                                End If
3432
                            End If
3433
                        Else
3434
                            If dEndY < dModelStartY And dModelStartY < dStartY Then
3435
                                If dModelStartY - dEndY < dStartY - dModelStartY Then
3436
                                    '위쪽으로 라인이 나와있을때
3437
                                    '현재선 중 작은 Y좌표를 오차범위만큼 더했을때 기존라인의 Y축보다 큰지확인 
3438
                                    'Y축보다 클경우 작은 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 큰 Y좌표에 더한다.
3439
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3440
                                        Dim dAddPoint As Double = dModelStartY - dEndY
3441
                                        dStartY = dStartY + dAddPoint
3442
                                        dEndY = dModelStartY
3443
                                        sBranchDirection = "END"
3444
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3445
                                        Exit For
3446
                                    End If
3447
                                Else
3448
                                    '아래쪽으로 라인이 나와있을때
3449
                                    '현재선 중 큰 Y좌표를 오차범위만큼 뺐을때 기존라인의 Y축보다 작은지확인 
3450
                                    'Y축보다 작을경우 큰 Y좌표를 기존라인의 Y축에 맞추고 더한 길이만큼 작은 Y좌표에 뺀다.
3451
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3452
                                        Dim dAddPoint As Double = dStartY - dModelStartY
3453
                                        dEndY = dEndY - dAddPoint
3454
                                        dStartY = dModelStartY
3455
                                        sBranchDirection = "START"
3456
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3457
                                        Exit For
3458
                                    End If
3459
                                End If
3460
                            Else
3461
                                If dEndY > dModelStartY Then
3462
                                    '기존라인보다 우측에 현재선이 있을때
3463
                                    If Math.Abs(dEndY - dModelStartY) <= dGap Then
3464
                                        '오차범위만큼 작은 x좌표를 뺐을때 기존라인보다 좌측에 있을경우 오차보정
3465
                                        Dim dAddPoint As Double = dEndY - dModelStartY
3466
                                        dStartY = dStartY - dAddPoint
3467
                                        dEndY = dModelStartY
3468
                                        sBranchDirection = "END"
3469
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3470
                                        Exit For
3471
                                    End If
3472
                                Else
3473
                                    '기존라인보다 좌측에 현재선이 있을때
3474
                                    If Math.Abs(dStartY - dModelStartY) <= dGap Then
3475
                                        '오차범위만큼 큰 x좌표를 더했을때 기존라인보다 우측에 있을경우 오차보정
3476
                                        Dim dAddPoint As Double = dModelStartY - dStartY
3477
                                        dStartY = dModelStartY
3478
                                        dEndY = dEndY + dAddPoint
3479
                                        sBranchDirection = "START"
3480
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3481
                                        Exit For
3482
                                    End If
3483
                                End If
3484
                            End If
3485
                        End If
3486
                    End If
3487
                    '기존라인이 Y축방향이라면 현재선은 X축방향이 되어야됨
3488
                ElseIf Math.Abs(dModelStartX - dModelEndX) < Math.Abs(dModelStartY - dModelEndY) And
3489
                Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
3490

    
3491
                    '기본라인의 Y축영역안에 현재선이 있어야됨
3492
                    '      If dModelEndY > dModelStartY Then
3493
                    If (dStartY < dModelEndY And dStartY > dModelStartY) Or
3494
                            (dStartY > dModelEndY And dStartY < dModelStartY) Then
3495
                        '[오차범위 수정]
3496
                        '현재선의 X축방향이 기존라인의 Y축방향을 통과하는지 확인
3497
                        If dStartX < dEndX Then
3498
                            If dEndX > dModelStartX And dModelStartX > dStartX Then
3499
                                If dEndX - dModelStartX > dModelStartX - dStartX Then
3500
                                    '우측으로 라인이 나와있을때
3501
                                    '현재선 중 작은 X좌표를 오차범위만큼 더했을때 기존라인의 X축보다 큰지확인 
3502
                                    'X축보다 클경우 작은 X좌표를 기존라인의 X축에 맞추고 더한 길이만큼 큰 X좌표에 더한다.
3503
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3504
                                        Dim dAddPoint As Double = dModelStartX - dStartX
3505
                                        dEndX = dEndX + dAddPoint
3506
                                        dStartX = dModelStartX
3507
                                        sBranchDirection = "START"
3508
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3509
                                        Exit For
3510
                                    End If
3511
                                Else
3512
                                    '좌측으로 라인이 나와있을때
3513
                                    '현재선 중 큰 X좌표를 오차범위만큼 뺐을때 기존라인의 X축보다 작은지확인 
3514
                                    'X축보다 작을경우 큰 X좌표를 기존라인의 X축에 맞추고 뺀 길이만큼 작은 X좌표에 뺀다.
3515
                                    If Math.Abs(dEndX - dModelStartX) <= dGap Then
3516
                                        Dim dAddPoint As Double = dEndX - dModelStartX
3517
                                        dStartX = dStartX - dAddPoint
3518
                                        dEndX = dModelStartX
3519
                                        sBranchDirection = "END"
3520
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3521
                                        Exit For
3522
                                    End If
3523
                                End If
3524
                            Else
3525
                                '현재선의 X축방향이 기존라인의 Y축방향에 못미치는지 확인
3526
                                If dStartX > dModelStartX Then
3527
                                    '기존라인보다 우측에 현재선이 있을때
3528
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3529
                                        '오차범위만큼 작은 x좌표를 뺐을때 기존라인보다 좌측에 있을경우 오차보정
3530
                                        Dim dAddPoint As Double = dStartX - dModelStartX
3531
                                        dEndX = dEndX - dAddPoint
3532
                                        dStartX = dModelStartX
3533
                                        sBranchDirection = "START"
3534
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3535
                                        Exit For
3536
                                    End If
3537
                                Else
3538
                                    '기존라인보다 좌측에 현재선이 있을때
3539
                                    If Math.Abs(dEndX - dModelStartX) <= dGap Then
3540
                                        '오차범위만큼 큰 x좌표를 더했을때 기존라인보다 우측에 있을경우 오차보정
3541
                                        Dim dAddPoint As Double = dModelStartX - dEndX
3542
                                        dEndX = dModelStartX
3543
                                        dStartX = dStartX + dAddPoint
3544
                                        sBranchDirection = "END"
3545
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3546
                                        Exit For
3547
                                    End If
3548
                                End If
3549
                            End If
3550
                        Else
3551
                            If dEndX < dModelStartX And dModelStartX < dStartX Then
3552
                                If dModelStartX - dEndX < dStartX - dModelStartX Then
3553
                                    '우측으로 라인이 나와있을때
3554
                                    '현재선 중 작은 X좌표를 오차범위만큼 더했을때 기존라인의 X축보다 큰지확인 
3555
                                    'X축보다 클경우 작은 X좌표를 기존라인의 X축에 맞추고 더한 길이만큼 큰 X좌에 더한다.
3556
                                    If Math.Abs(dModelStartX - dEndX) <= dGap Then
3557
                                        Dim dAddPoint As Double = dModelStartX - dEndX
3558
                                        dStartX = dStartX + dAddPoint
3559
                                        dEndX = dModelStartX
3560
                                        sBranchDirection = "END"
3561
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3562
                                        Exit For
3563
                                    End If
3564
                                Else
3565
                                    '좌측으로 라인이 나와있을때
3566
                                    '현재선 중 큰 X좌표를 오차범위만큼 뺐을때 기존라인의 X축보다 작은지확인 
3567
                                    'X축보다 작을경우 큰 X좌표를 기존라인의 X축에 맞추고 뺀 길이만큼 작은 X좌표에 뺀다.
3568
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3569
                                        Dim dAddPoint As Double = dStartX - dModelStartX
3570
                                        dEndX = dEndX - dAddPoint
3571
                                        dStartX = dModelStartX
3572
                                        sBranchDirection = "START"
3573
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3574
                                        Exit For
3575
                                    End If
3576

    
3577
                                End If
3578
                            Else
3579
                                If dEndX > dModelStartX Then
3580
                                    '기존라인보다 우측에 현재선이 있을때
3581
                                    If Math.Abs(dEndX - dModelStartX) <= dGap Then
3582
                                        '오차범위만큼 작은 x좌표를 뺐을때 기존라인보다 좌측에 있을경우 오차보정
3583
                                        Dim dAddPoint As Double = dEndX - dModelStartX
3584
                                        dStartX = dStartX - dAddPoint
3585
                                        dEndX = dModelStartX
3586
                                        sBranchDirection = "END"
3587
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3588
                                        Exit For
3589
                                    End If
3590
                                Else
3591
                                    '기존라인보다 좌측에 현재선이 있을때
3592
                                    If Math.Abs(dStartX - dModelStartX) <= dGap Then
3593
                                        '오차범위만큼 큰 x좌표를 더했을때 기존라인보다 우측에 있을경우 오차보정
3594
                                        Dim dAddPoint As Double = dModelStartX - dStartX
3595
                                        dStartX = dModelStartX
3596
                                        dEndX = dEndX + dAddPoint
3597
                                        sBranchDirection = "START"
3598
                                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3599
                                        Exit For
3600
                                    End If
3601
                                End If
3602
                            End If
3603
                        End If
3604
                    End If
3605
                End If
3606
            Next
3607
        Catch ex As Exception
3608
            bConnectionFlag = False
3609
            oLMConnector = Nothing
3610
        End Try
3611
        Return sBranchDirection
3612

    
3613
    End Function
3614

    
3615
    Private Function UpdateCheckBranchLine(ByRef dX As Double, ByRef dY As Double,
3616
                                  ByRef oLMConnector As LMConnector, ByRef sUid As String) As Boolean
3617
        Dim oDataSource As LMADataSource = _Placement.PIDDataSource
3618
        Dim bCheckBranchItem As Boolean = False
3619
        Dim iGapCheck As Integer = 0
3620
        Try
3621
            For Each oModelrow In _ModelingLine_Dt.Rows
3622
                Dim d기준x As Double = dX
3623
                Dim d기준y As Double = dY
3624
                Dim dGap As Double = 0.001
3625
                Dim oRun As LMPipeRun = Nothing
3626
                Dim dModelStartX As Double
3627
                Dim dModelStartY As Double
3628
                Dim dModelEndX As Double
3629
                Dim dModelEndY As Double
3630
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3631
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3632
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3633
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3634
                d기준x = (dModelStartX + dModelEndX) / 2
3635
                d기준y = (dModelStartY + dModelEndY) / 2
3636

    
3637
                Dim dMax_X As Double = 0.0
3638
                Dim dMax_Y As Double = 0.0
3639
                Dim dMin_X As Double = 0.0
3640
                Dim dMin_Y As Double = 0.0
3641
                If dModelEndX > dModelStartX Then
3642
                    dMax_X = dModelEndX
3643
                    dMin_X = dModelStartX
3644
                Else
3645
                    dMax_X = dModelStartX
3646
                    dMin_X = dModelEndX
3647
                End If
3648

    
3649
                If dModelEndY > dModelStartY Then
3650
                    dMax_Y = dModelEndY
3651
                    dMin_Y = dModelStartY
3652
                Else
3653
                    dMax_Y = dModelStartY
3654
                    dMin_Y = dModelEndY
3655
                End If
3656

    
3657
                If dX <= dMax_X + dGap And dX >= dMin_X - dGap And
3658
                  dY <= dMax_Y + dGap And dY >= dMin_Y - dGap Then
3659
                    If Math.Abs(dMax_X - dMin_X) > Math.Abs(dMax_Y - dMin_Y) Then
3660
                        dY = dMax_Y
3661
                    Else
3662
                        dX = dMax_X
3663
                    End If
3664

    
3665
                    Try
3666
                        Dim sModelItemID As String = oModelrow(_XML_LINE_SPID).ToString()
3667
                        sUid = oModelrow(_XML_LINE_UID).ToString()
3668
                        oRun = oDataSource.GetPipeRun(sModelItemID)
3669
                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3670
                    Catch ex As Exception
3671
                    End Try
3672
                    Try
3673
                        If oRun IsNot Nothing Then
3674
                            Dim dResultCalc As Double = -1
3675
                            Dim bBranchFlag As Boolean = False
3676
                            Dim dBranchX As Double = 0
3677
                            Dim dBranchY As Double = 0
3678
                            For Each objRep In oRun.Representations
3679
                                '  Dim sAttriName As String
3680
                                'For Each objAttr In objRep.Attributes
3681
                                '    sAttriName = objAttr.name
3682
                                'Next
3683
                                'MsgBox(objRep.RepresentationType)
3684
                                If objRep.RepresentationType = "Connector" Then
3685
                                    Dim objConnector As LMConnector = oDataSource.GetConnector(objRep.ID)
3686
                                    '     Dim sItemStatus As String = objConnector.Attributes("ItemStatus").Value
3687
                                    '   Dim sModelTypeName As String = objConnector.ModelItemObject.Attributes("ItemTypeName").Value
3688

    
3689
                                    'Dim dConn_SX As Double = 0
3690
                                    'Dim dConn_SY As Double = 0
3691
                                    'Dim dConn_EX As Double = 0
3692
                                    'Dim dConn_EY As Double = 0
3693
                                    Dim dConn_X As Double = 0
3694
                                    Dim dConn_Y As Double = 0
3695
                                    For Each objConnectorVertex In objConnector.ConnectorVertices
3696
                                        dConn_X = objConnectorVertex.Attributes("XCoordinate").Value
3697
                                        dConn_Y = objConnectorVertex.Attributes("YCoordinate").Value
3698
                                        'If dConn_SX = 0 Then
3699
                                        '    dConn_SX = objConnectorVertex.Attributes("XCoordinate").Value
3700
                                        '    dConn_SY = objConnectorVertex.Attributes("YCoordinate").Value
3701
                                        'Else
3702
                                        '    dConn_EX = objConnectorVertex.Attributes("XCoordinate").Value
3703
                                        '    dConn_EY = objConnectorVertex.Attributes("YCoordinate").Value
3704
                                        'End If
3705
                                        Dim dCalc As Double = Math.Abs(dConn_X - dX) + Math.Abs(dConn_Y - dY)
3706
                                        If bBranchFlag = False Then
3707
                                            If dResultCalc = -1 Or dResultCalc > dCalc Then
3708
                                                dResultCalc = dCalc
3709
                                                oLMConnector = objConnector
3710
                                                bCheckBranchItem = True
3711
                                            End If
3712
                                        Else
3713
                                            If (dConn_X >= dX And dBranchX <= dX And dConn_Y >= dY And dBranchY <= dY) Or
3714
                                               (dConn_X <= dX And dBranchX >= dX And dConn_Y <= dY And dBranchY >= dY) Then
3715
                                                If dResultCalc = -1 Or dResultCalc > dCalc Then
3716
                                                    dResultCalc = dCalc
3717
                                                    oLMConnector = objConnector
3718
                                                    bCheckBranchItem = True
3719
                                                End If
3720
                                            End If
3721
                                        End If
3722

    
3723

    
3724
                                        'If dConn_EX <> 0 And dConn_EY <> 0 Then
3725
                                        '    If dConn_SX >= dX And dConn_EX <= dX And dConn_SY >= dY And dConn_EY <= dY Then
3726
                                        '        oLMConnector = objConnector
3727
                                        '        Exit For
3728
                                        '    ElseIf dConn_SX <= dX And dConn_EX >= dX And dConn_SY <= dY And dConn_EY >= dY Then
3729
                                        '        oLMConnector = objConnector
3730
                                        '        Exit For
3731
                                        '    Else
3732
                                        '        If dConn_EX > 0 Then
3733
                                        '            dConn_SX = dConn_EX
3734
                                        '            dConn_SY = dConn_EY
3735
                                        '        End If
3736
                                        '    End If
3737
                                        'End If
3738

    
3739
                                    Next
3740
                                    'If oLMConnector IsNot Nothing Then
3741
                                    '    Exit For
3742
                                    'End If
3743
                                ElseIf objRep.RepresentationType = "Branch" Then
3744
                                    Dim objConnector As LMSymbol = oDataSource.GetSymbol(objRep.ID)
3745
                                    dBranchX = objConnector.Attributes("XCoordinate").Value
3746
                                    dBranchY = objConnector.Attributes("YCoordinate").Value
3747
                                    bBranchFlag = True
3748
                                End If
3749
                                'If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then
3750
                                '    Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
3751
                                '    For Each objConnectorVertex In objConnector.ConnectorVertices
3752
                                '        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3753
                                '        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3754
                                '        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3755
                                '            oLMConnector = objConnector
3756
                                '            dX = dConn_X
3757
                                '            dY = dConn_Y
3758
                                '            bConnectionFlag = True
3759
                                '        End If
3760
                                '    Next
3761
                                'End If
3762
                            Next
3763
                        End If
3764
                    Catch ex As Exception
3765
                    End Try
3766
                    '    oUid = oModelrow(_XML_LINE_UID).ToString()
3767
                    ' Dim oID As String = oModelrow(_XML_LINE_SPID)
3768
                    '    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3769
                    '    oID = oLMConnector.ModelItemID
3770
                    '  oLMConnector = _Placement.PIDDataSource.GetConnector(oID)
3771
                    'If oLMConnector IsNot Nothing Then
3772
                    '    Exit For
3773
                    'End If
3774
                End If
3775

    
3776

    
3777
            Next
3778
        Catch ex As Exception
3779
            bCheckBranchItem = False
3780
            oLMConnector = Nothing
3781
        End Try
3782
        Return bCheckBranchItem
3783
    End Function
3784

    
3785
    ''' <summary>
3786
    ''' 라인과 특정 포인트에 커넥션을 확인하는 메서드
3787
    ''' </summary>
3788
    ''' <param name="oModelingLineRows"></param>
3789
    ''' <param name="dX"></param>
3790
    ''' <param name="dY"></param>
3791
    ''' <param name="oLMConnector"></param>
3792
    ''' <param name="dPreConnX"></param>
3793
    ''' <param name="dPreConnY"></param>
3794
    ''' <returns></returns>
3795

    
3796
    Private Function CheckConnectionLine(ByRef dX As Double, ByRef dY As Double,
3797
                                  ByRef oLMConnector As LMConnector, ByRef sUid As String) As Boolean
3798
        Dim bConnectionFlag As Boolean = False
3799
        Dim iGapCheck As Integer = 0
3800
        Try
3801
            For Each oModelrow In _ModelingLine_Dt.Rows
3802
                Dim d기준x As Double = dX
3803
                Dim d기준y As Double = dY
3804
                Dim dGap As Double = 0.001
3805
                Dim oRun As LMPipeRun = Nothing
3806
                Dim dModelStartX As Double
3807
                Dim dModelStartY As Double
3808
                Dim dModelEndX As Double
3809
                Dim dModelEndY As Double
3810
                dModelStartX = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3811
                dModelStartY = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3812
                dModelEndX = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3813
                dModelEndY = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3814
                d기준x = (dModelStartX + dModelEndX) / 2
3815
                d기준y = (dModelStartY + dModelEndY) / 2
3816

    
3817
                Dim bCheckEqual As Boolean = False
3818
                If dX <= dModelStartX + dGap And dX >= dModelStartX - dGap And
3819
                        dY <= dModelStartY + dGap And dY >= dModelStartY - dGap Then
3820
                    bCheckEqual = True
3821
                ElseIf dX <= dModelEndX + dGap And dX >= dModelEndX - dGap And
3822
                        dY <= dModelEndY + dGap And dY >= dModelEndY - dGap Then
3823
                    bCheckEqual = True
3824
                End If
3825
                If bCheckEqual Then
3826
                    Try
3827
                        oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
3828
                        sUid = oModelrow(_XML_LINE_UID)
3829
                        oRun = _Placement.PIDDataSource.GetPipeRun(oLMConnector.ModelItemID)
3830
                    Catch ex As Exception
3831
                    End Try
3832
                    Try
3833
                        If oRun IsNot Nothing Then
3834
                            Dim dResultCalc As Double = -1
3835
                            For Each objRep In oRun.Representations
3836
                                If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then
3837
                                    Dim objConnector As LMConnector = _Placement.PIDDataSource.GetConnector(objRep.ID)
3838
                                    For Each objConnectorVertex In objConnector.ConnectorVertices
3839
                                        Dim dConn_X As Double = objConnectorVertex.Attributes("XCoordinate").Value
3840
                                        Dim dConn_Y As Double = objConnectorVertex.Attributes("YCoordinate").Value
3841
                                        If Math.Abs(dX - dConn_X) < dGap And Math.Abs(dY - dConn_Y) < dGap Then
3842
                                            oLMConnector = objConnector
3843
                                            dX = dConn_X
3844
                                            dY = dConn_Y
3845
                                            bConnectionFlag = True
3846
                                        End If
3847
                                    Next
3848
                                End If
3849
                            Next
3850
                        End If
3851
                    Catch ex As Exception
3852
                    End Try
3853
                Else
3854
                End If
3855
            Next
3856
        Catch ex As Exception
3857
            bConnectionFlag = False
3858
            oLMConnector = Nothing
3859
        End Try
3860
        Return bConnectionFlag
3861
    End Function
3862

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

    
3870
        Dim oModel_Dt As New DataTable()
3871
        oModel_Dt.Columns.Add("X")
3872
        oModel_Dt.Columns.Add("Y")
3873
        oModel_Dt.Columns.Add("Type")
3874
        oModel_Dt.Columns.Add("SPID")
3875
        Dim dGap = 0.001
3876
        If Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
3877
            sCurrentDirection = "X"
3878
            If dStartX > dEndX Then
3879
                Dim dTempX As Double = dEndX
3880
                dEndX = dStartX
3881
                dStartX = dTempX
3882
                Dim dTempY As Double = dEndY
3883
                dEndY = dStartY
3884
                dStartY = dTempY
3885
            End If
3886
            '현재선이 X축방향
3887
            Try
3888
                For Each oModelrow In _ModelingLine_Dt.Rows
3889
                    Dim dModelStart_X As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3890
                    Dim dModelStart_Y As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3891
                    Dim dModelEnd_X As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3892
                    Dim dModelEnd_Y As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3893
                    Dim sSPID As String = oModelrow(_XML_LINE_SPID)
3894
                    If dStartX < dModelStart_X And dStartX < dModelEnd_X And
3895
                       dEndX > dModelStart_X And dEndX > dModelEnd_X Then
3896
                        Dim dAddX As Double = 0
3897
                        Dim dAddY As Double = dStartY
3898
                        Dim sType As String = ""
3899
                        If dStartY = dModelStart_Y Then
3900
                            dAddX = dModelStart_X
3901
                        ElseIf dStartY = dModelEnd_Y Then
3902
                            dAddX = dModelEnd_X
3903
                        ElseIf dStartY <= dModelStart_Y + dGap And dStartY >= dModelStart_Y - dGap Then
3904
                            dAddX = dModelStart_X
3905
                            If dStartY > dModelStart_Y Then
3906
                                sType = "AddLine"
3907
                            End If
3908
                        ElseIf dStartY <= dModelEnd_Y + dGap And dStartY >= dModelEnd_Y - dGap Then
3909
                            dAddX = dModelEnd_X
3910
                            If dStartY > dModelEnd_Y Then
3911
                                sType = "AddLine"
3912
                            End If
3913
                        End If
3914
                        If dAddX <> 0 Then
3915
                            Dim oDatarow As DataRow = oModel_Dt.NewRow()
3916
                            oDatarow("X") = dAddX
3917
                            oDatarow("Y") = dAddY
3918
                            oDatarow("Type") = sType
3919
                            oDatarow("SPID") = sSPID
3920
                            oModel_Dt.Rows.Add(oDatarow)
3921
                        End If
3922
                    End If
3923
                Next
3924
            Catch ex As Exception
3925
            End Try
3926
        Else
3927
            '현재선이 y축방향
3928
            sCurrentDirection = "Y"
3929
            Try
3930
                For Each oModelrow In _ModelingLine_Dt.Rows
3931
                    Dim dModelStart_X As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_X)
3932
                    Dim dModelStart_Y As Double = oModelrow(_XML_LINE_DWG_STARTPOINT_Y)
3933
                    Dim dModelEnd_X As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_X)
3934
                    Dim dModelEnd_Y As Double = oModelrow(_XML_LINE_DWG_ENDPOINT_Y)
3935
                    Dim sSPID As String = oModelrow(_XML_LINE_SPID)
3936
                    If dStartY < dModelStart_Y And dStartY < dModelEnd_Y And
3937
                       dEndY > dModelStart_Y And dEndY > dModelEnd_Y Then
3938
                        Dim dAddX As Double = dStartX
3939
                        Dim dAddY As Double = 0
3940
                        Dim sType As String = ""
3941
                        If dStartX = dModelStart_X Then
3942
                            dAddY = dModelStart_Y
3943
                        ElseIf dStartX = dModelEnd_X Then
3944
                            dAddY = dModelEnd_Y
3945
                        ElseIf dStartX <= dModelStart_X + dGap And dStartX >= dModelStart_X - dGap Then
3946
                            dAddY = dModelStart_Y
3947
                            If dStartX > dModelStart_X Then
3948
                                sType = "AddLine"
3949
                            End If
3950
                        ElseIf dStartX <= dModelEnd_X + dGap And dStartX >= dModelEnd_X - dGap Then
3951
                            dAddY = dModelEnd_Y
3952
                            If dStartX > dModelEnd_X Then
3953
                                sType = "AddLine"
3954
                            End If
3955
                        End If
3956
                        If dAddX <> 0 Then
3957
                            Dim oDatarow As DataRow = oModel_Dt.NewRow()
3958
                            oDatarow("X") = dAddX
3959
                            oDatarow("Y") = dAddY
3960
                            oDatarow("Type") = sType
3961
                            oDatarow("SPID") = sSPID
3962
                            oModel_Dt.Rows.Add(oDatarow)
3963
                        End If
3964
                    End If
3965
                Next
3966
            Catch ex As Exception
3967
            End Try
3968
        End If
3969

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

    
3972
        If oModel_Dt.Rows.Count > 0 Then
3973
            If sCurrentDirection = "X" Then
3974
                'X좌표 정렬
3975
                oModel_Dt.DefaultView.Sort = "X desc"
3976
                oModel_Dt = oModel_Dt.DefaultView.ToTable(True)
3977
            Else
3978
                'Y좌표 정렬
3979
                oModel_Dt.DefaultView.Sort = "Y desc"
3980
                oModel_Dt = oModel_Dt.DefaultView.ToTable(True)
3981
            End If
3982
            Dim oLMConnector As LMConnector = Nothing
3983
            Dim oPreLMConnector As LMConnector = Nothing
3984
            Dim dStartFlag As Boolean = True
3985
            For Each oModelRow In oModel_Dt.Rows
3986
                Dim objInputs As PlaceRunInputs
3987
                objInputs = New PlaceRunInputs
3988
                Dim dX As Double = oModelRow("X")
3989
                Dim dY As Double = oModelRow("Y")
3990
                Dim sType As String = oModelRow("Type")
3991
                Dim sUid As String = ""
3992
                CheckConnectionLine(dX, dY, oLMConnector, sUid)
3993
                If oLMConnector IsNot Nothing Then
3994
                    If dStartFlag Then
3995
                        objInputs.AddPoint(dStartX, dStartY)
3996
                        objInputs.AddConnectorTarget(oLMConnector, dX, dY)
3997
                    Else
3998
                        objInputs.AddConnectorTarget(oPreLMConnector, dStartX, dStartY)
3999
                        objInputs.AddConnectorTarget(oLMConnector, dX, dY)
4000
                    End If
4001
                    oPreLMConnector = LineModeling(objInputs, sSystemPath)
4002
                    '모델링후 StartX를 현재 X로 변경
4003
                    dStartX = dX
4004
                    dStartY = dY
4005
                End If
4006
            Next
4007
            If oPreLMConnector IsNot Nothing Then
4008
                Dim objInputs As PlaceRunInputs
4009
                objInputs = New PlaceRunInputs
4010
                objInputs.AddConnectorTarget(oPreLMConnector, dStartX, dStartY)
4011
                objInputs.AddPoint(dEndX, dEndY)
4012
                LineModeling(objInputs, sSystemPath)
4013
            End If
4014
        End If
4015
        Return bCheckBranchLine
4016
    End Function
4017

    
4018

    
4019
    Private Function CheckLineBranch(ByVal oLine_Dt As DataTable, ByRef dX As Double, ByRef dY As Double,
4020
                                     ByVal sDirection As String, ByRef oLMConnector As LMConnector) As Boolean
4021

    
4022
        Dim oModelingLineRows() As DataRow = oLine_Dt.Select("[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And " &
4023
                                                                "[" & _XML_LINE_SPID & "] <> ''")
4024

    
4025
        Dim bConnectionFlag As Boolean = False
4026
        Try
4027
            For Each oModelrow In oModelingLineRows
4028
                Dim sStartPoint As String = oModelrow(_XML_LINE_STARTPOINT)
4029
                Dim sEndPoint As String = oModelrow(_XML_LINE_ENDPOINT)
4030
                Dim dModelStartX As Double
4031
                Dim dModelStartY As Double
4032
                Dim dModelEndX As Double
4033
                Dim dModelEndY As Double
4034
                ConvertPointBystring(sStartPoint, dModelStartX, dModelStartY)
4035
                ConvertPointBystring(sEndPoint, dModelEndX, dModelEndY)
4036
                ConvertPointByImage(dModelStartX, dModelStartY, _IMG_X, _IMG_Y)
4037
                ConvertPointByImage(dModelEndX, dModelEndY, _IMG_X, _IMG_Y)
4038
                Dim dGap As Double = 0.0002
4039

    
4040
                If Math.Abs(dModelStartX - dModelEndX) <= Math.Abs(dModelStartY - dModelEndY) Then
4041
                    'Vertical
4042
                    If sDirection = "X" Then
4043
                        'x Direction Line
4044
                        If (dModelStartY + dGap >= dY And dModelEndY - dGap <= dY) Or
4045
                        (dModelStartY - dGap <= dY And dModelEndY + dGap >= dY) Then
4046
                            If (dX > dModelStartX And dX < dModelEndX) Or (dX > dModelEndX And dX < dModelStartX) Then
4047
                                If Math.Abs(dX - dModelStartX) > Math.Abs(dX - dModelEndX) Then
4048
                                    dX = dModelEndX
4049
                                Else
4050
                                    dX = dModelStartX
4051
                                End If
4052
                                Try
4053
                                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
4054
                                Catch ex As Exception
4055

    
4056
                                End Try
4057
                                bConnectionFlag = True
4058
                            End If
4059
                        End If
4060
                    End If
4061
                Else
4062
                    'Horizontal 
4063
                    If sDirection = "Y" Then
4064
                        If (dModelStartX + dGap >= dX And dModelEndX - dGap <= dX) Or
4065
                       (dModelStartX - dGap <= dX And dModelEndX + dGap >= dX) Then
4066
                            If (dY > dModelStartY And dY < dModelEndY) Or (dY > dModelEndY And dY < dModelStartY) Then
4067
                                If Math.Abs(dY - dModelStartY) > Math.Abs(dY - dModelEndY) Then
4068
                                    dY = dModelEndY
4069
                                Else
4070
                                    dY = dModelStartY
4071
                                End If
4072
                                Try
4073
                                    oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR)
4074
                                Catch ex As Exception
4075
                                End Try
4076
                                bConnectionFlag = True
4077
                            End If
4078
                        End If
4079
                    End If
4080
                End If
4081
            Next
4082
        Catch ex As Exception
4083
        End Try
4084
        Return bConnectionFlag
4085
    End Function
4086
    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,
4087
                              ByVal sLineNoUid As String, ByVal sLineUid As String, ByVal sSystemPath As String, ByRef oLMConnector As LMConnector) As Boolean
4088
        'Try
4089
        '    Dim oDatasource As Object = _Placement.PIDDataSource
4090
        '    Dim oPipeRun As LMPipeRun = Nothing
4091
        '    Dim objInputs As PlaceRunInputs
4092
        '    objInputs = New PlaceRunInputs
4093
        '    Dim objItem As LMAItem
4094
        '    '       Dim objConnector As LMConnector
4095

    
4096
        '    Dim oStartLineRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sStartLineUid & "' And " &
4097
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4098
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4099
        '    If oStartLineRow.Length = 0 Then
4100
        '        oStartLineRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sStartLineUid & "' And " &
4101
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4102
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4103
        '    End If
4104
        '    Dim oEndLineRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sEndLineUid & "' And " &
4105
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4106
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4107

    
4108
        '    oEndLineRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sEndLineUid & "' And " &
4109
        '                                                            "[" & _XML_LINE_DRAWING_TF & "] = 'TRUE' And" &
4110
        '                                                                  "[" & _XML_LINE_SPID & "] <> ''")
4111
        '    Dim sStartConnectionType As String = ""
4112
        '    Dim sEndConnectionType As String = ""
4113

    
4114
        '    Dim oStartLMConnector As LMConnector = Nothing
4115
        '    Dim oEndLMConnector As LMConnector = Nothing
4116
        '    Dim oDirectionLine As String = ""
4117

    
4118
        '    If Math.Abs(dStart_x - dEnd_x) > Math.Abs(dStart_y - dEnd_y) Then
4119
        '        oDirectionLine = "X"
4120
        '    Else
4121
        '        oDirectionLine = "Y"
4122
        '    End If
4123

    
4124
        '    Dim bCheckFlag As Boolean = False
4125

    
4126
        '    Dim bStartCheckFlag As Boolean = CheckConnectionLine(oStartLineRow, dStart_x, dStart_y, oStartLMConnector)
4127
        '    If bStartCheckFlag = False Then
4128
        '        bStartCheckFlag = CheckConnectionLine(oStartLineRow, dEnd_x, dEnd_y, oStartLMConnector)
4129
        '        bCheckFlag = True
4130
        '    End If
4131
        '    Dim bEndCheckFlag As Boolean = CheckConnectionLine(oEndLineRow, dEnd_x, dEnd_y, oEndLMConnector)
4132

    
4133
        '    If bEndCheckFlag = False Then
4134

    
4135
        '        bEndCheckFlag = CheckConnectionLine(oEndLineRow, dStart_x, dStart_y, oEndLMConnector)
4136
        '        bCheckFlag = True
4137
        '    End If
4138

    
4139
        '    If bStartCheckFlag = True And bEndCheckFlag = False Then
4140
        '        If bCheckFlag Then
4141
        '            objInputs.AddConnectorTarget(oStartLMConnector, dEnd_x, dEnd_y)
4142
        '            objInputs.AddPoint(dStart_x, dStart_y)
4143
        '        Else
4144
        '            objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
4145
        '            objInputs.AddPoint(dEnd_x, dEnd_y)
4146
        '        End If
4147

    
4148
        '    ElseIf bStartCheckFlag = False And bEndCheckFlag = True Then
4149
        '        If bCheckFlag Then
4150

    
4151
        '            objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
4152
        '            objInputs.AddPoint(dEnd_x, dEnd_y)
4153
        '        Else
4154
        '            objInputs.AddPoint(dStart_x, dStart_y)
4155
        '            objInputs.AddConnectorTarget(oStartLMConnector, dEnd_x, dEnd_y)
4156
        '        End If
4157

    
4158
        '    ElseIf bStartCheckFlag = True And bEndCheckFlag = True Then
4159
        '        objInputs.AddConnectorTarget(oStartLMConnector, dStart_x, dStart_y)
4160
        '        objInputs.AddConnectorTarget(oEndLMConnector, dEnd_x, dEnd_y)
4161
        '    Else
4162
        '        objInputs.AddPoint(dStart_x, dStart_y)
4163
        '        objInputs.AddPoint(dEnd_x, dEnd_y)
4164
        '    End If
4165
        '    SetListBoxItems(ListBox_Result, "Place Pipe..(" & dStart_x & "," & dStart_y & ") - (" & dEnd_x & "," & dEnd_y & ")..." & _iPipecnt & " count ")
4166
        '    _iPipecnt = _iPipecnt + 1
4167
        '    objItem = _Placement.PIDCreateItem(sSystemPath)
4168
        '    oLMConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4169

    
4170
        '    Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + sLineUid + "'")
4171
        '    If oUpdateRow.Length = 1 Then
4172
        '        oUpdateRow(0)(_XML_LINE_SPID) = oLMConnector.ModelItemID
4173
        '        oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = oLMConnector
4174

    
4175
        '        oUpdateRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4176
        '    End If
4177

    
4178
        '    oPipeRun = oDatasource.GetPipeRun(oLMConnector.ModelItemID)
4179

    
4180
        '    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4181
        '    If oAttributeRow.Length > 0 Then
4182
        '        For Each oAttribute In oAttributeRow
4183
        '            Try
4184
        '                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4185
        '                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4186
        '                If sPIDValue.Contains("'") Then
4187
        '                    sPIDValue = sPIDValue.Replace("'", """")
4188
        '                End If
4189
        '                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4190
        '                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4191
        '            Catch ex As Exception
4192
        '            End Try
4193
        '        Next
4194
        '        oPipeRun.Commit()
4195
        '    End If
4196
        '    Dim sID_1 As String = ""
4197
        '    Dim sID_2 As String = ""
4198
        '    If oStartLMConnector IsNot Nothing Then
4199
        '        sID_1 = oStartLMConnector.ModelItemID
4200
        '        sID_2 = oLMConnector.ModelItemID
4201
        '    ElseIf oEndLMConnector IsNot Nothing Then
4202
        '        sID_1 = oEndLMConnector.ModelItemID
4203
        '        sID_2 = oLMConnector.ModelItemID
4204
        '    End If
4205
        '    If sID_1 <> "" And sID_2 <> "" Then
4206
        '        Dim objSurvivorItem As LMAItem = Nothing
4207
        '        Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(sID_1)
4208
        '        Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(sID_2)
4209
        '        _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
4210
        '    End If
4211
        '    Return True
4212
        'Catch ex As Exception
4213
        '    Return False
4214
        'End Try
4215

    
4216
    End Function
4217

    
4218
    Private Function LineToLineModeling(ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
4219
                                        ByVal oAttribute_Dt As DataTable, ByVal sConnLineUid As String, ByVal sType As String,
4220
                                        ByRef oLMConnector As LMConnector) As String
4221
        Dim sReturnUid As String = ""
4222
        Try
4223
            Dim sLineUid As String = ""
4224

    
4225
            Dim iConnType As Integer = 0
4226

    
4227
            Dim sStartpoint As String = ""
4228
            Dim sEndpoint As String = ""
4229
            Dim dOriginalStart_x As Double = 0.0
4230
            Dim dOriginalStart_y As Double = 0.0
4231
            Dim dOriginalEnd_x As Double = 0.0
4232
            Dim dOriginalEnd_y As Double = 0.0
4233

    
4234
            Dim dStart_x As Double = 0
4235
            Dim dStart_y As Double = 0
4236
            Dim dEnd_x As Double = 0
4237
            Dim dEnd_y As Double = 0
4238
            Dim sStartLineUid As String = sConnLineUid
4239
            Dim sEndLineUid As String = ""
4240
            Dim sDirection As String = ""
4241
            Dim sSystemPath As String = GetPipeType(sType)
4242

    
4243
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" & sConnLineUid & "' And " &
4244
                                                                    "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4245
                                                                     "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4246
                                                                     "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4247
            If oPipeRow.Length > 0 Then
4248
                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4249
                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4250
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4251
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4252
                ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4253
                ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4254
                If dStart_x = 0 And dStart_y = 0 Then
4255
                    dStart_x = dOriginalStart_x
4256
                    dStart_y = dOriginalStart_y
4257
                    dEnd_x = dOriginalEnd_x
4258
                    dEnd_y = dOriginalEnd_y
4259
                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4260
                        sDirection = "X"
4261
                    Else
4262
                        sDirection = "Y"
4263
                    End If
4264
                    oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4265
                    sLineUid = sConnLineUid
4266
                End If
4267
            End If
4268

    
4269
            While True
4270
                sLineUid = ""
4271
                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sConnLineUid + "' And " &
4272
                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4273
                                            "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4274
                                            "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4275

    
4276
                If oPipeRow.Length = 0 Then
4277
                    oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sConnLineUid + "' And " &
4278
                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4279
                                            "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4280
                                            "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4281
                Else
4282
                    'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4283
                    'sConnLineUid = sLineUid
4284
                    sLineUid = sConnLineUid
4285
                    sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4286
                    iConnType = 1
4287
                End If
4288

    
4289
                If oPipeRow.Length > 0 Then
4290
                    If sLineUid = "" Then
4291
                        'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4292
                        'sConnLineUid = sLineUid
4293
                        sLineUid = sConnLineUid
4294
                        sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4295
                        iConnType = 2
4296
                    End If
4297
                    If iConnType = 1 Then
4298

    
4299
                    ElseIf iConnType = 2 Then
4300

    
4301
                    End If
4302
                    sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4303
                    sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4304
                    ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4305
                    ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4306
                    ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4307
                    ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4308

    
4309
                    If dStart_x = 0 And dStart_y = 0 Then
4310
                        dStart_x = dOriginalStart_x
4311
                        dStart_y = dOriginalStart_y
4312
                        dEnd_x = dOriginalEnd_x
4313
                        dEnd_y = dOriginalEnd_y
4314
                        If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4315
                            sDirection = "X"
4316
                        Else
4317
                            sDirection = "Y"
4318
                        End If
4319
                        sType = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4320
                        sSystemPath = GetPipeType(sType)
4321
                    Else
4322
                        If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4323
                            If sDirection = "Y" Then
4324
                                '방향이 바꼈음 Y - > X
4325
                                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4326
                                sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4327
                                dStart_x = dOriginalStart_x
4328
                                dStart_y = dOriginalStart_y
4329
                                dEnd_x = dOriginalEnd_x
4330
                                dEnd_y = dOriginalEnd_y
4331
                                sStartLineUid = sConnLineUid
4332
                            Else
4333
                                dEnd_x = dOriginalEnd_x
4334
                                dEnd_y = dOriginalEnd_y
4335
                            End If
4336
                            sDirection = "X"
4337
                        Else
4338
                            If sDirection = "X" Then
4339
                                '방향이 바꼈음 X - > Y
4340
                                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4341
                                sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4342
                                dStart_x = dOriginalStart_x
4343
                                dStart_y = dOriginalStart_y
4344
                                dEnd_x = dOriginalEnd_x
4345
                                dEnd_y = dOriginalEnd_y
4346
                                sStartLineUid = sConnLineUid
4347
                            Else
4348

    
4349
                                dEnd_x = dOriginalEnd_x
4350
                                dEnd_y = dOriginalEnd_y
4351
                            End If
4352
                            sDirection = "Y"
4353
                        End If
4354
                    End If
4355
                    '            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4356
                Else
4357
                    If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
4358
                        LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4359
                         sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4360
                    End If
4361
                    sReturnUid = sConnLineUid
4362
                    Exit While
4363
                End If
4364
            End While
4365

    
4366
            If sStartLineUid <> "" And sEndLineUid <> "" Then
4367
                LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4368
                             sLineNoUid, sLineUid, sSystemPath, oLMConnector)
4369
                dStart_x = 0
4370
                dStart_y = 0
4371
                dEnd_x = 0
4372
                dEnd_y = 0
4373
            End If
4374
        Catch ex As Exception
4375

    
4376
        End Try
4377

    
4378
        Return sReturnUid
4379
    End Function
4380

    
4381

    
4382
    'Private Function LineToLineModeling(ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
4383
    '                                    ByVal oAttribute_Dt As DataTable, ByVal sConnLineUid As String, ByVal sType As String) As String
4384
    '    Dim sReturnUid As String = ""
4385
    '    Try
4386
    '        Dim sLineUid As String = ""
4387

    
4388
    '        Dim iConnType As Integer = 0
4389

    
4390
    '        Dim sStartpoint As String = ""
4391
    '        Dim sEndpoint As String = ""
4392
    '        Dim dOriginalStart_x As Double = 0.0
4393
    '        Dim dOriginalStart_y As Double = 0.0
4394
    '        Dim dOriginalEnd_x As Double = 0.0
4395
    '        Dim dOriginalEnd_y As Double = 0.0
4396

    
4397
    '        Dim dStart_x As Double = 0
4398
    '        Dim dStart_y As Double = 0
4399
    '        Dim dEnd_x As Double = 0
4400
    '        Dim dEnd_y As Double = 0
4401
    '        Dim sStartLineUid As String = sConnLineUid
4402
    '        Dim sEndLineUid As String = ""
4403
    '        Dim sDirection As String = ""
4404
    '        Dim sSystemPath As String = GetPipeType(sType)
4405

    
4406
    '        Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" & sConnLineUid & "' And " &
4407
    '                                                                "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4408
    '                                                                 "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4409
    '                                                                 "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4410
    '        If oPipeRow.Length > 0 Then
4411
    '            sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4412
    '            sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4413
    '            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4414
    '            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4415
    '            ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4416
    '            ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4417
    '            If dStart_x = 0 And dStart_y = 0 Then
4418
    '                dStart_x = dOriginalStart_x
4419
    '                dStart_y = dOriginalStart_y
4420
    '                dEnd_x = dOriginalEnd_x
4421
    '                dEnd_y = dOriginalEnd_y
4422
    '                If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4423
    '                    sDirection = "X"
4424
    '                Else
4425
    '                    sDirection = "Y"
4426
    '                End If
4427
    '                oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4428
    '                sLineUid = sConnLineUid
4429
    '            End If
4430
    '        End If
4431

    
4432
    '        While True
4433
    '            sLineUid = ""
4434
    '            oPipeRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sConnLineUid + "' And " &
4435
    '                                                                "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4436
    '                                                                         "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4437
    '                                                                         "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4438

    
4439
    '            If oPipeRow.Length = 0 Then
4440
    '                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sConnLineUid + "' And " &
4441
    '                                         "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And" &
4442
    '                                       "[" & _XML_SYMBOL_Check & "] = 'TRUE' And " &
4443
    '                                      "[" & _XML_SYMBOL_TYPE & "] = '" & sType & "'")
4444
    '            Else
4445
    '                'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4446
    '                'sConnLineUid = sLineUid
4447
    '                sLineUid = sConnLineUid
4448
    '                sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4449
    '                iConnType = 1
4450
    '            End If
4451

    
4452
    '            If oPipeRow.Length > 0 Then
4453
    '                If sLineUid = "" Then
4454
    '                    'sLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4455
    '                    'sConnLineUid = sLineUid
4456
    '                    sLineUid = sConnLineUid
4457
    '                    sConnLineUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4458
    '                    iConnType = 2
4459
    '                End If
4460
    '                If iConnType = 1 Then
4461

    
4462
    '                ElseIf iConnType = 2 Then
4463

    
4464
    '                End If
4465
    '                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4466
    '                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4467
    '                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4468
    '                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4469
    '                ConvertPointByImage(dOriginalStart_x, dOriginalStart_y, _IMG_X, _IMG_Y)
4470
    '                ConvertPointByImage(dOriginalEnd_x, dOriginalEnd_y, _IMG_X, _IMG_Y)
4471

    
4472

    
4473

    
4474
    '                If dStart_x = 0 And dStart_y = 0 Then
4475
    '                    dStart_x = dOriginalStart_x
4476
    '                    dStart_y = dOriginalStart_y
4477
    '                    dEnd_x = dOriginalEnd_x
4478
    '                    dEnd_y = dOriginalEnd_y
4479
    '                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4480
    '                        sDirection = "X"
4481
    '                    Else
4482
    '                        sDirection = "Y"
4483
    '                    End If
4484
    '                    sType = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4485
    '                    sSystemPath = GetPipeType(sType)
4486
    '                Else
4487
    '                    If Math.Abs(dOriginalStart_x - dOriginalEnd_x) > Math.Abs(dOriginalStart_y - dOriginalEnd_y) Then
4488
    '                        If sDirection = "Y" Then
4489
    '                            '방향이 바꼈음 Y - > X
4490
    '                            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4491
    '                            sLineNoUid, sLineUid, sSystemPath)
4492
    '                            dStart_x = dOriginalStart_x
4493
    '                            dStart_y = dOriginalStart_y
4494
    '                            dEnd_x = dOriginalEnd_x
4495
    '                            dEnd_y = dOriginalEnd_y
4496
    '                            sStartLineUid = sConnLineUid
4497
    '                        Else
4498
    '                            dEnd_x = dOriginalEnd_x
4499
    '                            dEnd_y = dOriginalEnd_y
4500
    '                        End If
4501
    '                        sDirection = "X"
4502
    '                    Else
4503
    '                        If sDirection = "X" Then
4504
    '                            '방향이 바꼈음 X - > Y
4505
    '                            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4506
    '                            sLineNoUid, sLineUid, sSystemPath)
4507
    '                            dStart_x = dOriginalStart_x
4508
    '                            dStart_y = dOriginalStart_y
4509
    '                            dEnd_x = dOriginalEnd_x
4510
    '                            dEnd_y = dOriginalEnd_y
4511
    '                            sStartLineUid = sConnLineUid
4512
    '                        Else
4513

    
4514
    '                            dEnd_x = dOriginalEnd_x
4515
    '                            dEnd_y = dOriginalEnd_y
4516
    '                        End If
4517
    '                        sDirection = "Y"
4518
    '                    End If
4519
    '                End If
4520
    '                '            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4521
    '            Else
4522
    '                If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
4523
    '                    LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4524
    '                     sLineNoUid, sLineUid, sSystemPath)
4525
    '                End If
4526

    
4527

    
4528
    '                sReturnUid = sConnLineUid
4529
    '                Exit While
4530
    '            End If
4531
    '        End While
4532

    
4533
    '        If sStartLineUid <> "" And sEndLineUid <> "" Then
4534
    '            LineModeling(oLine_Dt, oAttribute_Dt, sStartLineUid, sEndLineUid, dStart_x, dStart_y, dEnd_x, dEnd_y,
4535
    '                         sLineNoUid, sLineUid, sSystemPath)
4536
    '            dStart_x = 0
4537
    '            dStart_y = 0
4538
    '            dEnd_x = 0
4539
    '            dEnd_y = 0
4540
    '        End If
4541
    '    Catch ex As Exception
4542

    
4543
    '    End Try
4544

    
4545
    '    Return sReturnUid
4546
    'End Function
4547

    
4548

    
4549
    Private Function SymbolToLine_Modeling(ByVal oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String,
4550
                                       ByVal sSymbolUid As String, ByVal oLMSymbol As LMSymbol) As String
4551

    
4552

    
4553
        Dim oDatasource As Object = _Placement.PIDDataSource
4554
        Dim oPipeRun As LMPipeRun = Nothing
4555
        Dim objItem As LMAItem
4556
        Dim objConnector As LMConnector
4557
        Dim objInputs As PlaceRunInputs
4558
        objInputs = New PlaceRunInputs
4559

    
4560

    
4561
        Dim sPipeUid As String = ""
4562
        Dim iConnType As Integer = 0
4563
        Dim sStartpoint As String = ""
4564
        Dim sEndpoint As String = ""
4565
        Dim dOriginalStart_x As Double = 0.0
4566
        Dim dOriginalStart_y As Double = 0.0
4567
        Dim dOriginalEnd_x As Double = 0.0
4568
        Dim dOriginalEnd_y As Double = 0.0
4569
        Dim dStart_x As Double = 0.0
4570
        Dim dStart_y As Double = 0.0
4571
        Dim dEnd_x As Double = 0.0
4572
        Dim dEnd_y As Double = 0.0
4573

    
4574
        Dim sReturnUid As String = ""
4575
        Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sSymbolUid + "' And " &
4576
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4577
                                                                                  _XML_SYMBOL_Check & "] = 'TRUE'")
4578
        If oPipeRow.Length = 0 Then
4579
            oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sSymbolUid + "' And " &
4580
                                     "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4581
                                    _XML_SYMBOL_Check & "] = 'TRUE'")
4582
        Else
4583
            sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4584
            iConnType = 1
4585
        End If
4586

    
4587
        If oPipeRow.Length = 1 Then
4588
            If sPipeUid = "" Then
4589
                sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4590
                iConnType = 2
4591
            End If
4592
            sReturnUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4593
            sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4594
            sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4595
            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4596
            dStart_x = dOriginalStart_x
4597
            dStart_y = dOriginalStart_y
4598
            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4599
            dEnd_x = dOriginalEnd_x
4600
            dEnd_y = dOriginalEnd_y
4601
            ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4602
            ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4603
            'OPC Connection Point가져와서 연결(2018-07-12)
4604
            If iConnType = 1 Then
4605
                FindNearPoint(oLMSymbol, dStart_x, dStart_y)
4606
                objInputs.AddSymbolTarget(oLMSymbol, dStart_x, dStart_y)
4607
                objInputs.AddPoint(dEnd_x, dEnd_y)
4608
            Else
4609
                FindNearPoint(oLMSymbol, dEnd_x, dEnd_y)
4610
                objInputs.AddSymbolTarget(oLMSymbol, dEnd_x, dEnd_y)
4611
                objInputs.AddPoint(dStart_x, dStart_y)
4612
            End If
4613
            oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4614

    
4615
            Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4616
            Dim sSystemPath As String = GetPipeType(sType)
4617

    
4618

    
4619

    
4620

    
4621
            objItem = _Placement.PIDCreateItem(sSystemPath)
4622
            objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4623
            oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
4624
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4625
            If oAttributeRow.Length > 0 Then
4626
                For Each oAttribute In oAttributeRow
4627
                    Try
4628
                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4629
                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4630
                        If sPIDValue.Contains("'") Then
4631
                            sPIDValue = sPIDValue.Replace("'", """")
4632
                        End If
4633
                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4634
                        oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4635
                    Catch ex As Exception
4636
                    End Try
4637
                Next
4638
                oPipeRun.Commit()
4639
            End If
4640
        End If
4641
        Return sReturnUid
4642
    End Function
4643

    
4644
    Private Function LineToSymbol_Modeling(ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String,
4645
                                       ByVal sLineUid As String, ByVal oLMConnector As LMConnector, ByRef oLMSymbol As LMSymbol) As String
4646

    
4647

    
4648
        Dim oDatasource As Object = _Placement.PIDDataSource
4649
        Dim objItem As LMAItem
4650
        Dim objConnector As LMConnector
4651
        Dim objInputs As PlaceRunInputs
4652
        objInputs = New PlaceRunInputs
4653

    
4654

    
4655
        Dim sSymbolUid As String = ""
4656
        Dim iConnType As Integer = 0
4657
        Dim dOriginalPoint_x As Double = 0.0
4658
        Dim dORiginalPoint_y As Double = 0.0
4659
        Dim dX As Double = 0.0
4660
        Dim dY As Double = 0.0
4661
        Dim sReturnUid As String = ""
4662
        Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn1_Uid & " = '" + sLineUid + "' And " &
4663
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4664
                                                                                  _XML_SYMBOL_Check & "] = 'TRUE'")
4665
        If oSymbolRow.Length = 0 Then
4666
            oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
4667
                                                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4668
                                                                                 _XML_SYMBOL_Check & "] = 'TRUE'")
4669
            If oSymbolRow.Length = 0 Then
4670
                oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
4671
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4672
                                                                          _XML_SYMBOL_Check & "] = 'TRUE'")
4673
                If oSymbolRow.Length = 0 Then
4674
                    oSymbolRow = oSymbol_Dt.Select(_XML_SYMBOL_Conn2_Uid & " = '" + sLineUid + "' And " &
4675
                                                   "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' " &
4676
                                                            _XML_SYMBOL_Check & "] = 'TRUE'")
4677
                    If oSymbolRow.Length = 0 Then
4678

    
4679
                    Else
4680
                        sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4681
                        iConnType = 4
4682
                    End If
4683
                Else
4684
                    sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4685
                    iConnType = 3
4686
                End If
4687
            Else
4688
                sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4689
                iConnType = 2
4690
            End If
4691

    
4692
        Else
4693
            sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4694
            iConnType = 1
4695
        End If
4696

    
4697
        If oSymbolRow.Length = 1 Then
4698
            If sSymbolUid = "" Then
4699
                sSymbolUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4700
                iConnType = 2
4701
            End If
4702
            sReturnUid = oSymbolRow(0)(_XML_SYMBOL_UID).ToString()
4703
            Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
4704
            ConvertPointBystring(sOriginalPoint, dOriginalPoint_x, dORiginalPoint_y)
4705
            dX = dOriginalPoint_x
4706
            dY = dORiginalPoint_y
4707
            ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
4708
            'OPC Connection Point가져와서 연결(2018-07-12)
4709

    
4710
            oSymbolRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4711

    
4712
            Dim sType As String = oSymbolRow(0)(_XML_LINE_TYPE).ToString()
4713
            Dim sSystemPath As String = GetPipeType(sType)
4714

    
4715
            oLMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, ExistingItem:=oLMConnector.AsLMAItem,
4716
          TargetItem:=oLMSymbol.AsLMAItem)
4717

    
4718
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4719
            If oAttributeRow.Length > 0 Then
4720
                For Each oAttribute In oAttributeRow
4721
                    Try
4722
                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4723
                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4724
                        If sPIDValue.Contains("'") Then
4725
                            sPIDValue = sPIDValue.Replace("'", """")
4726
                        End If
4727
                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4728
                        oLMSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
4729
                    Catch ex As Exception
4730
                    End Try
4731
                Next
4732
            End If
4733
        End If
4734
        Return sReturnUid
4735
    End Function
4736

    
4737

    
4738
    Private Sub OPCTOLineRouting(ByRef oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal oOPCSymbol As LMSymbol,
4739
                            ByVal sOPCUid As String, ByVal sLineNoUid As String)
4740
        Try
4741
            Dim oDatasource As Object = _Placement.PIDDataSource
4742
            Dim objItem As LMAItem
4743
            Dim objConnector As LMConnector
4744
            Dim objInputs As PlaceRunInputs
4745
            objInputs = New PlaceRunInputs
4746
            Dim dOriginalStart_x As Double = 0.0
4747
            Dim dOriginalStart_y As Double = 0.0
4748
            Dim dOriginalEnd_x As Double = 0.0
4749
            Dim dOriginalEnd_y As Double = 0.0
4750
            Dim dStart_x As Double = 0.0
4751
            Dim dStart_y As Double = 0.0
4752
            Dim dEnd_x As Double = 0.0
4753
            Dim dEnd_y As Double = 0.0
4754

    
4755
            Dim oPipeRun As LMPipeRun = Nothing
4756
            Dim sStartpoint As String = ""
4757
            Dim sEndpoint As String = ""
4758
            Dim iConnType As Integer = 0
4759
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_Conn1_Uid & " = '" + sOPCUid + "' And [" &
4760
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
4761
            Dim sPipeUid As String = ""
4762
            If oPipeRow.Length = 0 Then
4763
                oPipeRow = oLine_Dt.Select(_XML_LINE_Conn2_Uid & " = '" + sOPCUid + "' And [" &
4764
                        _XML_SYMBOL_Check & "] = 'TRUE'")
4765
            Else
4766
                sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4767
                iConnType = 1
4768
            End If
4769
            Dim oAddUid_List As New List(Of String)
4770
            If oPipeRow.Length = 1 Then
4771
                If sPipeUid = "" Then
4772
                    sPipeUid = oPipeRow(0)(_XML_LINE_UID).ToString()
4773
                    iConnType = 2
4774
                End If
4775
                oAddUid_List.Add(sPipeUid)
4776
                sStartpoint = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4777
                sEndpoint = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4778
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4779
                dStart_x = dOriginalStart_x
4780
                dStart_y = dOriginalStart_y
4781
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4782
                dEnd_x = dOriginalEnd_x
4783
                dEnd_y = dOriginalEnd_y
4784
                ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4785
                ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4786

    
4787
                'OPC Connection Point가져와서 연결(2018-07-12)
4788
                If iConnType = 1 Then
4789
                    FindNearPoint(oOPCSymbol, dStart_x, dStart_y)
4790
                    objInputs.AddSymbolTarget(oOPCSymbol, dStart_x, dStart_y)
4791
                    objInputs.AddPoint(dEnd_x, dEnd_y)
4792
                Else
4793
                    FindNearPoint(oOPCSymbol, dEnd_x, dEnd_y)
4794
                    objInputs.AddSymbolTarget(oOPCSymbol, dEnd_x, dEnd_y)
4795
                    objInputs.AddPoint(dStart_x, dStart_y)
4796
                End If
4797
                oPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4798

    
4799
                While True
4800
                    '    objInputs.Clear()
4801
                    Dim oAddPipeRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" + sPipeUid + "' and " &
4802
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
4803
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
4804
                    If oAddPipeRow.Length = 0 Then
4805
                        oAddPipeRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" + sPipeUid + "' and " &
4806
                                                                 "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
4807
                                                                                       _XML_SYMBOL_Check & "] = 'TRUE'")
4808
                        sPipeUid = ""
4809
                    Else
4810
                        iConnType = 1
4811
                        sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
4812
                    End If
4813
                    If oAddPipeRow.Length = 1 Then
4814
                        If sPipeUid = "" Then
4815
                            sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
4816
                            iConnType = 2
4817
                        End If
4818
                        oAddUid_List.Add(sPipeUid)
4819
                        sStartpoint = oAddPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
4820
                        sEndpoint = oAddPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
4821
                        ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4822
                        dStart_x = dOriginalStart_x
4823
                        dStart_y = dOriginalStart_y
4824
                        ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4825
                        dEnd_x = dOriginalEnd_x
4826
                        dEnd_y = dOriginalEnd_y
4827
                        ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4828
                        ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4829
                        If iConnType = 1 Then
4830
                            objInputs.AddPoint(dEnd_x, dEnd_y)
4831
                            ' objInputs.AddPoint(dStart_x, dStart_y)
4832
                        Else
4833
                            'objInputs.AddConnectorTarget(objConnector, dStart_x, dStart_y)
4834
                            '  objInputs.AddPoint(dStart_x, dStart_y)
4835
                            '  objInputs.AddPoint(dEnd_x, dEnd_y)
4836
                            objInputs.AddPoint(dStart_x, dStart_y)
4837
                        End If
4838

    
4839
                        oAddPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
4840
                    Else
4841
                        Exit While
4842
                    End If
4843

    
4844
                End While
4845
                Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
4846
                Dim sSystemPath As String = GetPipeType(sType)
4847

    
4848
                objItem = _Placement.PIDCreateItem(sSystemPath)
4849
                objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4850
                For i = 0 To oAddUid_List.Count - 1
4851
                    Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + oAddUid_List(i) + "'")
4852
                    If oUpdateRow.Length = 1 Then
4853
                        oUpdateRow(0)(_XML_LINE_SPID) = objConnector.ModelItemID
4854
                        oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = objConnector
4855
                    End If
4856
                Next
4857

    
4858

    
4859
                oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
4860
                Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4861
                If oAttributeRow.Length > 0 Then
4862
                    For Each oAttribute In oAttributeRow
4863
                        Try
4864
                            Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4865
                            Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4866
                            If sPIDValue.Contains("'") Then
4867
                                sPIDValue = sPIDValue.Replace("'", """")
4868
                            End If
4869
                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4870
                            oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4871
                        Catch ex As Exception
4872
                        End Try
4873
                    Next
4874
                    oPipeRun.Commit()
4875
                End If
4876

    
4877
            End If
4878

    
4879
        Catch ex As Exception
4880
        End Try
4881
    End Sub
4882

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

    
4885
        For Each sUid In sUidList
4886
            If sUid = sAddUid Then
4887
                Return False
4888
            End If
4889
        Next
4890
        Return True
4891
    End Function
4892

    
4893
    Private Sub LineRouting(ByRef oLine_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal sLineNoUid As String, ByVal sLineNoText As String)
4894
        Try
4895
            Dim oDatasource As Object = _Placement.PIDDataSource
4896
            Dim objItem As LMAItem
4897
            Dim objConnector As LMConnector
4898
            Dim objInputs As PlaceRunInputs
4899
            objInputs = New PlaceRunInputs
4900
            Dim dOriginalStart_x As Double = 0.0
4901
            Dim dOriginalStart_y As Double = 0.0
4902
            Dim dOriginalEnd_x As Double = 0.0
4903
            Dim dOriginalEnd_y As Double = 0.0
4904
            Dim dStart_x As Double = 0.0
4905
            Dim dStart_y As Double = 0.0
4906
            Dim dEnd_x As Double = 0.0
4907
            Dim dEnd_y As Double = 0.0
4908
            Dim oPipeRun As LMPipeRun = Nothing
4909
            Dim sStartpoint As String = ""
4910
            Dim sEndpoint As String = ""
4911
            Dim iConnType As Integer = 0
4912
            Dim pLMConnector As LMConnector = Nothing
4913
            For Each oLinerow In oLine_Dt.Rows
4914
                objInputs.Clear()
4915
                Dim sCheck As String = oLinerow(_XML_LINE_DRAWING_TF).ToString()
4916
                If sCheck = "FALSE" Then
4917
                    Dim sUid As String = oLinerow(_XML_LINE_UID).ToString()
4918
                    sStartpoint = oLinerow(_XML_LINE_STARTPOINT).ToString()
4919
                    sEndpoint = oLinerow(_XML_LINE_ENDPOINT).ToString()
4920
                    ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
4921
                    dStart_x = dOriginalStart_x
4922
                    dStart_y = dOriginalStart_y
4923
                    ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
4924
                    dEnd_x = dOriginalEnd_x
4925
                    dEnd_y = dOriginalEnd_y
4926
                    ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
4927
                    ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
4928

    
4929
                    objInputs.AddPoint(dStart_x, dStart_y)
4930
                    objInputs.AddPoint(dEnd_x, dEnd_y)
4931
                    Dim sType As String = oLinerow(_XML_LINE_TYPE).ToString()
4932
                    Dim sSystemPath As String = GetPipeType(sType)
4933
                    objItem = _Placement.PIDCreateItem(sSystemPath)
4934
                    objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
4935
                    SetListBoxItems(ListBox_Result, "Place Pipe.." & sUid & " (" & dOriginalStart_x & "," & dOriginalStart_y & ") - (" & dOriginalEnd_x & "," & dOriginalEnd_y & ")..." & _iPipecnt & " count ")
4936

    
4937
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Pipe : " & sUid)
4938
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
4939
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oLinerow(_XML_SYMBOL_Conn1_Uid).ToString())
4940
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oLinerow(_XML_SYMBOL_Conn2_Uid).ToString())
4941
                    'ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
4942
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "StartPoint : " & dOriginalStart_x & "," & dOriginalStart_y)
4943
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "EndPoint : " & dOriginalEnd_x & "," & dOriginalEnd_y)
4944
                    ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Pipe Count : " & _iPipecnt)
4945

    
4946
                    _iPipecnt = _iPipecnt + 1
4947
                    oLinerow(_XML_LINE_SPID) = objConnector.ModelItemID
4948
                    oLinerow(_XML_LINE_LMCONNECTOR) = objConnector
4949

    
4950
                    oLinerow(_XML_LINE_DRAWING_TF) = "TRUE"
4951
                    oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
4952

    
4953
                    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
4954
                    If oAttributeRow.Length > 0 Then
4955
                        For Each oAttribute In oAttributeRow
4956
                            Try
4957
                                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
4958
                                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
4959
                                If sPIDValue.Contains("'") Then
4960
                                    sPIDValue = sPIDValue.Replace("'", """")
4961
                                End If
4962
                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
4963
                                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
4964
                            Catch ex As Exception
4965
                            End Try
4966
                        Next
4967
                        oPipeRun.Commit()
4968
                    End If
4969
                End If
4970

    
4971

    
4972

    
4973

    
4974

    
4975
                'Dim sPipeUid As String = oLinerow(_XML_LINE_UID).ToString()
4976
                'Dim sCheckModeling As Boolean = False
4977
                'objInputs.Clear()
4978
                'Dim oAddUid_List As New List(Of String)
4979
                'Try
4980
                '    Dim oAddPipeRow() As DataRow = oLine_Dt.Select("[" & _XML_LINE_Conn1_Uid & "] = '" + sPipeUid + "' and " &
4981
                '                                            "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
4982
                '                                            _XML_SYMBOL_Check & "] = 'TRUE'")
4983
                '    If oAddPipeRow.Length = 0 Then
4984
                '        oAddPipeRow = oLine_Dt.Select("[" & _XML_LINE_Conn2_Uid & "] = '" + sPipeUid + "' and " &
4985
                '                                        "[" & _XML_LINE_DRAWING_TF & "] = 'FALSE' And [" &
4986
                '                                        _XML_SYMBOL_Check & "] = 'TRUE'")
4987
                '        sPipeUid = ""
4988
                '    Else
4989
                '        iConnType = 1
4990
                '        sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
4991
                '    End If
4992
                '    If oAddPipeRow.Length = 1 Then
4993
                '        sCheckModeling = True
4994
                '        If sPipeUid = "" Then
4995
                '            sPipeUid = oAddPipeRow(0)(_XML_LINE_UID).ToString()
4996
                '            iConnType = 2
4997
                '        End If
4998
                '        If AddUidList중복체크(oAddUid_List, sPipeUid) Then
4999
                '            oAddUid_List.Add(sPipeUid)
5000
                '        End If
5001
                '        sStartpoint = oAddPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
5002
                '        sEndpoint = oAddPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
5003
                '        ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
5004
                '        dStart_x = dOriginalStart_x
5005
                '        dStart_y = dOriginalStart_y
5006
                '        ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
5007
                '        dEnd_x = dOriginalEnd_x
5008
                '        dEnd_y = dOriginalEnd_y
5009
                '        ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
5010
                '        ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
5011
                '        Dim sBranchType As String = ""
5012
                '        If (CheckBranchLine(oLine_Dt, dStart_x, dStart_y, dEnd_x, dEnd_y, sBranchType, pLMConnector)) Then
5013
                '            Try
5014
                '                If pLMConnector Is Nothing Then
5015
                '                    objInputs.AddPoint(dStart_x, dStart_y)
5016
                '                    objInputs.AddPoint(dEnd_x, dEnd_y)
5017
                '                Else
5018
                '                    If sBranchType = "1" Then
5019
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5020
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5021
                '                    ElseIf sBranchType = "2" Then
5022
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5023
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5024
                '                    ElseIf sBranchType = "3" Then
5025
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5026
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5027
                '                    ElseIf sBranchType = "4" Then
5028
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5029
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5030
                '                    End If
5031
                '                End If
5032
                '            Catch ex As Exception
5033
                '            End Try
5034
                '        Else
5035
                '            objInputs.AddPoint(dStart_x, dStart_y)
5036
                '            objInputs.AddPoint(dEnd_x, dEnd_y)
5037
                '        End If
5038
                '        oAddPipeRow(0)(_XML_LINE_DRAWING_TF) = "TRUE"
5039
                '    Else
5040
                '        Dim CheckTF As String = oLinerow(_XML_LINE_DRAWING_TF).ToString()
5041
                '        Dim CheckSelect As String = oLinerow(_XML_LINE_Check).ToString()
5042
                '        If CheckTF = "FALSE" And CheckSelect = "TRUE" Then
5043
                '            sPipeUid = oLinerow(_XML_LINE_UID).ToString()
5044
                '            oAddUid_List.Clear()
5045
                '            oAddUid_List.Add(sPipeUid)
5046
                '            sCheckModeling = True
5047
                '            sStartpoint = oLinerow(_XML_LINE_STARTPOINT).ToString()
5048
                '            sEndpoint = oLinerow(_XML_LINE_ENDPOINT).ToString()
5049
                '            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
5050
                '            dStart_x = dOriginalStart_x
5051
                '            dStart_y = dOriginalStart_y
5052
                '            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
5053
                '            dEnd_x = dOriginalEnd_x
5054
                '            dEnd_y = dOriginalEnd_y
5055
                '            ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
5056
                '            ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
5057
                '            Dim sBranchType As String = ""
5058
                '            If (CheckBranchLine(oLine_Dt, dStart_x, dStart_y, dEnd_x, dEnd_y, sBranchType, pLMConnector)) Then
5059
                '                Try
5060
                '                    If sBranchType = "1" Then
5061
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5062
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5063
                '                    ElseIf sBranchType = "2" Then
5064
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5065
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5066
                '                    ElseIf sBranchType = "3" Then
5067
                '                        objInputs.AddPoint(dEnd_x, dEnd_y)
5068
                '                        objInputs.AddConnectorTarget(pLMConnector, dStart_x, dStart_y)
5069
                '                    ElseIf sBranchType = "4" Then
5070
                '                        objInputs.AddPoint(dStart_x, dStart_y)
5071
                '                        objInputs.AddConnectorTarget(pLMConnector, dEnd_x, dEnd_y)
5072
                '                    End If
5073
                '                Catch ex As Exception
5074

    
5075
                '                End Try
5076
                '            Else
5077
                '                objInputs.AddPoint(dStart_x, dStart_y)
5078
                '                objInputs.AddPoint(dEnd_x, dEnd_y)
5079
                '            End If
5080
                '            oLinerow(_XML_LINE_DRAWING_TF) = "TRUE"
5081
                '        End If
5082
                '    End If
5083
                'Catch ex As Exception
5084
                'End Try
5085
                'If sCheckModeling Then
5086
                '    Dim sType As String = oLinerow(_XML_LINE_TYPE).ToString()
5087
                '    Dim sSystemPath As String = GetPipeType(sType)
5088
                '    objItem = _Placement.PIDCreateItem(sSystemPath)
5089
                '    objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
5090
                '    For i = 0 To oAddUid_List.Count - 1
5091
                '        Dim oUpdateRow As DataRow() = oLine_Dt.Select(_XML_LINE_UID & " = '" + oAddUid_List(i) + "'")
5092
                '        If oUpdateRow.Length = 1 Then
5093
                '            oUpdateRow(0)(_XML_LINE_SPID) = objConnector.ModelItemID
5094
                '            oUpdateRow(0)(_XML_LINE_LMCONNECTOR) = objConnector
5095
                '        End If
5096
                '    Next
5097

    
5098
                '    oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
5099
                '    oAddUid_List.Clear()
5100

    
5101
                '    Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
5102
                '    If oAttributeRow.Length > 0 Then
5103
                '        For Each oAttribute In oAttributeRow
5104
                '            Try
5105
                '                Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5106
                '                Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5107
                '                If sPIDValue.Contains("'") Then
5108
                '                    sPIDValue = sPIDValue.Replace("'", """")
5109
                '                End If
5110
                '                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5111
                '                oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
5112
                '            Catch ex As Exception
5113
                '            End Try
5114
                '        Next
5115
                '        oPipeRun.Commit()
5116
                '    End If
5117

    
5118
                '    If pLMConnector IsNot Nothing Then
5119
                '        Dim sID_1 As String = pLMConnector.ModelItemID
5120
                '        Dim sID_2 As String = objConnector.ModelItemID
5121
                '        Dim objSurvivorItem As LMAItem = Nothing
5122
                '        Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(sID_1)
5123
                '        Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(sID_2)
5124
                '        _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2)
5125
                '        '     oDatasource.CommitTransaction()
5126
                '        '_Placement.PIDAutoJoin(oPipeRun1.AsLMAItem, AutoJoinEndConstants.autoJoin_End, objSurvivorItem)
5127
                '        'oPipeRun1.Commit()
5128
                '        'oDatasource.CommitTransaction()
5129
                '        'objSurvivorItem = Nothing
5130
                '        '_Placement.PIDAutoJoin(oPipeRun2.AsLMAItem, AutoJoinEndConstants.autoJoin_Start, objSurvivorItem)
5131
                '        'oPipeRun2.Commit()
5132
                '        'oDatasource.CommitTransaction()
5133
                '    End If
5134
                '    sCheckModeling = False
5135
                '  End If
5136
            Next
5137
        Catch ex As Exception
5138
        End Try
5139
    End Sub
5140

    
5141

    
5142
    Private Sub SymbolModeling(ByVal CDrawing As Drawing, ByVal oLine_DT As DataTable, ByVal oSymbolRow As DataRow, ByVal oAttribute_Dt As DataTable,
5143
                               ByVal sLineNoText As String)
5144
        Try
5145

    
5146
            Dim sCheckModeling As String = oSymbolRow(_XML_SYMBOL_DRAWING_TF).ToString()
5147
            If sCheckModeling = "FALSE" Then
5148
                Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5149
                Dim oSymbol As LMSymbol = Nothing
5150
                Dim sSPID As String = oSymbolRow(_XML_SYMBOL_SPID).ToString()
5151
                Dim sSystemPath As String = oSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
5152
                Dim oDatasource As Object = _Placement.PIDDataSource
5153
                Dim sSymbolCompType As String = oSymbolRow(_XML_SYMBOL_TYPE).ToString()
5154
                Dim dLocationX As Double = 0.0
5155
                Dim dLocationY As Double = 0.0
5156
                Dim dX As Double = 0.0
5157
                Dim dY As Double = 0.0
5158
                Dim sOriginalPoint As String = oSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
5159
                ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5160
                dX = dLocationX
5161
                dY = dLocationY
5162
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
5163

    
5164
                Dim dAngle As Double = oSymbolRow(_XML_SYMBOL_ANGLE)
5165

    
5166

    
5167
                'Dim oDatarow() As DataRow = oLine_DT.Select("[" & _XML_LINE_Conn1_Uid & "] = '" & sSymbolUid & "'")
5168
                'If oDatarow.Length = 0 Then
5169
                '    oDatarow = oLine_DT.Select("[" & _XML_LINE_Conn2_Uid & "] = '" & sSymbolUid & "'")
5170
                'End If
5171
                'Dim dFix_X As Double = 0.0
5172
                'Dim dFix_Y As Double = 0.0
5173
                'If oDatarow.Length > 0 Then
5174
                '    If dAngle <> 0 Then
5175
                '        sOriginalPoint = oDatarow(0)(_XML_LINE_STARTPOINT).ToString()
5176
                '        ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5177

    
5178
                '        ConvertPointByImage(dLocationX, dLocationY, _IMG_X, _IMG_Y)
5179
                '        dX = dLocationX
5180
                '    Else
5181
                '        sOriginalPoint = oDatarow(0)(_XML_LINE_STARTPOINT).ToString()
5182
                '        ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5183
                '        ConvertPointByImage(dLocationX, dLocationY, _IMG_X, _IMG_Y)
5184
                '        dY = dLocationY
5185
                '    End If
5186

    
5187
                'End If
5188

    
5189

    
5190

    
5191
                oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY,, dAngle)
5192
                SetListBoxItems(ListBox_Result, "Place Fitting.." & sSymbolUid & " (" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
5193

    
5194
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Place Fitting : " & sSymbolUid)
5195
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "LineNo : " & sLineNoText)
5196
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection1 : " & oSymbolRow(_XML_SYMBOL_Conn1_Uid).ToString())
5197
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection2 : " & oSymbolRow(_XML_SYMBOL_Conn2_Uid).ToString())
5198
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection3 : " & oSymbolRow(_XML_SYMBOL_Conn3_Uid).ToString())
5199
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Connection4 : " & oSymbolRow(_XML_SYMBOL_Conn4_Uid).ToString())
5200
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Angle : " & dAngle)
5201
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "OriginalPoint : " & dLocationX & "," & dLocationY)
5202
                ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, "Fitting Count : " & _iFittingcnt)
5203

    
5204

    
5205
                _iFittingcnt = _iFittingcnt + 1
5206
                oSymbolRow(_XML_SYMBOL_DRAWING_TF) = "TRUE"
5207
                Dim oAttributeRow() As DataRow
5208
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sSymbolUid + "'")
5209
                If oAttribute_Dt.Rows.Count > 0 Then
5210

    
5211
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
5212
                        Dim oInstrument As LMInstrument
5213
                        oInstrument = oDatasource.GetInstrument(oSymbol.ModelItemID)
5214
                        Try
5215
                            If oAttributeRow.Length > 0 Then
5216
                                For Each oAttribute In oAttributeRow
5217
                                    Try
5218
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5219
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5220
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5221
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
5222
                                    Catch ex As Exception
5223
                                    End Try
5224
                                Next
5225
                                oInstrument.Commit()
5226
                            End If
5227
                        Catch ex As Exception
5228
                        End Try
5229
                    Else
5230
                        Try
5231
                            If oAttributeRow.Length > 0 And oSymbol IsNot Nothing Then
5232
                                For Each oAttribute In oAttributeRow
5233
                                    Try
5234
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5235
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5236

    
5237
                                        If sPIDAttribute = "SIZE" Then
5238

    
5239
                                            'Nominal diamter1,2속성이름뭔지 찾아봐야됨 (2018-07-20)
5240
                                            If sPIDValue.Contains("x") Then
5241
                                                Dim sSplitSize() As String = sPIDValue.Split("x")
5242
                                                If sSplitSize.Count > 1 Then
5243
                                                    'Connection Point와 연결되어 있는 라인을 가져와서 라인프로퍼티를 변경
5244
                                                    Dim oConnector_1 As LMConnector = Nothing
5245
                                                    Dim oConnector_2 As LMConnector = Nothing
5246
                                                    If oSymbol IsNot Nothing Then
5247
                                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5248
                                                            For Each Tconnector In oSymbol.Connect1Connectors
5249
                                                                If Tconnector.ItemStatus = "Active" Then
5250
                                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5251
                                                                        oConnector_1 = Tconnector
5252
                                                                    End If
5253
                                                                End If
5254
                                                            Next
5255
                                                        End If
5256
                                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5257
                                                            For Each Tconnector In oSymbol.Connect1Connectors
5258
                                                                If Tconnector.ItemStatus = "Active" Then
5259
                                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5260
                                                                        oConnector_2 = Tconnector
5261
                                                                    End If
5262
                                                                End If
5263
                                                            Next
5264
                                                        End If
5265
                                                    End If
5266
                                                    Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(oConnector_1.ModelItemID)
5267
                                                    Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(oConnector_2.ModelItemID)
5268
                                                    If dAngle = 3.14 Then
5269
                                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(1)
5270
                                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(0)
5271
                                                    Else
5272
                                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(0)
5273
                                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(1)
5274
                                                    End If
5275

    
5276

    
5277
                                                End If
5278

    
5279
                                            Else
5280
                                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5281
                                                oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5282
                                            End If
5283
                                        Else
5284
                                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5285
                                            oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5286
                                        End If
5287

    
5288
                                    Catch ex As Exception
5289
                                    End Try
5290
                                Next
5291
                                oSymbol.Commit()
5292
                            End If
5293
                        Catch ex As Exception
5294
                        End Try
5295
                    End If
5296
                End If
5297

    
5298

    
5299

    
5300
            End If
5301

    
5302

    
5303

    
5304
            'Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
5305
            'Dim sConnTypeNo As String = ""
5306
            '' Line과 연결되어있는 Symbol인지 확인
5307
            'Dim oLine_Dt As DataTable = GetPipeFromConnection(CDrawing, sSymbolUid, sConnTypeNo)
5308
            ''Symbol과 연결되어 있는 Symbol인지 확인
5309
            'Dim oSymbol_Dt As DataTable = GetSymbolFromConnection(CDrawing, sSymbolUid, sConnTypeNo)
5310
            'Dim oSymbol As LMSymbol = Nothing
5311
            'Dim sSPID As String = oSymbolRow(_XML_SYMBOL_SPID).ToString()
5312
            'Dim sSystemPath As String = oSymbolRow(_XML_SYMBOL_SYSTEMPATH).ToString()
5313
            'Dim oDatasource As Object = _Placement.PIDDataSource
5314
            'Dim sSymbolCompType As String = oSymbolRow(_XML_SYMBOL_TYPE).ToString()
5315

    
5316
            'Dim dAngle As Double = 0.0
5317
            'If IsNumeric(oSymbolRow(_XML_SYMBOL_ANGLE).ToString()) Then
5318
            '    dAngle = Double.Parse(oSymbolRow(_XML_SYMBOL_ANGLE).ToString())
5319
            'End If
5320

    
5321
            'Dim dLocationX As Double = 0.0
5322
            'Dim dLocationY As Double = 0.0
5323
            'Dim dX As Double = 0.0
5324
            'Dim dY As Double = 0.0
5325
            'Dim sOriginalPoint As String = oSymbolRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
5326
            'ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY)
5327
            'dX = dLocationX
5328
            'dY = dLocationY
5329
            'ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
5330
            'Dim bCheckModeling As Boolean = False
5331

    
5332
            'If oLine_Dt.Rows.Count > 0 Then
5333

    
5334
            '    If sSPID <> "" Then
5335
            '        Dim dX1 As Double = 0
5336
            '        Dim dX2 As Double = 0
5337
            '        Dim dY1 As Double = 0
5338
            '        Dim dY2 As Double = 0
5339
            '        Dim oLMSymbol As LMSymbol = oDatasource.GetSymbol(sSPID)
5340
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
5341
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
5342

    
5343
            '        Dim dCalcPoint As Double = -1
5344
            '        Dim dModeling_X As Double = 0
5345
            '        Dim dModeling_Y As Double = 0
5346
            '        If dX1 <> 0 And dY1 <> 0 Then
5347
            '            dCalcPoint = Math.Abs(dX1 - dX) + Math.Abs(dY1 - dY)
5348
            '            dModeling_X = dX1
5349
            '            dModeling_Y = dY1
5350
            '        End If
5351
            '        If dX2 <> 0 And dY2 <> 0 Then
5352

    
5353
            '            If (Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY) > dCalcPoint) Then
5354
            '                dCalcPoint = Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY)
5355
            '                dModeling_X = dX2
5356
            '                dModeling_Y = dY2
5357
            '            End If
5358
            '        End If
5359

    
5360

    
5361

    
5362
            '        If dModeling_X <> 0 And dModeling_Y <> 0 Then
5363
            '            oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dModeling_X, dModeling_Y,, dAngle, ExistingItem:=oLMSymbol.AsLMAItem,
5364
            '                TargetItem:=oLMSymbol.AsLMRepresentation)
5365
            '            bCheckModeling = True
5366
            '        End If
5367

    
5368

    
5369
            '    End If
5370
            'End If
5371
            'If oSymbol_Dt.Rows.Count > 0 Then
5372
            '    If sSPID <> "" Then
5373
            '        Dim dX1 As Double = 0
5374
            '        Dim dX2 As Double = 0
5375
            '        Dim dX3 As Double = 0
5376
            '        Dim dX4 As Double = 0
5377
            '        Dim dY1 As Double = 0
5378
            '        Dim dY2 As Double = 0
5379
            '        Dim dY3 As Double = 0
5380
            '        Dim dY4 As Double = 0
5381
            '        Dim oLMSymbol As LMSymbol = oDatasource.GetSymbol(sSPID)
5382
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 1, dX1, dY1)
5383
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 2, dX2, dY2)
5384
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 3, dX3, dY3)
5385
            '        _Placement.PIDConnectPointLocation(oLMSymbol, 4, dX4, dY4)
5386

    
5387
            '        Dim dCalcPoint As Double = -1
5388
            '        Dim dModeling_X As Double = 0
5389
            '        Dim dModeling_Y As Double = 0
5390
            '        If dX1 <> 0 And dY1 <> 0 Then
5391
            '            dCalcPoint = Math.Abs(dX1 - dX) + Math.Abs(dY1 - dY)
5392
            '            dModeling_X = dX1
5393
            '            dModeling_Y = dY1
5394
            '        End If
5395
            '        If dX2 <> 0 And dY2 <> 0 Then
5396

    
5397
            '            If (Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY) > dCalcPoint) Then
5398
            '                dCalcPoint = Math.Abs(dX2 - dX) + Math.Abs(dY2 - dY)
5399
            '                dModeling_X = dX2
5400
            '                dModeling_Y = dY2
5401
            '            End If
5402
            '        End If
5403
            '        If dX3 <> 0 And dY3 <> 0 Then
5404
            '            If (Math.Abs(dX3 - dX) + Math.Abs(dY3 - dY) > dCalcPoint) Then
5405
            '                dCalcPoint = Math.Abs(dX3 - dX) + Math.Abs(dY3 - dY)
5406
            '                dModeling_X = dX3
5407
            '                dModeling_Y = dY3
5408
            '            End If
5409
            '        End If
5410
            '        If dX4 <> 0 And dY4 <> 0 Then
5411
            '            If (Math.Abs(dX4 - dX) + Math.Abs(dY4 - dY) > dCalcPoint) Then
5412
            '                dCalcPoint = Math.Abs(dX4 - dX) + Math.Abs(dY4 - dY)
5413
            '                dModeling_X = dX4
5414
            '                dModeling_Y = dY4
5415
            '            End If
5416
            '        End If
5417
            '        If dModeling_X <> 0 And dModeling_Y <> 0 Then
5418
            '            oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dModeling_X, dModeling_Y,, dAngle, ExistingItem:=oLMSymbol.AsLMAItem,
5419
            '                TargetItem:=oLMSymbol.AsLMRepresentation)
5420
            '            bCheckModeling = True
5421
            '        End If
5422

    
5423

    
5424
            '    End If
5425

    
5426
            'End If
5427

    
5428
            'If (oLine_Dt.Rows.Count = 0 And oSymbol_Dt.Rows.Count = 0) Or bCheckModeling = False Then
5429
            '    oSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
5430
            '    SetListBoxItems(ListBox_Result, "Place Fittings..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
5431
            '    _iFittingcnt = _iFittingcnt + 1
5432
            'End If
5433
            'Dim oAttributeRow() As DataRow
5434
            'oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sSymbolUid + "'")
5435
            'If oAttribute_Dt.Rows.Count > 0 Then
5436

    
5437
            '    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
5438
            '        Dim oInstrument As LMInstrument
5439
            '        oInstrument = oDatasource.GetInstrument(oSymbol.ModelItemID)
5440
            '        Try
5441
            '            If oAttributeRow.Length > 0 Then
5442
            '                For Each oAttribute In oAttributeRow
5443
            '                    Try
5444
            '                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5445
            '                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5446
            '                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5447
            '                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
5448
            '                    Catch ex As Exception
5449
            '                    End Try
5450
            '                Next
5451
            '                oInstrument.Commit()
5452
            '            End If
5453
            '        Catch ex As Exception
5454
            '        End Try
5455
            '    Else
5456
            '        Try
5457
            '            If oAttributeRow.Length > 0 And oSymbol IsNot Nothing Then
5458
            '                For Each oAttribute In oAttributeRow
5459
            '                    Try
5460
            '                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
5461
            '                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
5462

    
5463
            '                        If sPIDAttribute = "SIZE" Then
5464

    
5465
            '                            'Nominal diamter1,2속성이름뭔지 찾아봐야됨 (2018-07-20)
5466
            '                            If sPIDValue.Contains("x") Then
5467
            '                                Dim sSplitSize() As String = sPIDValue.Split("x")
5468
            '                                If sSplitSize.Count > 1 Then
5469
            '                                    'Connection Point와 연결되어 있는 라인을 가져와서 라인프로퍼티를 변경
5470
            '                                    Dim oConnector_1 As LMConnector = Nothing
5471
            '                                    Dim oConnector_2 As LMConnector = Nothing
5472
            '                                    If oSymbol IsNot Nothing Then
5473
            '                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5474
            '                                            For Each Tconnector In oSymbol.Connect1Connectors
5475
            '                                                If Tconnector.ItemStatus = "Active" Then
5476
            '                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5477
            '                                                        oConnector_1 = Tconnector
5478
            '                                                    End If
5479
            '                                                End If
5480
            '                                            Next
5481
            '                                        End If
5482
            '                                        If oSymbol.Connect1Connectors.Count >= 1 Then
5483
            '                                            For Each Tconnector In oSymbol.Connect1Connectors
5484
            '                                                If Tconnector.ItemStatus = "Active" Then
5485
            '                                                    If Tconnector.ModelItemObject.ItemTypeName = "PipeRun" Then
5486
            '                                                        oConnector_2 = Tconnector
5487
            '                                                    End If
5488
            '                                                End If
5489
            '                                            Next
5490
            '                                        End If
5491
            '                                    End If
5492
            '                                    Dim oPipeRun1 As LMPipeRun = oDatasource.GetPipeRun(oConnector_1.ModelItemID)
5493
            '                                    Dim oPipeRun2 As LMPipeRun = oDatasource.GetPipeRun(oConnector_2.ModelItemID)
5494
            '                                    If dAngle = 3.14 Then
5495
            '                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(1)
5496
            '                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(0)
5497
            '                                    Else
5498
            '                                        oPipeRun1.Attributes("NominalDiameter").Value = sSplitSize(0)
5499
            '                                        oPipeRun2.Attributes("NominalDiameter").Value = sSplitSize(1)
5500
            '                                    End If
5501

    
5502

    
5503
            '                                End If
5504

    
5505
            '                            Else
5506
            '                                Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5507
            '                                oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5508
            '                            End If
5509
            '                        Else
5510
            '                            Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
5511
            '                            oSymbol.Attributes(sSPPIDAttribute).Value = sPIDValue
5512
            '                        End If
5513

    
5514
            '                    Catch ex As Exception
5515
            '                    End Try
5516
            '                Next
5517
            '                oSymbol.Commit()
5518
            '            End If
5519
            '        Catch ex As Exception
5520
            '        End Try
5521
            '    End If
5522
            'End If
5523
        Catch ex As Exception
5524
        End Try
5525
    End Sub
5526

    
5527

    
5528

    
5529
    Private Function AutoModeling() As Boolean
5530
        Try
5531
            '_AllLine_DT = Line_Dt()
5532
            '_AllSymbol_DT = Symbol_Dt()
5533
            _ModelingLine_Dt = Line_Dt()
5534
            _ModelingSymbol_Dt = Symbol_Dt()
5535
            _CompleteConvert = False
5536
            Label_Progress.Text = "0%"
5537
            SetListBoxItems(ListBox_Result, " Auto converting 시작....")
5538
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 시작....")
5539
            Dim oDwg_Dt As DataTable = LoadAllDrawing()
5540
            _Log_File = "AutoConverting_" + DateTime.Now.ToString("yyyyMMdd") + "_" + DateTime.Now.ToString("HHmmss")
5541
            _allItem = GetAllCheckNodeCount()
5542
            _Itemcnt = 0
5543
            '1.Equipment
5544
            '2.Piping OPC
5545
            '3.OPC 시작되는 Line
5546
            InitAutoRouting()
5547
            EquipmentModeling(oDwg_Dt)
5548
            PipingModeling()
5549

    
5550
            '   PipeLine_Fitting_Modeling()
5551

    
5552
            SetProgressbar(ProgressBar_Status, 100)
5553
            Label_Progress.Text = "100%"
5554
            SetListBoxItems(ListBox_Result, " Auto converting 완료")
5555
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 완료")
5556
            _CompleteConvert = True
5557
            Return True
5558
        Catch ex As Exception
5559
            Return False
5560
        End Try
5561
    End Function
5562

    
5563

    
5564

    
5565
    Private Sub ThreadConvert()
5566
        If _DrawingsList IsNot Nothing Then
5567
            If _DrawingsList.Count > 0 Then
5568
                'TestBranchLine()
5569
                AutoModeling()
5570
            End If
5571
        End If
5572
    End Sub
5573

    
5574
    Private Sub ThreadOPCRemove()
5575
        While _CompleteConvert = False
5576
            Dim oFindOPC As New FindOpc
5577
            oFindOPC.RemoveOPCDlg()
5578
        End While
5579

    
5580
    End Sub
5581

    
5582

    
5583
    Private Function OpenDrawing(ByVal oDt As DataTable, ByVal sDwgName As String) As String
5584
        Dim oRows As DataRow() = oDt.Select("[Name] = '" & sDwgName & "'")
5585
        Dim oPath As String = ""
5586
        If oRows.Length > 0 Then
5587
            oPath = oRows(0).Item("Path").ToString()
5588
        End If
5589
        Return oPath
5590
    End Function
5591

    
5592
    Private Sub LoadXmlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LoadXmlToolStripMenuItem.Click
5593

    
5594
        If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
5595
            LoadDB()
5596
            LoadXmlItem(FolderBrowserDialog1.SelectedPath)
5597
        End If
5598
    End Sub
5599
    Private Sub LoadXmlItem(ByVal sFolderPath As String)
5600
        _DrawingsList = New List(Of Drawing)
5601
        Dim sfileEntries As String() = Directory.GetFiles(sFolderPath)
5602
        If Tree_Result.Nodes.Count > 0 Then
5603
            Tree_Result.Nodes(0).Nodes.Clear()
5604
            For Each sfileName In sfileEntries
5605
                Dim sExtension As String = Path.GetExtension(sfileName)
5606
                If sExtension = ".xml" Then
5607
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(sfileName)
5608
                    Dim sDwgPath As String = sfileName
5609
                    Dim oNode As TreeNode = Tree_Result.Nodes(0).Nodes.Add(sDwgPath, sDwgName, 15)
5610
                    Dim oDwg As Drawing = AddSymbolItem(sDwgPath, oNode)
5611

    
5612
                    _DrawingsList.Add(oDwg)
5613
                End If
5614
            Next
5615
            Tree_Result.Nodes(0).Expand()
5616
        End If
5617
    End Sub
5618

    
5619
    Private Sub GenerateRelation(ByRef oDwg_Ds As Drawing)
5620
        Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
5621
        Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
5622
        Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
5623
        Dim oRelation As New GenerateRelation()
5624
        For Each oLinelist In oLineLists
5625
            oRelation.CalcLineConnectionItem_Equal(oLinelist.Dt_Line, oLineLists)
5626
            oRelation.CalcLineConnectionItem_NonEqual(oLinelist.Dt_Line, oLineLists)
5627
            oRelation.CalcSymbolConnectionItem_Equal(oLinelist.Dt_Symbol, oLineLists)
5628
            oRelation.CalcSymbolConnectionItem_NonEqual(oLinelist.Dt_Symbol, oLineLists)
5629
        Next
5630
    End Sub
5631

    
5632

    
5633
    ''' <summary>
5634
    '''  XML Tree 구조 생성 
5635
    ''' </summary>
5636
    ''' <param name="sDwgPath"></param>
5637
    Private Function AddSymbolItem(ByVal sDwgPath As String, ByVal oParentNode As TreeNode) As Drawing
5638
        Dim oDwg_Ds As Drawing = LoadSymbolInXml(sDwgPath)
5639

    
5640

    
5641

    
5642
        'SetConnectionInfo()
5643
        '  GenerateRelation(oDwg_Ds)
5644

    
5645
        If oDwg_Ds IsNot Nothing Then
5646
            Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
5647

    
5648
            Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
5649

    
5650
            Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
5651

    
5652
            Dim oPipe As Boolean = False
5653
            Dim oFitting As Boolean = False
5654
            'PipeLine 구분
5655

    
5656
            For Each oLinelist In oLineLists
5657
                Dim sLineNoUid As String = oLinelist.Uid
5658
                Dim sLineNo As String = oLinelist.Text
5659
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
5660
                For Each oLineRow In oLinelist.Dt_Line.Rows
5661
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
5662
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
5663
                    Dim bValidLine As Boolean = oLineRow(_XML_LINE_ValieLine)
5664

    
5665

    
5666
                    If bValidLine = False Then
5667
                        oLineNoNode.ForeColor = Color.Red
5668
                        oPipeNode.ForeColor = Color.Red
5669
                    Else
5670

    
5671
                        Dim bLineType As String = oLineRow(_XML_LINE_TYPE)
5672
                        Dim bLineColor As Color = GetPipeColor(bLineType)
5673
                        If bLineType <> "Primary" Then
5674
                            '      MessageBox.Show("")
5675
                        End If
5676
                        oPipeNode.ForeColor = bLineColor
5677
                    End If
5678
                    oPipeNode.Tag = sLineNoUid
5679
                Next
5680
                For Each oSymbolRow In oLinelist.Dt_Symbol.Rows
5681
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5682
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
5683
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
5684

    
5685
                    oSymbolNode.Tag = sLineNoUid
5686
                Next
5687
            Next
5688

    
5689
            For Each oEqplist In oEqpLists
5690
                Dim sEqpUid As String = oEqplist.Uid
5691
                Dim sEqpNo As String = "EQUIPMENT"
5692
                Dim oEqpNode As TreeNode = oParentNode.Nodes.Add(sEqpUid, sEqpNo)
5693

    
5694

    
5695
                For Each oSymbolRow In oEqplist.Dt_Equipment.Rows
5696
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5697
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
5698
                    Dim oSymbolNode As TreeNode = oEqpNode.Nodes.Add(sSymbolUid, sSymbolName)
5699
                    oSymbolNode.Tag = sEqpUid
5700
                Next
5701
            Next
5702
            Dim sTrimLine As String = "TrimLineNos"
5703
            Dim iTrimLinecnt As Integer = 1
5704
            For Each oTrimLinelist In oTrimLineLists
5705
                Dim sLineNoUid As String = oTrimLinelist.Uid
5706
                Dim sLineNo As String = sTrimLine & "_" & iTrimLinecnt
5707
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
5708
                For Each oLineRow In oTrimLinelist.Dt_Line.Rows
5709
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
5710
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
5711
                    Dim bValidLine As Boolean = oLineRow(_XML_LINE_ValieLine)
5712
                    If bValidLine = False Then
5713
                        oLineNoNode.ForeColor = Color.Red
5714
                        oPipeNode.ForeColor = Color.Red
5715
                    Else
5716
                        Dim bLineType As String = oLineRow(_XML_LINE_TYPE)
5717
                        If bLineType <> "Primary" Then
5718
                            '     MessageBox.Show("")
5719
                        End If
5720
                        Dim bLineColor As Color = GetPipeColor(bLineType)
5721
                        oPipeNode.ForeColor = bLineColor
5722
                    End If
5723
                    oPipeNode.Tag = sLineNoUid
5724
                Next
5725
                For Each oSymbolRow In oTrimLinelist.Dt_Symbol.Rows
5726
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
5727
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
5728
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
5729
                    oSymbolNode.Tag = sLineNoUid
5730
                Next
5731
                iTrimLinecnt = iTrimLinecnt + 1
5732
            Next
5733

    
5734
        End If
5735

    
5736
        Return oDwg_Ds
5737
    End Function
5738
    Private Sub Tree_Result_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles Tree_Result.AfterCheck
5739
        If e.Node.Checked = True Then
5740
            For Each oNode As TreeNode In e.Node.Nodes
5741
                oNode.Checked = True
5742
            Next
5743
        Else
5744
            For Each oNode As TreeNode In e.Node.Nodes
5745
                oNode.Checked = False
5746
            Next
5747
        End If
5748
    End Sub
5749

    
5750
    Private Sub Btn_Setting_Click(sender As Object, e As EventArgs) Handles Btn_Setting.Click
5751
        Dim oSettings As Settings = New Settings()
5752
        oSettings.ShowDialog()
5753
    End Sub
5754

    
5755

    
5756
    Private Sub TestBranchLine()
5757
        Dim objPlacement As Placement
5758
        objPlacement = New Placement
5759
        Dim PipeRunLocation As String
5760
        Dim objItem As LMAItem
5761
        Dim objConnector As LMConnector
5762
        Dim objInputs As PlaceRunInputs
5763
        Dim objSymbol As LMSymbol
5764
        Dim ValveLocation As String
5765
        PipeRunLocation = "\Piping\Routing\Process Lines\Primary Piping.sym"
5766
        objInputs = New PlaceRunInputs
5767
        objInputs.AddPoint(0.1, 0.1)
5768
        objInputs.AddPoint(0.2, 0.1)
5769
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
5770
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
5771
        ValveLocation = "\Piping\Valves\2 Way Common\Ball Valve.sym"
5772
        objSymbol = objPlacement.PIDPlaceSymbol(ValveLocation, 0.15, 0.3, , 1.57)
5773
        objInputs = New PlaceRunInputs
5774
        objInputs.AddConnectorTarget(objConnector, 0.15, 0.1)
5775
        '   objInputs.AddConnectorTarget(objConnector, 0.12, 0.1)
5776
        objInputs.AddPoint(0.15, 0.15)
5777
        objInputs.AddPoint(0.12, 0.15)
5778
        objInputs.AddPoint(0.12, 0.2)
5779
        objInputs.AddPoint(0.15, 0.2)
5780
        objInputs.AddSymbolTarget(objSymbol, 0.15, 0.3)
5781
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
5782
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
5783

    
5784
        objInputs = New PlaceRunInputs
5785
        objInputs.AddConnectorTarget(objConnector, 0.17, 0.1)
5786
        objInputs.AddPoint(0.17, 0.15)
5787
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
5788
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
5789

    
5790
        objInputs = New PlaceRunInputs
5791
        objInputs.AddConnectorTarget(objConnector, 0.19, 0.1)
5792
        objInputs.AddPoint(0.19, 0.15)
5793
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
5794
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
5795

    
5796
        objInputs = New PlaceRunInputs
5797
        objInputs.AddConnectorTarget(objConnector, 0.12, 0.1)
5798
        objInputs.AddPoint(0.12, 0.15)
5799
        objItem = objPlacement.PIDCreateItem(PipeRunLocation)
5800
        objConnector = objPlacement.PIDPlaceRun(objItem, objInputs)
5801
    End Sub
5802

    
5803
    Private Sub Btn_TestNozzle_Click(sender As Object, e As EventArgs) Handles Btn_TestNozzle.Click
5804

    
5805
        Dim sVessel_ID As String = "841D5E640AE5421B9A017DDC2E87FF11"
5806
        Dim objVessel As LMVessel
5807
        objVessel = _Placement.PIDDataSource.GetVessel(sVessel_ID)
5808
        Dim oVesselLocation As LMLocations = objVessel.Locations
5809
        Dim symVessel As LMSymbol = _Placement.PIDDataSource.GetSymbol(objVessel.Representations.Nth(1).Id)
5810
        Dim XCoordinate As String = symVessel.Attributes("XCoordinate").Value
5811
        Dim YCoordinate As String = symVessel.Attributes("YCoordinate").Value
5812
        symVessel.Attributes("XCoordinate").Value = XCoordinate + 0.01
5813
        symVessel.Attributes("YCoordinate").Value = YCoordinate + 0.01
5814
        symVessel.Commit()
5815
        Dim sValve_ID As String = "DB7B0CA8A2664A6BA7A9615764BA62B0"
5816
        Dim objValve As LMSymbol
5817
        Dim objValves As LMPipingComp = _Placement.PIDDataSource.GetPipingComp(sValve_ID)
5818

    
5819
        objValve = _Placement.PIDDataSource.GetSymbol(objValves.Representations.Nth(1).Id)
5820
        objValve.Commit()
5821
        Dim dVesselX As Double = XCoordinate
5822
        Dim dVesselY As Double = YCoordinate
5823
        Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
5824

    
5825
        _Placement.PIDConnectPointLocation(objValve, 1, X1, Y1)
5826

    
5827
        _Placement.PIDConnectPointLocation(objValve, 2, X2, Y2)
5828

    
5829
        Dim nozzlename As String = "\Equipment Components\Nozzles\Flanged Nozzle.sym"
5830
        Dim dCalc_x As Double = 0
5831
        Dim dCalc_y As Double = 0
5832

    
5833
        If dVesselX - X2 > 0 Then
5834
            dCalc_x = dVesselX - (dVesselX - X2)
5835
        Else
5836
            dCalc_x = dVesselX + (X2 - dVesselX)
5837
        End If
5838
        If dVesselY - Y2 > 0 Then
5839
            dCalc_y = dVesselY - (dVesselY - Y2)
5840
        Else
5841
            dCalc_y = dVesselY + (Y2 - dVesselY)
5842
        End If
5843

    
5844
        Dim objNozzle As LMSymbol = _Placement.PIDPlaceSymbol(nozzlename, dCalc_x, dCalc_y,
5845
            TargetItem:=symVessel.AsLMRepresentation)
5846

    
5847
        Dim blnSuccess As Boolean = _Placement.PIDConnectPointLocation(objNozzle, 1, X1, Y1)
5848
        blnSuccess = _Placement.PIDConnectPointLocation(objNozzle, 2, X1, Y1)
5849

    
5850
        objValve = _Placement.PIDPlaceSymbol(objValve.FileName, X1, Y1, ExistingItem:=objValve.AsLMAItem,
5851
          TargetItem:=objNozzle.AsLMRepresentation)
5852

    
5853

    
5854

    
5855
    End Sub
5856

    
5857
    Private Sub Btn_SymbolLibrary_Click(sender As Object, e As EventArgs) Handles Btn_SymbolLibrary.Click
5858
        Dim oMapping As New Mapping(_PIDSymbol_DB)
5859
        oMapping.Show()
5860
    End Sub
5861

    
5862
    Private Sub Btn_Stop_Click(sender As Object, e As EventArgs) Handles Btn_Stop.Click
5863
        Try
5864
            SetListBoxItems(ListBox_Result, " Auto converting 중지....")
5865
            ComUtil.MessageLog.CEventLog.Log_Write_Update(_Log_Path, _Log_File, " Auto converting 중지....")
5866
            _Main_trd.Abort()
5867
            _Opc_trd.Abort()
5868
        Catch ex As Exception
5869

    
5870
        End Try
5871
    End Sub
5872

    
5873
    Private Sub AutoCheckTreeNode(ByVal iType As Integer, ByVal bCheck As Boolean)
5874

    
5875
        For Each oDrwing As TreeNode In Tree_Result.Nodes
5876
            For Each oDwgNode As TreeNode In oDrwing.Nodes
5877
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
5878
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
5879
                If CDrawing IsNot Nothing Then
5880
                    Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
5881
                    Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
5882
                    For Each oNode As TreeNode In oDwgNode.Nodes
5883
                        Dim iItemcnt As Integer = 0
5884
                        Dim sNodeUid As String = oNode.Name
5885
                        Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
5886

    
5887
                        If iType = 0 Then 'Symbol
5888
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
5889
                            If CLineNo IsNot Nothing Then
5890
                                Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
5891
                                For Each oSymbolRow In oSymbol_Dt.Rows
5892
                                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
5893
                                    For Each oSymbolNode As TreeNode In oNode.Nodes
5894
                                        Dim sSymbolNodeUid As String = oSymbolNode.Name
5895
                                        If sSymbolNodeUid = sSymbolUid Then
5896
                                            oSymbolNode.Checked = bCheck
5897
                                            Exit For
5898
                                        End If
5899
                                    Next
5900
                                Next
5901
                            End If
5902
                            Dim TrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
5903
                            If TrimLineNo IsNot Nothing Then
5904
                                Dim oSymbol_Dt As DataTable = TrimLineNo.Dt_Symbol
5905
                                For Each oSymbolRow In oSymbol_Dt.Rows
5906
                                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID).ToString()
5907
                                    For Each oSymbolNode As TreeNode In oNode.Nodes
5908
                                        Dim sSymbolNodeUid As String = oSymbolNode.Name
5909
                                        If sSymbolNodeUid = sSymbolUid Then
5910
                                            oSymbolNode.Checked = bCheck
5911
                                            Exit For
5912
                                        End If
5913
                                    Next
5914
                                Next
5915
                            End If
5916
                        End If
5917
                        If iType = 1 Then 'Line
5918
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
5919
                            If CLineNo IsNot Nothing Then
5920
                                Dim oLine_Dt As DataTable = CLineNo.Dt_Line
5921
                                For Each oLineRow In oLine_Dt.Rows
5922
                                    Dim sLineUid As String = oLineRow(_XML_LINE_UID).ToString()
5923
                                    For Each oLineNode As TreeNode In oNode.Nodes
5924
                                        Dim sLineNodeUid As String = oLineNode.Name
5925
                                        If sLineNodeUid = sLineUid Then
5926
                                            oLineNode.Checked = bCheck
5927
                                            Exit For
5928
                                        End If
5929
                                    Next
5930
                                Next
5931
                            End If
5932
                            Dim TrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
5933
                            If TrimLineNo IsNot Nothing Then
5934
                                Dim oLine_Dt As DataTable = TrimLineNo.Dt_Line
5935
                                For Each oLineRow In oLine_Dt.Rows
5936
                                    Dim sLineUid As String = oLineRow(_XML_SYMBOL_UID).ToString()
5937
                                    For Each oLineNode As TreeNode In oNode.Nodes
5938
                                        Dim sLineNodeUid As String = oLineNode.Name
5939
                                        If sLineNodeUid = sLineUid Then
5940
                                            oLineNode.Checked = bCheck
5941
                                            Exit For
5942
                                        End If
5943
                                    Next
5944
                                Next
5945
                            End If
5946
                        End If
5947
                        If iType = 2 Then 'Equipment
5948
                            Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
5949
                            If CEqpNo IsNot Nothing Then
5950
                                Dim oEqp_Dt As DataTable = CEqpNo.Dt_Equipment
5951
                                For Each oEqpRow In oEqp_Dt.Rows
5952
                                    Dim sEqpUid As String = oEqpRow(_XML_LINE_UID).ToString()
5953
                                    For Each oEqpNode As TreeNode In oNode.Nodes
5954
                                        Dim sEqpNodeUid As String = oEqpNode.Name
5955
                                        If sEqpNodeUid = sEqpUid Then
5956
                                            oEqpNode.Checked = bCheck
5957
                                            Exit For
5958
                                        End If
5959
                                    Next
5960
                                Next
5961
                            End If
5962
                        End If
5963
                    Next
5964
                End If
5965
            Next
5966
        Next
5967

    
5968

    
5969
    End Sub
5970

    
5971

    
5972

    
5973
    Private Sub Chk_Symbol_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Symbol.CheckedChanged
5974
        AutoCheckTreeNode(0, Chk_Symbol.Checked)
5975
    End Sub
5976

    
5977
    Private Sub Chk_Line_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Line.CheckedChanged
5978
        AutoCheckTreeNode(1, Chk_Line.Checked)
5979
    End Sub
5980

    
5981
    Private Sub Chk_Equipment_CheckedChanged(sender As Object, e As EventArgs) Handles Chk_Equipment.CheckedChanged
5982
        AutoCheckTreeNode(2, Chk_Equipment.Checked)
5983
    End Sub
5984
End Class
5985

    
5986

    
5987
Public Class DrawingInfo
5988
    Public mDrawingName As String
5989
    Public mSpID As String
5990
    Public mPath As String
5991
End Class
5992

    
5993

    
5994

    
5995

    
5996