프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / SPPIDConverter / Main.vb @ 4d51b770

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

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

    
8

    
9
Imports System.Threading
10

    
11
Public Class Main
12

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

    
19

    
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

    
28
    Dim _Unit As String
29

    
30
    'Drawing 전역변수
31
    Dim _objPIDADrawing As Object
32
    '현재선택한 폴더경로
33
    Dim _selectFolderPath As String
34

    
35
    Private _Main_trd As Thread
36
    Private _Opc_trd As Thread
37

    
38
    Private _CompleteConvert As Boolean = False
39

    
40
    Private _DrawingsList As List(Of Drawing)
41

    
42

    
43
    Private _iPipeLineNocnt As Integer
44
    Private _iPipecnt As Integer
45
    Private _iFittingcnt As Integer
46
    Private _iValvecnt As Integer
47
    Private _iInstrumentcnt As Integer
48
    Private _iEquipmentcnt As Integer
49
    Private _iNozzlecnt As Integer
50
    Private _iPipintOpccnt As Integer
51

    
52
    Dim _Gembox As New CGembox()
53

    
54

    
55
    Private _allItem As Integer
56
    Private _Itemcnt As Integer
57
    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
58
        LoadDB()
59
    End Sub
60

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

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

    
78
    Public Function GetDrawingInfo(ByVal errorList As ArrayList)
79
        Dim ds As Llama.LMADataSource
80
        ds = New Llama.LMADataSource
81
        Dim lmaItem As Llama.LMAItem
82
        For i = 0 To errorList.Count - 1
83
            lmaItem = ds.GetModelItem(errorList.Item(i).m_strSPID()).AsLMAItem
84
            Dim drawingInfo As DrawingInfo
85
            drawingInfo = GetDrawingName(lmaItem.ItemType, lmaItem.Id)
86
            errorList.Item(i).m_LMAItem = lmaItem
87
            errorList.Item(i).m_strDrawingName = drawingInfo.mDrawingName
88
            errorList.Item(i).m_strDrawingPath = drawingInfo.mPath
89
        Next
90
    End Function
91
    Private mDataSource As Object
92

    
93
    'Public Sub New()
94

    
95
    '    '  mDataSource.ProjectNumber = m_Information.InfoSite.SiteName
96
    '    '   mDataSource.SiteNode = m_Information.InfoProject.ProjectINI
97
    '    'm_Information = SPPIDClass.Information.GetInstance()
98

    
99
    '    'If m_Information.InfoProject.ProjectVersion = SPPIDClass.InfoProject.SPPID_43 Then
100
    '    '    'SPPID4.3용
101
    '    '    mDataSource.ProjectNumber = m_Information.InfoSite.SiteName
102
    '    'Else
103
    '    '    'SPPID2007, SPPID2009용
104
    '    '    mDataSource.ProjectNumber = m_Information.InfoSite.SiteName & "!" & m_Information.InfoSite.SiteName
105
    '    'End If
106

    
107
    '    '  mDataSource.SiteNode = m_Information.InfoProject.ProjectINI
108
    '    '  mDataSource.ProjectNumber = m_Information.InfoSite.SiteName & "!" & m_Information.InfoSite.SiteName
109
    '    '#If LATE_BINDING Then
110
    '    '        mInstruments = CreateObject("Llama.LMInstruments", "")
111
    '    '        mPipingComps = CreateObject("Llama.LMPipingComps", "")
112
    '    '        mVessels = CreateObject("Llama.LMVessels", "")
113
    '    '        mDrawings = CreateObject("Llama.LMDrawings", "")
114
    '    '        mEquipments = CreateObject("Llama.LMEquipments", "")
115
    '    '        mExchangers = CreateObject("Llama.LMExchangers", "")
116
    '    '        mMechanicals = CreateObject("Llama.LMMechanicals", "")
117
    '    '        mNozzles = CreateObject("Llama.LMNozzles", "")
118
    '    '        mPipeRuns = CreateObject("Llama.LMPipeRuns", "")
119
    '    '        mEquipmentOthers = CreateObject("Llama.LMEquipmentOthers", "")
120
    '    '#Else
121
    '    '        mInstruments = New Llama.LMInstruments
122
    '    '        mPipingComps = New Llama.LMPipingComps
123
    '    '        mVessels = New Llama.LMVessels
124
    '    '        mDrawings = New Llama.LMDrawings
125
    '    '        mEquipments = New Llama.LMEquipments
126
    '    '        mExchangers = New Llama.LMExchangers
127
    '    '        mMechanicals = New Llama.LMMechanicals
128
    '    '        mNozzles = New Llama.LMNozzles
129
    '    '        mPipeRuns = New Llama.LMPipeRuns
130
    '    '        mEquipmentOthers = New Llama.LMEquipmentOthers
131
    '    '#End If
132
    'End Sub
133

    
134
    Function OpenDrawing()
135
        Dim datasource As LMADataSource
136
        Dim objPIDAutoApp As Object
137
        Dim objPIDADrawing As Object
138
        Dim objDrawing As LMDrawing
139
        Dim objDrawings As LMDrawings
140
        datasource = New Llama.LMADataSource
141
        objPIDAutoApp = CreateObject("PIDAutomation.Application")
142
        objDrawings = New Llama.LMDrawings 'New LMDrawings
143
        datasource.SiteNode = "\\desktop-9vlq0dp\Test03Site\smartplantv4.ini"
144
        datasource.ProjectNumber = "SBR_PBR"
145
        objDrawings.Collect(datasource)
146

    
147
        For Each objDrawing In objDrawings
148
            If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
149
                objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(objDrawing.Attributes("Name"))
150
                If Not objPIDADrawing Is Nothing Then
151
                    'MsgBox "Drawing " & objDrawing.Attributes("Name").Value & " is opened!"
152
                    objPIDADrawing.CloseDrawing
153
                End If
154
            End If
155
        Next
156
        objPIDAutoApp.Quit
157
        objPIDAutoApp = Nothing
158
        objPIDADrawing = Nothing
159
        objDrawing = Nothing
160
        objDrawings = Nothing
161
    End Function
162

    
163

    
164
    Public Function GetDrawingName(ByVal itemType As String, ByVal itemName As String) As DrawingInfo
165

    
166
        Dim objFilter As Object
167
        objFilter = CreateObject("Llama.LMAFilter", "")
168

    
169
        Dim drawingInfo As DrawingInfo
170
        drawingInfo = New DrawingInfo
171

    
172
        objFilter.Criteria.AddNew("FirstOne")
173
        objFilter.Criteria.Item("FirstOne").SourceAttributeName = "SP_ID"
174
        objFilter.Critedkria.Item("FirstOne").ValueAttribute = itemName
175

    
176
        objFilter.Criteria.Item("FirstOne").Operator = "="
177
        objFilter.Criteria.AddNew("SecondOne")
178
        objFilter.Criteria.Item("SecondOne").SourceAttributeName = "ItemStatus"
179
        objFilter.Criteria.Item("SecondOne").ValueAttribute = 1
180
        objFilter.Criteria.Item("SecondOne").Operator = "="
181
        objFilter.Criteria.Item("SecondOne").Conjunctive = -1
182
        objFilter.ItemType = itemType
183

    
184
        Dim PlantItems As Object
185
        PlantItems = CreateObject("Llama.LMPlantItems", "")
186
        PlantItems.Collect(mDataSource, Filter:=objFilter)
187

    
188
        If PlantItems.Count = 0 Then
189
            drawingInfo.mSpID = "PlantStockpile"
190
        End If
191

    
192
        For Each PlantItem In PlantItems
193

    
194
            'If Not PlantItem.Representations.Nth(1).DrawingID.Value.ToString().Equals("0") Then
195
            Try
196
                drawingInfo.mDrawingName = PlantItem.Representations.Nth(1).DrawingObject.Attributes("Name").Value
197
                drawingInfo.mSpID = PlantItem.Representations.Nth(1).DrawingID
198
                drawingInfo.mPath = PlantItem.Representations.Nth(1).DrawingObject.Attributes("Path").Value
199
                Debug.WriteLine("DrawingName : " & drawingInfo.mDrawingName & ", SPID : " & drawingInfo.mSpID & ", Path : " & drawingInfo.mPath)
200
            Catch ex As Exception
201

    
202
            End Try
203

    
204
            'End If
205

    
206
        Next
207

    
208
        Return drawingInfo
209

    
210
    End Function
211

    
212
    Private Sub TestPID()
213
        Try
214
            Const CONST_SPID_OPC As String = "426E89964A7F49208AD79E1F320DA251"
215
            Dim datasource As LMADataSource
216
            Dim objPIDAutoApp As Object
217
            Dim objPIDADrawing As Object
218
            Dim objDrawing As LMDrawing
219
            Dim objDrawings As LMDrawings
220
            datasource = New LMADataSource
221
            Dim objOPC As LMOPC
222
            Dim objpairOPC As LMOPC
223
            objOPC = datasource.GetOPC(CONST_SPID_OPC)
224
            objpairOPC = objOPC.pairedWithOPCObject
225
            Dim oObj As Object = Nothing
226
            objDrawing = datasource.GetDrawing(oObj)
227
            objDrawings = New LMDrawings
228
            objDrawings.Collect(datasource)
229
            objPIDAutoApp = GetObject(, "SmartPlantPID.Application") '// CreateObject("PIDAutomation.Application")
230
            For Each objDrawing In objDrawings
231
                If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
232
                    objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(objDrawing.Attributes("Name"))
233
                    If Not objPIDADrawing Is Nothing Then
234
                        MessageBox.Show("Drawing " & objDrawing.Attributes("Name").Value & " is opened!")
235
                        objPIDADrawing.CloseDrawing
236
                    End If
237
                End If
238
            Next
239
            objPIDAutoApp.Quit
240
            objPIDAutoApp = Nothing
241
            objPIDADrawing = Nothing
242
            objDrawing = Nothing
243
            objDrawings = Nothing
244
        Catch ex As Exception
245
        End Try
246
    End Sub
247

    
248
    Public Function SetActiveSiteFromConfigInfo(ByVal strActiveSite As String) As Boolean
249
        On Error GoTo errHandler
250
        Dim objConfigInfo As Object 'interopigrConfigInfo412.igrConfigInfo
251
        objConfigInfo = CreateObject("interopigrConfigInfo412.igrConfigInfo", "")
252
        If Not objConfigInfo Is Nothing Then
253
            objConfigInfo.ApplicationName = "SmartPlantManager"
254
            objConfigInfo.SetConfigString(3, "SmartPlant Manager", "SiteServer", strActiveSite)
255
            SetActiveSiteFromConfigInfo = True
256
        End If
257
        objConfigInfo = Nothing
258
        Exit Function
259
errHandler:
260
        '    LogAndRaiseError ModuleName & "::GetConfigInfo "
261
    End Function
262

    
263
    Private Function CreateDwg(ByVal oDwgName As String) As Boolean
264
        Dim objPIDADrawing As Object = Nothing
265
        Dim objPIDAutoApp As Object = Nothing
266
        Dim datasource As LMADataSource = Nothing
267
        Try
268
            Dim DrawingNumber As String
269
            Dim DrawingName As String
270
            Dim sPlantGroupName As String = "Test"
271
            Dim sTemplateName As String = "\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\P&ID Reference Data\Template Files\Gazprom Project.pid"
272
            Dim objDrawing As LMDrawing
273
            Dim objDrawings As LMDrawings
274
            objDrawings = New LMDrawings
275
            datasource = New LMADataSource
276
            Debug.Print(datasource.ProjectNumber)
277
            Debug.Print(datasource.SiteNode)
278
            Debug.Print(datasource.IsSatellite)
279
            Debug.Print(datasource.GetSystemEditingToolbarSetting)
280
            objDrawings.Collect(datasource)
281
            Dim sPath As String = "‪\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\Plant_Hierarchy\8121\8121-1\188943-8121-PR-DW-011001.pid"
282
            objPIDAutoApp = CreateObject("PIDAutomation.Application")
283

    
284
            For Each objDrawing In objDrawings
285
                If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
286
                    objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(sPath)
287
                    If Not objPIDADrawing Is Nothing Then
288
                        objPIDADrawing.CloseDrawing
289
                    End If
290
                End If
291
            Next
292

    
293
            Dim extension As String = Path.GetExtension(oDwgName)
294
            oDwgName = oDwgName.Replace(extension, "")
295

    
296
            objPIDAutoApp = CreateObject("PIDAutomation.Application")
297

    
298
            'For Each objDrawing In objPIDAutoApp.Drawings
299
            '    objDrawing.CloseDrawing(True)
300
            'Next
301

    
302
            objPIDAutoApp.Drawings.OpenDrawing(oDwgName + ".pid")
303

    
304
            objPIDAutoApp.ActiveWindow.Fit()
305

    
306
            Return True
307
        Catch ex As Exception
308
            If objPIDADrawing IsNot Nothing Then
309
                objPIDADrawing.CloseDrawing
310
            End If
311
            If objPIDAutoApp IsNot Nothing Then
312
                objPIDAutoApp.Quit
313
            End If
314
            datasource = Nothing
315
            objPIDAutoApp = Nothing
316
            objPIDADrawing = Nothing
317
            Return False
318
        End Try
319
        If objPIDADrawing IsNot Nothing Then
320
            objPIDADrawing.CloseDrawing
321
        End If
322

    
323
    End Function
324

    
325

    
326
    Private Function GetDataFromMappingDB(ByVal sSymbolName As String, ByVal sColumn As String) As String
327
        Dim sValue As String = ""
328
        For Each oDt As DataTable In _Mapping_DB.Tables
329
            If oDt.Rows.Count > 0 Then
330
                Dim oSelectRow() As DataRow = oDt.Select("[img_symbolname] = '" + sSymbolName + "'")
331
                If oSelectRow.Length = 1 Then
332
                    If sColumn = _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME Then
333
                        sValue = oSelectRow(0).Item("SYM FILE NAME").ToString()
334
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH Then
335
                        sValue = "\" & oSelectRow(0).Item("SYMBOL PATH").ToString() & "\" & oSelectRow(0).Item("SYM FILE NAME").ToString()
336
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_COMPTPYE Then
337
                        sValue = oSelectRow(0).Item("ITEM TYPE").ToString()
338
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_CLASS Then
339
                        sValue = oSelectRow(0).Item("CLASS").ToString()
340
                    Else
341
                        sValue = oSelectRow(0).Item("SYMBOL PATH").ToString() & "\" & oSelectRow(0).Item("SYM FILE NAME").ToString()
342
                    End If
343

    
344
                End If
345
            End If
346
        Next
347

    
348
        Return sValue
349
    End Function
350

    
351
    Private Function GetAttributeMapping(ByVal sAttributeName As String, ByVal sColumn As String) As String
352
        Dim sSPPIDAttribute As String = ""
353
        If _Attribute_DB.Rows.Count > 0 Then
354
            Dim oSelectRow() As DataRow = _Attribute_DB.Select("[pid_attribute] = '" + sAttributeName + "'")
355
            If oSelectRow.Length = 1 Then
356
                sSPPIDAttribute = oSelectRow(0).Item(sColumn).ToString()
357
            End If
358
        End If
359
        Return sSPPIDAttribute
360
    End Function
361

    
362
    '  Dim _TempSymbolDt As DataTable = Symbol_Dt()
363

    
364

    
365
    Private Function LoadSymbolInXml(ByVal sXmlPath As String) As Drawing
366
        Try
367
            ''  _TempSymbolDt = Symbol_Dt()
368
            Dim CDrawing As Drawing = New Drawing()
369
            Dim oDt As DataTable = LoadSymbol_DT()
370
            Dim oElement As XElement = XElement.Load(sXmlPath)
371

    
372
            If oElement IsNot Nothing Then
373
                CDrawing.DwgName = oElement.Element(_XML_DWGNAME).Value
374
                CDrawing.Size = oElement.Element(_XML_DWGSIZE).Value
375
                SplitLocation(CDrawing.Size, _IMG_X, _IMG_Y)
376
                CDrawing.Unit = oElement.Element(_XML_UNIT).Value
377

    
378
                Dim oLineno_list As New List(Of Line_no)
379
                Dim oEqp_list As New List(Of Eqp_no)
380
                Dim oTrim_Lineno_list As New List(Of Line_no)
381
                oLineno_list = LoadLineNo(oElement, _XML_CATEGORY_LINENO)
382
                For Each oEqpNo As Object In oElement.Elements(_XML_CATEGORY_EQUIPMENT)
383
                    Dim CEqp_no As Eqp_no = New Eqp_no()
384
                    Dim oSymbol_Dt As DataTable = Symbol_Dt()
385
                    Dim oAttribute_Dt As DataTable = Attribute_Dt()
386
                    Dim sUid As String
387
                    For Each oSymbol As Object In oEqpNo.Elements(_XML_CATEGORY_SYMBOL)
388
                        Try
389
                            Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
390
                            Dim oEleObj As XElement
391
                            Dim sName As String
392
                            Dim sLocation As String
393
                            Dim sSize As String
394
                            Dim sAngle As String
395
                            Dim sOriginalPoint As String = ""
396
                            Dim sConnectionPoint As String = ""
397
                            oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
398
                            sUid = oEleObj.Value
399
                            oEleObj = oSymbol.Element(_XML_SYMBOL_NAME)
400
                            sName = oEleObj.Value
401
                            oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
402
                            sLocation = oEleObj.Value
403
                            oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
404
                            sSize = oEleObj.Value
405
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
406
                            sAngle = oEleObj.Value
407
                            oEleObj = oSymbol.Element(_XML_SYMBOL_CONNECTIONPOINT)
408
                            sConnectionPoint = oEleObj.Value
409
                            Try
410
                                oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
411
                                sOriginalPoint = oEleObj.Value
412
                            Catch ex As Exception
413
                            End Try
414
                            oAddrow(_XML_SYMBOL_UID) = sUid
415
                            oAddrow(_XML_SYMBOL_NAME) = sName
416
                            oAddrow(_XML_SYMBOL_LOCATION) = sLocation
417
                            oAddrow(_XML_SYMBOL_SIZE) = sSize
418
                            oAddrow(_XML_SYMBOL_ANGLE) = sAngle
419
                            oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
420
                            oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
421
                            oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
422
                            oAddrow(_XML_SYMBOL_CONNECTIONPOINT) = sConnectionPoint
423
                            oAddrow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
424
                            oSymbol_Dt.Rows.Add(oAddrow)
425
                        Catch ex As Exception
426

    
427
                        End Try
428
                    Next
429
                    For Each oAtrribute As Object In oEqpNo.Elements(_XML_CATEGORY_ATTRIBUTE)
430
                        Try
431
                            Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
432
                            Dim oEleObj As XElement
433
                            Dim sAttUid As String
434
                            Dim sName As String
435
                            Dim sValue As String
436
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
437
                            sAttUid = oEleObj.Value
438
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
439
                            sName = oEleObj.Value
440
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
441
                            sValue = oEleObj.Value
442
                            oAddrow(_XML_ATTRIBUTE_UID) = sAttUid
443
                            oAddrow(_XML_ATTRIBUTE_NAME) = sName
444
                            oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
445
                            oAttribute_Dt.Rows.Add(oAddrow)
446
                        Catch ex As Exception
447
                        End Try
448
                    Next
449
                    CEqp_no.Uid = sUid
450
                    CEqp_no.Dt_Equipment = oSymbol_Dt
451
                    CEqp_no.Dt_Attribute = oAttribute_Dt
452
                    oEqp_list.Add(CEqp_no)
453
                Next
454
                oTrim_Lineno_list = LoadLineNo(oElement, _XML_CATEGORY_TRIM_LINENO)
455
                CDrawing.Line_nos = oLineno_list
456
                CDrawing.Eqp_nos = oEqp_list
457
                CDrawing.TrimLine_nos = oTrim_Lineno_list
458

    
459
            End If
460
            Return CDrawing
461
        Catch ex As Exception
462
            Return Nothing
463
        End Try
464

    
465
    End Function
466

    
467

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

    
470
        Dim oLineno_list As New List(Of Line_no)
471

    
472
        For Each oLineNo As Object In oElement.Elements(sLineType)
473

    
474
            Dim CLineNo As Line_no = New Line_no()
475
            Try
476
                CLineNo.Uid = oLineNo.Element(_XML_LINENO_UID).Value
477
                CLineNo.Text = oLineNo.Element(_XML_LINENO_TEXT).Value
478
                CLineNo.Location = oLineNo.Element(_XML_LINENO_LOCATION).Value
479
                CLineNo.Angle = oLineNo.Element(_XML_LINENO_ANGLE).Value
480
                CLineNo.SystemPath = "\Piping\Labels - Piping Segments\Kemya Line Number.sym" 'GetDataFromMappingDB(_XML_CATEGORY_LINENO, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
481
            Catch ex As Exception
482
                'CLineNo.Text = "PipeLineNo"
483
                'CLineNo.Uid = "PipeLineNo"
484
            End Try
485

    
486

    
487
            Dim oLine_Dt As DataTable = Line_Dt()
488
            Dim oSymbol_Dt As DataTable = Symbol_Dt()
489
            Dim oAttribute_Dt As DataTable = Attribute_Dt()
490

    
491
            For Each oRun As Object In oLineNo.Elements(_XML_CATEGORY_RUN)
492
                For Each oLine As Object In oRun.Elements(_XML_CATEGORY_LINE)
493
                    Try
494
                        Dim oAddrow As DataRow = oLine_Dt.NewRow()
495
                        Dim oEleObj As XElement
496
                        Dim sUid As String
497
                        Dim sStartpoint As String
498
                        Dim sEndpoint As String
499
                        Dim sType As String
500
                        oEleObj = oLine.Element(_XML_LINE_UID)
501
                        sUid = oEleObj.Value
502
                        If oLine_Dt.Select(_XML_LINE_UID & "='" & sUid & "'").Length = 0 Then
503
                            oEleObj = oLine.Element(_XML_LINE_STARTPOINT)
504
                            sStartpoint = oEleObj.Value
505
                            oEleObj = oLine.Element(_XML_LINE_ENDPOINT)
506
                            sEndpoint = oEleObj.Value
507
                            oEleObj = oLine.Element(_XML_LINE_TYPE)
508
                            sType = oEleObj.Value
509
                            oAddrow(_XML_LINE_UID) = sUid
510
                            oAddrow(_XML_LINE_STARTPOINT) = sStartpoint
511
                            oAddrow(_XML_LINE_ENDPOINT) = sEndpoint
512
                            oAddrow(_XML_LINE_SYSTEMPATH) = GetDataFromMappingDB(_XML_CATEGORY_LINE, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
513
                            oAddrow(_XML_LINE_DRAWING_TF) = "FALSE"
514
                            oAddrow(_XML_LINE_TYPE) = sType
515
                            oLine_Dt.Rows.Add(oAddrow)
516
                        Else
517

    
518
                        End If
519

    
520
                    Catch ex As Exception
521

    
522
                    End Try
523

    
524
                Next
525

    
526
                For Each oSymbol As Object In oRun.Elements(_XML_CATEGORY_SYMBOL)
527
                    Try
528
                        Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
529
                        Dim oEleObj As XElement
530
                        Dim sUid As String
531
                        Dim sName As String
532
                        Dim sLocation As String
533
                        Dim sSize As String
534
                        Dim sAngle As String
535
                        Dim sOriginalPoint As String = ""
536
                        oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
537
                        sUid = oEleObj.Value
538
                        oEleObj = oSymbol.Element(_XML_SYMBOL_PARENT)
539
                        sName = oEleObj.Value
540
                        oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
541
                        sLocation = oEleObj.Value
542
                        oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
543
                        sSize = oEleObj.Value
544
                        oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
545
                        sAngle = oEleObj.Value
546
                        Try
547
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
548
                            sOriginalPoint = oEleObj.Value
549
                        Catch ex As Exception
550

    
551
                        End Try
552

    
553
                        oAddrow(_XML_SYMBOL_UID) = sUid
554
                        oAddrow(_XML_SYMBOL_NAME) = IO.Path.GetFileNameWithoutExtension(GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME))
555
                        oAddrow(_XML_SYMBOL_LOCATION) = sLocation
556
                        oAddrow(_XML_SYMBOL_SIZE) = sSize
557
                        oAddrow(_XML_SYMBOL_ANGLE) = sAngle
558
                        oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
559
                        oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
560
                        oAddrow(_XML_SYMBOL_CLASS) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_CLASS)
561
                        oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
562
                        oAddrow(_XML_SYMBOL_DRAWING_TF) = "FALSE"
563
                        oSymbol_Dt.Rows.Add(oAddrow)
564
                    Catch ex As Exception
565

    
566
                    End Try
567

    
568
                Next
569

    
570
                For Each oAtrribute As Object In oRun.Elements(_XML_CATEGORY_ATTRIBUTE)
571
                    Try
572
                        Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
573
                        Dim oEleObj As XElement
574
                        Dim sUid As String
575
                        Dim sName As String
576
                        Dim sValue As String
577

    
578
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
579
                        sUid = oEleObj.Value
580
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
581
                        sName = oEleObj.Value
582
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
583
                        sValue = oEleObj.Value
584

    
585
                        oAddrow(_XML_ATTRIBUTE_UID) = sUid
586
                        oAddrow(_XML_ATTRIBUTE_NAME) = sName
587
                        oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
588
                        oAttribute_Dt.Rows.Add(oAddrow)
589
                    Catch ex As Exception
590

    
591
                    End Try
592

    
593
                Next
594

    
595
            Next
596
            'Line No Attribute
597
            For Each oAtrribute As Object In oLineNo.Elements(_XML_CATEGORY_ATTRIBUTE)
598
                Try
599
                    Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
600
                    Dim oEleObj As XElement
601
                    Dim sUid As String = ""
602
                    Dim sName As String
603
                    Dim sValue As String
604

    
605
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
606
                    sUid = oEleObj.Value
607
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
608
                    sName = oEleObj.Value
609
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
610
                    sValue = oEleObj.Value
611
                    oAddrow(_XML_ATTRIBUTE_UID) = sUid
612
                    oAddrow(_XML_ATTRIBUTE_NAME) = sName
613
                    oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
614
                    oAttribute_Dt.Rows.Add(oAddrow)
615
                Catch ex As Exception
616
                End Try
617
            Next
618
            CLineNo.Dt_Line = oLine_Dt
619
            CLineNo.Dt_Symbol = oSymbol_Dt
620
            CLineNo.Dt_Attribute = oAttribute_Dt
621
            oLineno_list.Add(CLineNo)
622
        Next
623
        Return oLineno_list
624
    End Function
625

    
626

    
627
    'Private Function LoadPipeInXml(ByVal sXmlPath As String) As DataTable
628
    '    Try
629
    '        Dim oDt As DataTable = LoadPipe_DT()
630
    '        Dim oElement As XElement = XElement.Load(sXmlPath)
631
    '        If oElement IsNot Nothing Then
632
    '            Dim DWGElement As XElement = oElement.Element("DWGNAME")
633
    '            Dim DWGNAME = DWGElement.Value
634
    '            Dim sXY As XElement = oElement.Element("SIZE")
635
    '            Dim sSize = sXY.Value
636
    '            Dim oSplitDWGPos As String() = sSize.Split(", ")
637

    
638
    '            If IsNumeric(oSplitDWGPos(0)) Then
639
    '                _IMG_X = Double.Parse(oSplitDWGPos(0))
640
    '            End If
641
    '            If IsNumeric(oSplitDWGPos(1)) Then
642
    '                _IMG_Y = Double.Parse(oSplitDWGPos(1))
643
    '            End If
644

    
645
    '            For Each pipes As Object In oElement.Elements("IMGLINES")
646
    '                For Each pipe As Object In pipes.Elements("IMGLINE")
647
    '                    Dim oAddrow As DataRow = oDt.NewRow()
648
    '                    Dim oObj As XElement = pipe.Element("ITEM")
649
    '                    Dim oItem = oObj.Value
650
    '                    ' Dim oSymbolPath As String = "\" + oSymbol + "\" + oClass + "\" + oType + "\" + oItem + ".sym"
651
    '                    Dim oSymbolPath As String = GetSystemPathFromMappingDB(oItem)
652
    '                    oObj = pipe.Element("START")
653
    '                    Dim oStartPoint = oObj.Value
654
    '                    Dim oSplitPos As String() = oStartPoint.Split(", ")
655
    '                    Dim oStartpos_X As Double = 0.0
656
    '                    Dim oStartpos_Y As Double = 0.0
657
    '                    If IsNumeric(oSplitPos(0)) Then
658
    '                        oStartpos_X = Double.Parse(oSplitPos(0))
659
    '                    End If
660
    '                    If IsNumeric(oSplitPos(1)) Then
661
    '                        oStartpos_Y = Double.Parse(oSplitPos(1))
662
    '                    End If
663

    
664
    '                    ConvertPoint(oStartpos_X, oStartpos_Y, _DWG_X, _DWG_Y)
665
    '                    oObj = pipe.Element("End")
666
    '                    Dim oEndPoint = oObj.Value
667
    '                    oSplitPos = oEndPoint.Split(", ")
668
    '                    Dim oEndpos_X As Double = 0.0
669
    '                    Dim oEndpos_Y As Double = 0.0
670
    '                    If IsNumeric(oSplitPos(0)) Then
671
    '                        oEndpos_X = Double.Parse(oSplitPos(0))
672
    '                    End If
673
    '                    If IsNumeric(oSplitPos(1)) Then
674
    '                        oEndpos_Y = Double.Parse(oSplitPos(1))
675
    '                    End If
676
    '                    ConvertPoint(oEndpos_X, oEndpos_Y, _DWG_X, _DWG_Y)
677

    
678
    '                    oAddrow("start_x") = oStartpos_X '+ 0.05
679
    '                    oAddrow("start_y") = oStartpos_Y
680
    '                    oAddrow("end_x") = oEndpos_X
681
    '                    oAddrow("end_y") = oEndpos_Y
682
    '                    oAddrow("SystemPath") = oSymbolPath
683
    '                    oDt.Rows.Add(oAddrow)
684
    '                Next
685
    '            Next
686

    
687
    '        End If
688

    
689

    
690
    '        Return oDt
691
    '    Catch ex As Exception
692
    '        Return Nothing
693
    '    End Try
694
    'End Function
695

    
696

    
697
    Private Sub ConvertPointByImage(ByRef dX As Double, ByRef dY As Double, ByVal dDwgX As Double, ByVal dDwgY As Double)
698

    
699
        Dim calcx As Double = 0
700
        Dim calcy As Double = 0
701
        calcx = (dX * _DWG_X) / dDwgX 'Math.Round((dX * _DWG_X) / dDwgX, 2)
702
        calcy = _DWG_Y - ((dY * _DWG_Y) / dDwgY) '_DWG_Y - Math.Round((dY * _DWG_Y) / dDwgY, 2)
703
        dX = calcx
704
        dY = calcy
705
    End Sub
706

    
707

    
708
    '@brief Convert To SPPID
709
    '@author : Gyusu Park
710
    '@date : 2018-04-10
711
    '@history:
712

    
713
    Private Sub SplitLocation(ByVal sLocation As String, ByRef dX As Double, ByRef dY As Double)
714

    
715
        Dim opointstr As String() = Split(sLocation, ",")
716
        If (opointstr.Length > 1) Then
717
            If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
718
                dX = opointstr(0)
719
                dY = opointstr(1)
720
            End If
721
        End If
722

    
723
    End Sub
724

    
725

    
726

    
727

    
728

    
729

    
730
    Private Function AutoConverting(ByVal oPipe_Dt As DataTable, ByVal oSymbol_Dt As DataTable, ByVal oTreeNode As TreeNode) As Boolean
731
        Dim iTotalCount As Double = oPipe_Dt.Rows.Count + oSymbol_Dt.Rows.Count
732
        Dim iSymbolcount As Double = 0
733

    
734
        Dim lobjDatasource As Object = _Placement.PIDDataSource
735

    
736
        ' lobjDatasource.BeginTransaction()
737
        '  datasource = objPlacement.PIDDataSource
738
        'Dim iPipecnt As Integer = 0
739
        SetListBoxItems(ListBox_Result, " Auto converting 시작....")
740

    
741
        Dim iPipeCnt As Integer = 0
742
        If oPipe_Dt IsNot Nothing Then
743
            For Each oRow As DataRow In oPipe_Dt.Rows
744
                Dim oposition As String = oRow("position").ToString()
745
                Dim oSymbol As String = oRow("SystemPath").ToString()
746

    
747
                Dim objConnector As LMConnector
748
                Dim objInputs As PlaceRunInputs
749
                objInputs = New PlaceRunInputs
750
                Dim oSplitStr As String() = Split(oposition, " ")
751
                For Each sposition As String In oSplitStr
752
                    Dim opointstr As String() = Split(sposition, ", ")
753

    
754
                    If (opointstr.Length > 1) Then
755
                        If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
756
                            Dim ox As Double = opointstr(0)
757
                            Dim oy As Double = opointstr(1)
758
                            ConvertPointByImage(ox, oy, _IMG_X, _IMG_Y)
759
                            objInputs.AddPoint(ox, oy)
760
                        End If
761
                    End If
762
                Next
763
                Dim objItem As LMAItem
764
                objItem = _Placement.PIDCreateItem(oSymbol)
765
                objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
766
                SetListBoxItems(ListBox_Result, " Place PipeLine...." & "(" & (iPipeCnt + 1) & "/" & oPipe_Dt.Rows.Count)
767
                'Dim objPipeRun As LMPipeRun = datasource.GetPipeRun(objConnector.ModelItemID)
768
                'objPipeRun.Attributes("OperFluidCode").Value = "AFS"
769
                'objPipeRun.Commit()
770
                iSymbolcount = iSymbolcount + 1
771
                iPipeCnt = iPipeCnt + 1
772
            Next
773
        End If
774

    
775
        SetListBoxItems(ListBox_Result, " Place PipeLine....완료")
776

    
777
        Dim iAllInstrumentCnt As Integer = oSymbol_Dt.Select("Name = 'INSTRUMENTATION'").Length
778
                    Dim iValveCnt As Integer = oSymbol_Dt.Select("Class = 'VALVES'").Length
779
        Dim iInstrumentCnt As Integer = 1
780
        Dim iFittingsCnt As Integer = 1
781

    
782
        Dim oInsNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Instruments", True)(0)
783
        Dim oValveNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Valves", True)(0)
784
        Dim oFittingsNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Fittings", True)(0)
785
        For Each oRow As DataRow In oSymbol_Dt.Rows
786

    
787
            Try
788

    
789
                Dim sSystemPath As String = oRow("SystemPath").ToString()
790
                Dim sName As String = oRow("Name").ToString()
791
                Dim sType As String = oRow("Type").ToString()
792
                Dim sText As String = oRow("Text").ToString()
793
                Dim sClass As String = oRow("Class").ToString()
794
                Dim sItem As String = oRow("Item").ToString()
795

    
796
                Dim oX As Double = 0.0
797
                Dim oY As Double = 0.0
798
                If IsNumeric(oRow("x").ToString()) Then
799
                    oX = Double.Parse(oRow("x").ToString())
800
                End If
801
                If IsNumeric(oRow("y").ToString()) Then
802
                    oY = Double.Parse(oRow("y").ToString())
803
                End If
804
                Dim oAngle As Double = 0.0
805
                If IsNumeric(oRow("Angle").ToString()) Then
806
                    oAngle = Double.Parse(oRow("Angle").ToString())
807
                End If
808
                '   oSymbol = "\INSTRUMENTation\SYSTEM FUNCTIONS\D C S\DCS FUNC ACCESS IN PRIME LOC.sym"
809
                If sSystemPath <> "" Then
810
                    If sName = _TYPE_Instumentation Then
811

    
812
                        Dim sTagsuffix As String = ""
813
                        Dim sTagSequenceNo As String = ""
814
                        Dim sMeasuredVariableCode As String = ""
815
                        Dim sInstrumentTypeModifier As String = ""
816

    
817
                        If sText <> "" Then
818
                            If sText.Contains(",") Then
819
                                Dim splitstr() As String = sText.Split(",")
820
                                For i = 0 To splitstr.Count - 1
821
                                    If i = 0 Then
822
                                        sMeasuredVariableCode = Mid(splitstr(i), 1, 1)
823
                                        sTagSequenceNo = Mid(splitstr(i), 2, Len(splitstr(i)))
824
                                    Else
825
                                        If Len(splitstr(i)) = 1 Then
826
                                            sInstrumentTypeModifier = splitstr(i)
827
                                        ElseIf Len(splitstr(i)) = 0 Then
828

    
829
                                        ElseIf Len(splitstr(i)) > 1 Then
830
                                            sInstrumentTypeModifier = Mid(splitstr(i), 1, 1)
831
                                            sTagsuffix = Mid(splitstr(i), 2, Len(splitstr(i)))
832
                                        End If
833
                                    End If
834
                                Next
835
                            Else
836
                                sMeasuredVariableCode = Mid(sText, 1, 1)
837
                                sTagSequenceNo = Mid(sText, 2, Len(sText))
838
                            End If
839

    
840
                        End If
841

    
842
                        Dim objInstrSym As LMSymbol
843
                        objInstrSym = _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
844
                        SetListBoxItems(ListBox_Result, " Place Instrument...." & "(" & (iInstrumentCnt + 1) & "/" & iAllInstrumentCnt & ")")
845

    
846
                        ' SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sTagSequenceNo)
847
                        Dim action As Action = Sub()
848
                                                   oInsNode.Nodes.Add(sClass & "-" & iInstrumentCnt)
849
                                                   oInsNode.ExpandAll()
850
                                               End Sub
851
                        oInsNode.TreeView.Invoke(action)
852

    
853

    
854
                        Dim objInstr As LMInstrument
855
                        objInstr = lobjDatasource.GetInstrument(objInstrSym.ModelItemID)
856

    
857
                        Dim objItem As LMAItem
858
                        objItem = _Placement.PIDCreateItem(sSystemPath)
859

    
860

    
861
                        objInstr.Attributes("MeasuredVariableCode").Value = sMeasuredVariableCode
862
                        objInstr.Attributes("InstrumentTypeModifier").Value = sInstrumentTypeModifier
863
                        objInstr.Attributes("TagSuffix").Value = sTagsuffix
864
                        objInstr.Attributes("TagSequenceNo").Value = sTagSequenceNo
865
                        objInstr.Commit()
866
                        iInstrumentCnt = iInstrumentCnt + 1
867
                    ElseIf sName = "GATE VALVE WITH PLUG" Then
868

    
869
                    ElseIf sName = "MEDIUM 1D 1TO1" Then
870

    
871
                    ElseIf sClass = "VALVES" Then
872
                        Dim action As Action = Sub()
873
                                                   oValveNode.ExpandAll()
874
                                                   oValveNode.Nodes.Add(sClass & "-" & iValveCnt)
875
                                               End Sub
876
                        oValveNode.TreeView.Invoke(action)
877

    
878
                        _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
879

    
880
                        iValveCnt = iValveCnt + 1
881
                    Else
882
                        Dim action As Action = Sub()
883
                                                   oFittingsNode.ExpandAll()
884
                                                   oFittingsNode.Nodes.Add(sClass & "-" & iFittingsCnt)
885
                                               End Sub
886
                        oFittingsNode.TreeView.Invoke(action)
887
                        _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
888

    
889
                        iFittingsCnt = iFittingsCnt + 1
890

    
891
                    End If
892
                    iSymbolcount = iSymbolcount + 1
893
                Else
894
                End If
895
            Catch ex As Exception
896

    
897
            End Try
898
            Dim dCalcProgressValue As Double = (iSymbolcount / iTotalCount) * 100
899
            SetProgressbar(ProgressBar_Status, dCalcProgressValue)
900
            '     ProgressBar_Status.Value = (iSymbolcount / iTotalCount) * 100
901

    
902
        Next
903

    
904
        MsgBox("Complete AutoConverting")
905
        SetListBoxItems(ListBox_Result, "Place Instrument....변환완료")
906
        SetListBoxItems(ListBox_Result, "총 symbol:  " & iSymbolcount & "개 변환완료")
907
        SetProgressbar(ProgressBar_Status, 100)
908

    
909
        ' MsgBox("symbol: " & iSymbolcount & "개, pipe : " & iPipecnt & "개 변환완료")
910
    End Function
911

    
912

    
913
    Private Sub Tree_XMLFiles_AfterCheck(sender As Object, e As TreeViewEventArgs)
914
        If e.Node.Checked = True Then
915
            For Each oNode As TreeNode In e.Node.Nodes
916
                oNode.Checked = True
917
            Next
918
        Else
919
            For Each oNode As TreeNode In e.Node.Nodes
920
                oNode.Checked = False
921
            Next
922
        End If
923
    End Sub
924

    
925
    Private Function Load_DB(ByVal sDBPath As String, ByVal sTableName As String) As DataTable
926

    
927
        Try
928
            Dim oDt As New DataTable
929
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
930
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
931
            conn.Open()
932
            Dim sQuery As String = "Select * from " & sTableName
933
            Dim cmd As SQLiteCommand = conn.CreateCommand()
934
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
935
            Dim oDataSet As DataSet = New DataSet()
936
            adapter.Fill(oDataSet)
937
            oDt = oDataSet.Tables(0)
938
            Return oDt
939
        Catch ex As Exception
940
            Return Nothing
941
        End Try
942

    
943

    
944
    End Function
945

    
946
    Private Sub Load_AttributeDB(ByVal sDBPath As String)
947

    
948
        Try
949
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
950
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
951
            conn.Open()
952
            Dim sQuery As String = "Select * from Attribute"
953
            Dim cmd As SQLiteCommand = conn.CreateCommand()
954
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
955
            Dim oDataSet As DataSet = New DataSet()
956
            adapter.Fill(oDataSet)
957
            _Attribute_DB = oDataSet.Tables(0)
958
        Catch ex As Exception
959

    
960
        End Try
961

    
962

    
963
    End Sub
964

    
965
    'Private Sub Tree_XMLFiles_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles Tree_XMLFiles.AfterSelect
966
    '    If first_start = False Then Exit Sub
967
    '    Dim pa = e.Node.FullPath.ToString
968

    
969
    '    printfilesfolders_here(pa, e.Node)
970

    
971
    '    displayfiles(pa)
972

    
973
    '    Dim coco As String = ""
974
    '    coco = pa.ToString
975
    '    coco = coco.Replace("\\", "\")
976
    '    Me.Text = coco
977
    '    folders_path = coco
978
    'End Sub
979

    
980
    Sub printfilesfolders_here(ByVal path As String, ByRef itree As TreeNode)
981

    
982
        Dim foldername As String
983
        Dim filename As String
984
        itree.Nodes.Clear()
985
        On Error GoTo eee
986
        For Each foldername In Directory.GetDirectories(path)
987
            On Error GoTo eee
988
            Dim jj = foldername.LastIndexOf("\")
989
            Dim jj1 = foldername.Length - jj
990
            Dim foldr = foldername.Substring((jj + 1), (jj1 - 1))
991
            itree.Nodes.Add(foldr, foldr)
992
        Next ' if you put this next at the end of procedure recursive will be done on first folder only
993
        Exit Sub
994
eee:
995
    End Sub
996

    
997

    
998

    
999
    '    Private Sub Tree_XMLFiles_MouseMove(sender As Object, e As MouseEventArgs) Handles Tree_XMLFiles.MouseMove
1000
    '        first_start = True
1001
    '    End Sub
1002

    
1003
    '    Private Sub ListView_File_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView_File.SelectedIndexChanged
1004
    '        Dim indexes As ListView.SelectedIndexCollection =
1005
    '                         Me.ListView_File.SelectedIndices
1006
    '        Dim index As Integer
1007

    
1008
    '        For Each index In indexes
1009
    '            'On Error Resume Next
1010
    '            If folders_path.EndsWith("\") = True Then
1011
    '                Me.Status_Main.Items(0).Text = folders_path + (Me.ListView_File.Items(index).Text)
1012
    '                'On Error Resume Next
1013
    '            Else
1014
    '                Me.Status_Main.Items(0).Text = folders_path + "\" + (Me.ListView_File.Items(index).Text)
1015
    '            End If
1016

    
1017
    '            Dim infoReader As System.IO.FileInfo
1018
    '            infoReader = My.Computer.FileSystem.GetFileInfo(Me.Status_Main.Items(0).Text)
1019
    '            Me.Status_Main.Items(1).Text = " Created : " + infoReader.CreationTime.ToString + " " + infoReader.Attributes.ToString
1020
    '        Next
1021
    '    End Sub
1022

    
1023
    '    Private Sub Procees()
1024
    '        Dim indexes As ListView.SelectedIndexCollection =
1025
    '                            Me.ListView_File.SelectedIndices
1026
    '        Dim index As Integer
1027

    
1028
    '        For Each index In indexes
1029
    '            'On Error Resume Next
1030
    '            If folders_path.EndsWith("\") = True Then
1031
    '                On Error GoTo out
1032
    '                Me.Status_Main.Items(0).Text = folders_path + (Me.ListView_File.Items(index).Text)
1033
    '                On Error GoTo out
1034
    '                'On Error Resume Next
1035
    '            Else
1036
    '                Me.Status_Main.Items(0).Text = folders_path + "\" + (Me.ListView_File.Items(index).Text)
1037
    '                On Error GoTo out
1038
    '            End If
1039

    
1040
    '            Dim infoReader As System.IO.FileInfo
1041
    '            infoReader = My.Computer.FileSystem.GetFileInfo(Me.Status_Main.Items(0).Text)
1042
    '            Me.Status_Main.Items(1).Text = " Created : " + infoReader.CreationTime.ToString + " " + infoReader.Attributes.ToString
1043
    '            On Error GoTo out
1044
    '            MsgBox(Me.Status_Main.Items(0).Text + " is processed")
1045
    '            On Error GoTo out
1046
    '        Next
1047
    '        Exit Sub
1048
    'out:
1049
    '        MsgBox(Err.Description)
1050
    'End Sub
1051

    
1052
    Private Function LoadAllDrawing() As DataTable
1053

    
1054

    
1055
        SetListBoxItems(ListBox_Result, "도면정보 로드중....")
1056

    
1057
        Dim oDt As DataTable = Drawing_Dt()
1058
        Dim sHierarchy As String = My.Settings.Plant_Hierarchy
1059

    
1060

    
1061
        Dim files() As String
1062
        files = Directory.GetFiles(sHierarchy, "*.pid", SearchOption.AllDirectories)
1063
        For Each FileName As String In files
1064
            Dim sName As String = FileName
1065
            Dim oAddRow As DataRow = oDt.NewRow()
1066
            oAddRow("Name") = Path.GetFileNameWithoutExtension(sName)
1067
            oAddRow("Path") = FileName
1068
            oDt.Rows.Add(oAddRow)
1069
        Next
1070
        Return oDt
1071
    End Function
1072

    
1073
    Private Function LoadAllDrawing2() As DataTable
1074
        Dim datasource As LMADataSource
1075
        Dim objPIDAutoApp As Object
1076
        Dim objPIDADrawing As Object
1077
        Dim objDrawing As Object 'Drawing
1078
        'Dim objDrawing As LMDrawing
1079
        'Dim objDrawings As LMDrawings
1080

    
1081
        datasource = New LMADataSource
1082

    
1083
        '    objDrawings = New LMDrawings
1084
        'objDrawings.Collect(datasource)
1085
        objPIDAutoApp = CreateObject("PIDAutomation.Application")
1086

    
1087
        For Each objDrawing In objPIDAutoApp.Drawings
1088
            objDrawing.CloseDrawing(True)
1089
        Next
1090
        Try
1091
            objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("UY1-K-2000_P1_300dpi_0321_TEST_1")
1092
        Catch ex As Exception
1093
            Process.Start("\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\Plant_Hierarchy\8121\8121-1\UY1-K-2000_P1_300dpi_0321_TEST_1.pid")
1094
        End Try
1095

    
1096

    
1097

    
1098
        Dim sType As Type = objPIDAutoApp.GetType()
1099
        Dim iCount As Integer = 0
1100
        ' Dim sPath As String = "‪\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\Plant_Hierarchy\8121\8121-1\188943-8121-PR-DW-011001.pid"
1101

    
1102
        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("1")
1103

    
1104
        For Each objDrawing In objPIDAutoApp.Drawings
1105
            If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
1106
                Try
1107

    
1108
                    Dim sName As String = objDrawing.Attributes("Name").Value
1109

    
1110
                    iCount = iCount + 1
1111
                    If sName = "UY1-K-2000_P1_300dpi_0321_TEST_1" Then
1112
                        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(objDrawing.Attributes("Name"))
1113
                        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("\8121\8121-1\UY1-K-2000_P1_300dpi_0321_TEST_1.pid")
1114
                        If Not objPIDADrawing Is Nothing Then
1115
                            objPIDADrawing.CloseDrawing()
1116
                        End If
1117
                    End If
1118

    
1119

    
1120
                Catch ex As Exception
1121

    
1122
                End Try
1123

    
1124
            End If
1125
        Next
1126
        objPIDAutoApp.Quit
1127
        objPIDAutoApp = Nothing
1128
        objPIDADrawing = Nothing
1129
        objDrawing = Nothing
1130
        '   objDrawings = Nothing
1131
    End Function
1132

    
1133
    Dim _XMLList As ListView = New ListView()
1134

    
1135

    
1136

    
1137

    
1138

    
1139

    
1140
    Private Function CheckOpenDrawing() As Boolean
1141
        Try
1142

    
1143
            Dim lobjDatasource As Object
1144
            _Placement = CreateObject("Plaice.Placement", "")
1145
            lobjDatasource = _Placement.PIDDataSource
1146
            Return True
1147
        Catch ex As Exception
1148
            Return False
1149
        End Try
1150

    
1151
    End Function
1152

    
1153

    
1154
    Private Sub Btn_Convert_Click(sender As Object, e As EventArgs) Handles Btn_Convert.Click
1155

    
1156
        Main_Tab.SelectedIndex = 1
1157
        ListBox_Result.Items.Clear()
1158
        ' DataGrid_Result.DataSource = New DataTable()
1159
        Me.ProgressBar_Status.Visible = True
1160
        ProgressBar_Status.Maximum = 100
1161
        ProgressBar_Status.Value = 0
1162
        ' _selectFolderPath = Tree_XMLFiles.SelectedNode.FullPath.Replace("\\", "\")
1163
        _Main_trd = New Thread(AddressOf ThreadConvert)
1164
        _Main_trd.IsBackground = True
1165
        _Main_trd.Start()
1166
        FineOPCForm()
1167
    End Sub
1168

    
1169
    Private Sub FineOPCForm()
1170
        _Opc_trd = New Thread(AddressOf ThreadOPCRemove)
1171
        _Opc_trd.IsBackground = True
1172
        _Opc_trd.Start()
1173
    End Sub
1174

    
1175
    'Private Sub ThreadTask()
1176

    
1177

    
1178
    '    If _XMLList.Items.Count > 0 Then
1179

    
1180
    '        Dim oDwg_Dt As DataTable = LoadAllDrawing()
1181
    '        Dim iDwgCnt As Integer = 0
1182
    '        Dim objPIDAutoApp As Object
1183
    '        objPIDAutoApp = CreateObject("PIDAutomation.Application")
1184

    
1185

    
1186
    '        Dim myList = DirectCast(Invoke(New GetListViewDelegate(AddressOf GetListViewItems), _XMLList), List(Of String))
1187
    '        For i = 0 To myList.Count - 1
1188

    
1189
    '            Dim sDwgName As String = Path.GetFileNameWithoutExtension(myList(i))
1190
    '            Txt_Status.Text = sDwgName & "..(" & i + 1 & "/" & myList.Count & ")"
1191
    '            SetListBoxItems(ListBox_Result, Txt_Status.Text & " 처리중....")
1192
    '            Dim sDwgNo As String = myList(i)
1193
    '            Dim oDwgPath As String = ""
1194
    '            oDwgPath = _selectFolderPath + "\" + sDwgNo
1195

    
1196
    '            Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
1197
    '            If sPath <> "" Then
1198

    
1199
    '                Process.Start(sPath)
1200

    
1201
    '                Dim bCheckOpenDrawing As Boolean = False
1202
    '                While (True)
1203
    '                    bCheckOpenDrawing = CheckOpenDrawing()
1204
    '                    If bCheckOpenDrawing = True Then
1205
    '                        Exit While
1206
    '                    Else
1207
    '                        Thread.Sleep(2000)
1208
    '                    End If
1209
    '                End While
1210

    
1211
    '                If bCheckOpenDrawing Then
1212
    '                    SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
1213
    '                    Dim oPipe_Dt As DataTable = New DataTable() 'LoadPipeInXml(oDwgPath)
1214

    
1215
    '                    Dim oSymbol_Dt As DataTable = LoadSymbolInXml(oDwgPath)
1216
    '                    Dim oTreeNode As New TreeNode  'SetTreeViewItems(Tree_Result, Tree_Result.Nodes, sDwgName, sDwgName)
1217
    '                    'oTreeNode = Tree_Result.Nodes.Find(sDwgName, True)(0)
1218
    '                    Dim action As Action = Sub()
1219
    '                                               oTreeNode = Tree_Result.Nodes.Add(sDwgName, sDwgName)
1220
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Instruments", "Instuments")
1221
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Pipes", "Pipes")
1222
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Valves", "Valves")
1223
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Fittings", "Fittings")
1224
    '                                               oTreeNode.ExpandAll()
1225
    '                                           End Sub
1226
    '                    Tree_Result.Invoke(action)
1227

    
1228

    
1229
    '                    '    oTreeNode.Expand()
1230
    '                    SetListBoxItems(ListBox_Result, sDwgName & " Auto converting 대기....")
1231
    '                    AutoConverting(oPipe_Dt, oSymbol_Dt, oTreeNode)
1232

    
1233
    '                End If
1234

    
1235
    '            End If
1236
    '            ''도면 생성
1237
    '            'If CreateDwg(sDwgName) Then
1238
    '            '    'AutoConverting
1239

    
1240
    '            'End If
1241

    
1242
    '        Next
1243
    '    End If
1244
    'End Sub
1245

    
1246
    Dim _objPIDAutoApp As Object
1247

    
1248
    Private Function OpenSPPID(ByVal oDwg_Dt As DataTable, ByVal sDwgName As String) As Boolean
1249
        Dim bCheckOpen As Boolean = False
1250
        '   Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgPath)
1251
        SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
1252
        _objPIDAutoApp = CreateObject("PIDAutomation.Application")
1253

    
1254
        Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
1255
        If sPath <> "" Then
1256
            Process.Start(sPath)
1257
        Else
1258
            Return bCheckOpen
1259
        End If
1260

    
1261
            Dim bCheckOpenDrawing As Boolean = False
1262
            While (True)
1263
                bCheckOpenDrawing = CheckOpenDrawing()
1264
                If bCheckOpenDrawing = True Then
1265
                    bCheckOpen = True
1266
                    Exit While
1267
                Else
1268
                    Thread.Sleep(2000)
1269
                End If
1270
            End While
1271

    
1272

    
1273
            Return bCheckOpen
1274
    End Function
1275

    
1276
    Private Function GetDrawing(ByVal sDwgName As String) As Drawing
1277
        For Each CDrawing In _DrawingsList
1278
            If CDrawing.DwgName.ToUpper() = sDwgName.ToUpper() Then
1279
                Return CDrawing
1280
            End If
1281
        Next
1282
        Return Nothing
1283
    End Function
1284

    
1285
    Private Function GetLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
1286
        For Each CLineNo In CDrawing.Line_nos
1287
            If CLineNo.Uid = sLineNoUid Then
1288
                Return CLineNo
1289
            End If
1290
        Next
1291
        Return Nothing
1292
    End Function
1293

    
1294
    Private Function GetTrimLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
1295
        For Each CLineNo In CDrawing.TrimLine_nos
1296
            If CLineNo.Uid = sLineNoUid Then
1297
                Return CLineNo
1298
            End If
1299
        Next
1300
        Return Nothing
1301
    End Function
1302

    
1303

    
1304
    Private Function GetOnlyPipeLineNo(ByVal CDrawing As Drawing, ByVal sPipeUid As String) As Line_no
1305
        For Each CLineNo In CDrawing.Line_nos
1306
            Dim odt As DataTable = CLineNo.Dt_Line
1307
            If odt.Rows.Count > 0 Then
1308
                If odt.Rows(0)(_XML_LINE_UID).ToString = sPipeUid Then
1309
                    Return CLineNo
1310
                End If
1311
            End If
1312
        Next
1313
        Return Nothing
1314
    End Function
1315

    
1316

    
1317
    Private Function GetEqpNo(ByVal CDrawing As Drawing, ByVal sEqpUid As String) As Eqp_no
1318
        For Each CEqpNo In CDrawing.Eqp_nos
1319
            If CEqpNo.Uid = sEqpUid Then
1320
                Return CEqpNo
1321
            End If
1322
        Next
1323
        Return Nothing
1324
    End Function
1325
    Private Function ConvertPointBystring(ByVal sPoint As String, ByRef dX As Double, ByRef dY As Double) As Boolean
1326
        Try
1327
            Dim opointstr As String() = Split(sPoint, ",")
1328
            If (opointstr.Length > 1) Then
1329
                If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
1330
                    dX = opointstr(0)
1331
                    dY = opointstr(1)
1332

    
1333
                Else
1334
                    dX = 0
1335
                    dY = 0
1336
                    Return False
1337
                End If
1338
            End If
1339
            Return True
1340
        Catch ex As Exception
1341
            Return False
1342
        End Try
1343
    End Function
1344

    
1345

    
1346
    Dim _DrawLine_Dt As DataTable = DrawLind_Dt()
1347

    
1348
    Private Function DrawLine(ByVal sUid As String, ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
1349
                              ByVal oAttribute_Dt As DataTable, ByRef oPiperun_Dt As DataTable) As LMPipeRun
1350
        Try
1351
            Dim oPipeRun As LMPipeRun = Nothing
1352
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" + sUid + "'")
1353
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
1354

    
1355
            If oPipeRow.Length > 0 Then
1356
                Dim oDatasource As Object = _Placement.PIDDataSource
1357
                Dim objItem As LMAItem
1358
                Dim objConnector As LMConnector
1359
                Dim objInputs As PlaceRunInputs
1360
                objInputs = New PlaceRunInputs
1361
                Dim dOriginalStart_x As Double = 0.0
1362
                Dim dOriginalStart_y As Double = 0.0
1363
                Dim dOriginalEnd_x As Double = 0.0
1364
                Dim dOriginalEnd_y As Double = 0.0
1365
                Dim dStart_x As Double = 0.0
1366
                Dim dStart_y As Double = 0.0
1367
                Dim dEnd_x As Double = 0.0
1368
                Dim dEnd_y As Double = 0.0
1369

    
1370
                Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
1371

    
1372
                Dim sSystempath As String = "\Piping\Routing\Process Lines\Primary Piping.sym" ' oPipeRow(0)(_XML_LINE_SYSTEMPATH).ToString()
1373
                If sType.ToUpper() = "ELECTRIC" Then
1374
                    sSystempath = "\Instrumentation\Signal Line\Electric.sym"
1375
                ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
1376
                    sSystempath = "\Instrumentation\Signal Line\Connect to Process.sym"
1377
                Else
1378
                End If
1379
                Dim sStartpoint As String = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
1380
                Dim sEndpoint As String = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
1381
                Dim sPipeUid As String = oPipeRow(0)(_XML_LINE_UID).ToString()
1382

    
1383
                Dim oAddPiperunRow As DataRow = oPiperun_Dt.NewRow()
1384
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
1385
                dStart_x = dOriginalStart_x
1386
                dStart_y = dOriginalStart_y
1387

    
1388
                If ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y) Then
1389
                    dEnd_x = dOriginalEnd_x
1390
                    dEnd_y = dOriginalEnd_y
1391

    
1392
                    '라인보정(oLine_Dt, sPipeUid, dStart_x, dStart_y, dEnd_x, dEnd_y)
1393
                    '//Overlap 보정
1394
                    'If FindOverlapLine(oLine_Dt, sPipeUid, dStart_x, dStart_y, dEnd_x, dEnd_y) = False Then
1395
                    '    '//떨어진 라인 보정
1396
                    '    Dim dSeperate_start_x As Double = dStart_x
1397
                    '    Dim dSeperate_start_y As Double = dStart_y
1398
                    '    Dim dSeperate_end_x As Double = dEnd_x
1399
                    '    Dim dSeperate_end_y As Double = dEnd_y
1400
                    '    CalcSperateLine(dSeperate_start_x, dSeperate_start_y, dSeperate_end_x, dSeperate_end_y)
1401
                    '    If (FindOverlapLine(oLine_Dt, sPipeUid, dSeperate_start_x, dSeperate_start_y, dSeperate_end_x, dSeperate_end_y)) Then
1402
                    '        dStart_x = dSeperate_start_x
1403
                    '        dStart_y = dSeperate_start_y
1404
                    '        dEnd_x = dSeperate_end_x
1405
                    '        dEnd_y = dSeperate_end_y
1406
                    '    End If
1407
                    'End If
1408

    
1409
                    ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
1410
                    ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
1411
                    If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
1412

    
1413
                        Dim iConnType As Integer = ModelingLine(dStart_x, dStart_y, dEnd_x, dEnd_y, sUid)
1414
                        If iConnType = 1 Then
1415
                            objInputs.AddLocatedTarget(dStart_x, dStart_y)
1416
                            objInputs.AddPoint(dEnd_x, dEnd_y)
1417
                        ElseIf iConnType = 2 Then
1418
                            objInputs.AddLocatedTarget(dEnd_x, dEnd_y)
1419
                            objInputs.AddPoint(dStart_x, dStart_y)
1420
                        ElseIf iConnType = 3 Then
1421
                            objInputs.AddLocatedTarget(dEnd_x, dEnd_y)
1422
                            objInputs.AddPoint(dStart_x, dStart_y)
1423
                        ElseIf iConnType = 4 Then
1424
                            objInputs.AddLocatedTarget(dStart_x, dStart_y)
1425
                            objInputs.AddPoint(dEnd_x, dEnd_y)
1426
                        Else
1427
                            objInputs.AddPoint(dStart_x, dStart_y)
1428
                            objInputs.AddPoint(dEnd_x, dEnd_y)
1429
                        End If
1430
                        objInputs.AddPoint(dStart_x, dStart_y)
1431
                        objInputs.AddPoint(dEnd_x, dEnd_y)
1432
                        AddModelingLine(dStart_x, dStart_y, dEnd_x, dEnd_y, sUid)
1433
                        objItem = _Placement.PIDCreateItem(sSystempath)
1434
                        _iPipecnt = _iPipecnt + 1
1435
                        SetListBoxItems(ListBox_Result, "Place PipeLine..(" & dOriginalStart_x & "," & dOriginalStart_y & ") - (" & dOriginalEnd_x & "," & dOriginalEnd_y & ").." & _iPipecnt & " count ")
1436
                        objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
1437
                        oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
1438
                        oPipeRun.Attributes("FlowDirection").Value = "End 1 is upstream (Inlet)"
1439
                        If oAttributeRow.Length > 0 Then
1440
                            For Each oAttribute In oAttributeRow
1441
                                Try
1442
                                    Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1443
                                    Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1444
                                    If sPIDValue.Contains("'") Then
1445
                                        sPIDValue = sPIDValue.Replace("'", """")
1446
                                    End If
1447

    
1448
                                    Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1449
                                    oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
1450
                                Catch ex As Exception
1451

    
1452
                                End Try
1453

    
1454

    
1455
                            Next
1456
                            oPipeRun.Commit()
1457
                        End If
1458
                        'Flow Direction 
1459
                        'Dim sFlowDirectionPath As String = "\Piping\Labels - Piping Segments\Flow Direction.sym" 'GetDataFromMappingDB(_XML_CATEGORY_FLOWDIRECITON, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
1460
                        'Dim dFlowDirectionAngle As Double = 0.0
1461
                        'If dStart_y <> dEnd_y Then
1462
                        '    If dStart_y > dEnd_y Then
1463
                        '        dFlowDirectionAngle = -1.57
1464
                        '    Else
1465
                        '        dFlowDirectionAngle = 1.57
1466
                        '    End If
1467
                        'End If
1468
                        'If dStart_x <> dEnd_x Then
1469
                        '    If dStart_x > dEnd_x Then
1470
                        '        dFlowDirectionAngle = 3.14
1471
                        '    Else
1472
                        '        dFlowDirectionAngle = 0
1473
                        '    End If
1474
                        'End If
1475

    
1476
                        '_Placement.PIDPlaceSymbol(sFlowDirectionPath, dEnd_x, dEnd_y, , dFlowDirectionAngle)
1477
                    End If
1478
                End If
1479
                _Itemcnt = _Itemcnt + 1
1480
                Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1481
                SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1482
                Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1483

    
1484
                oAddPiperunRow("Piperun") = oPipeRun
1485
                oAddPiperunRow("startx") = dOriginalStart_x
1486
                oAddPiperunRow("starty") = dOriginalStart_y
1487
                oAddPiperunRow("endx") = dOriginalEnd_x
1488
                oAddPiperunRow("endy") = dOriginalEnd_y
1489
                oPiperun_Dt.Rows.Add(oAddPiperunRow)
1490

    
1491
            End If
1492
            Return oPipeRun
1493
        Catch ex As Exception
1494
            Return Nothing
1495
        End Try
1496
    End Function
1497

    
1498
    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)
1499
        Dim oAddRow = _DrawLine_Dt.NewRow()
1500
        oAddRow(_XML_LINE_UID) = sUid
1501
        oAddRow(_XML_LINE_STARTPOINT_X) = dStart_x
1502
        oAddRow(_XML_LINE_STARTPOINT_Y) = dStart_y
1503
        oAddRow(_XML_LINE_ENDPOINT_X) = dEnd_x
1504
        oAddRow(_XML_LINE_ENDPOINT_Y) = dEnd_y
1505
        _DrawLine_Dt.Rows.Add(oAddRow)
1506
    End Sub
1507

    
1508

    
1509
    Private Function ModelingLine(ByVal dStart_x As Double, ByVal dStart_y As Double, ByVal dEnd_x As Double, ByVal dEnd_y As Double, ByVal sUid As String) As Integer
1510
        'Dim oFindRows_1 As DataRow() = _DrawLine_Dt.Select("start_x = '" & dStart_x & "' and start_y = '" & dStart_y & "' and uid <> '" & sUid & "'")
1511

    
1512
        'Dim oFindRows_2 As DataRow() = _DrawLine_Dt.Select("end_x = '" & dEnd_x & "' and end_y = '" & dEnd_y & "' and uid <> '" & sUid & "'")
1513

    
1514
        'Dim oFindRows_3 As DataRow() = _DrawLine_Dt.Select("start_x = '" & dEnd_x & "' and start_y = '" & dEnd_y & "' and uid <> '" & sUid & "'")
1515

    
1516
        'Dim oFindRows_4 As DataRow() = _DrawLine_Dt.Select("end_x = '" & dStart_x & "' and end_y = '" & dStart_y & "' and uid <> '" & sUid & "'")
1517

    
1518
        'If oFindRows_1.Length > 0 Then
1519
        '    Return 1
1520
        'ElseIf oFindRows_2.Length > 0 Then
1521
        '    Return 2
1522
        'ElseIf oFindRows_3.Length > 0 Then
1523
        '    Return 3
1524
        'ElseIf oFindRows_4.Length > 0 Then
1525
        '    Return 4
1526
        'Else
1527
        '    Return 0
1528
        'End If
1529
        Return 0
1530
    End Function
1531

    
1532
    Private Function FindConnectionPoint(ByVal dX As Double, ByVal dY As Double)
1533

    
1534

    
1535
    End Function
1536

    
1537
    Private Sub PlaceEquipment(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable)
1538
        Try
1539
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1540
            Dim oAttributeRow() As DataRow
1541
            If oAttribute_Dt.Rows.Count > 0 Then
1542
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1543
            End If
1544
            If oSymbolRow.Length > 0 Then
1545
                Dim oDatasource As Object = _Placement.PIDDataSource
1546
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1547
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1548
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1549
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1550
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1551
                Dim dAngle As Double = 0.0
1552
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1553
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1554
                End If
1555
                Dim dLocationX As Double = 0.0
1556
                Dim dLocationY As Double = 0.0
1557
                Dim dX As Double = 0.0
1558
                Dim dY As Double = 0.0
1559

    
1560
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1561
                    dX = dLocationX
1562
                    dY = dLocationY
1563
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1564
                    _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1565
                    SetListBoxItems(ListBox_Result, "Place Equipment..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1566
                End If
1567
            End If
1568
        Catch ex As Exception
1569

    
1570
        End Try
1571

    
1572

    
1573
    End Sub
1574

    
1575
    Private Sub PlacePipingOPC(ByVal sUid As String, ByVal sLineUid As String, ByVal oOPCRow As DataRow, ByVal oAttribute_Dt As DataTable)
1576
        Try
1577
            Dim oAttributeRow() As DataRow
1578
            If oAttribute_Dt.Rows.Count > 0 Then
1579
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1580
            End If
1581
            Dim oDatasource As Object = _Placement.PIDDataSource
1582
            Dim sSymbolCompType As String = oOPCRow(_XML_SYMBOL_TYPE).ToString()
1583
            Dim sSystemPath As String = oOPCRow(_XML_SYMBOL_SYSTEMPATH).ToString()
1584
            Dim sClass As String = oOPCRow(_XML_SYMBOL_CLASS).ToString()
1585
            Dim sLocation As String = oOPCRow(_XML_SYMBOL_LOCATION).ToString()
1586
            Dim sOriginalPoint As String = oOPCRow(_XML_SYMBOL_ORIGINALPOINT).ToString()
1587
            Dim dAngle As Double = 0.0
1588
            If IsNumeric(oOPCRow(_XML_SYMBOL_ANGLE).ToString()) Then
1589
                dAngle = Double.Parse(oOPCRow(_XML_SYMBOL_ANGLE).ToString())
1590
            End If
1591

    
1592
            Dim dLocationX As Double = 0.0
1593
            Dim dLocationY As Double = 0.0
1594
            Dim dX As Double = 0.0
1595
            Dim dY As Double = 0.0
1596

    
1597
            If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1598
                dX = dLocationX
1599
                dY = dLocationY
1600
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1601
                _iPipintOpccnt = _iPipintOpccnt + 1
1602
                Dim oLMSymbol As LMSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1603
                '모델링된 형상은 Drawing True 로 처리
1604
                oOPCRow(_XML_SYMBOL_DRAWING_TF) = "True"
1605
                SetListBoxItems(ListBox_Result, "Place Piping OPC..(" & dLocationX & "," & dLocationY & ")..." & _iPipintOpccnt & " count ")
1606

    
1607
                Dim dConn_X1 As Double, dConn_Y1 As Double, dConn_X2 As Double, dConn_Y2 As Double
1608
                _Placement.PIDConnectPointLocation(oLMSymbol, 1, dConn_X1, dConn_Y1)
1609
                _Placement.PIDConnectPointLocation(oLMSymbol, 2, dConn_X2, dConn_Y2)
1610

    
1611
                Dim oAddrow As DataRow = _ResultModeling_DT.NewRow()
1612
                oAddrow(_Modeling_Uid) = sUid
1613
                oAddrow(_Modeling_Location_X) = dLocationX
1614
                oAddrow(_Modeling_Location_Y) = dLocationY
1615
                oAddrow(_Modeling_LineNoUid) = sLineUid
1616
                oAddrow(_Modeling_Type) = sSymbolCompType
1617
                oAddrow(_Modeling_Connection1_X) = dConn_X1
1618
                oAddrow(_Modeling_Connection1_Y) = dConn_Y1
1619
                oAddrow(_Modeling_Connection2_X) = dConn_X2
1620
                oAddrow(_Modeling_Connection2_X) = dConn_Y2
1621
                oAddrow(_Modeling_LMSymbol) = oLMSymbol
1622
                _ResultModeling_DT.Rows.Add(oAddrow)
1623
            End If
1624
            _Itemcnt = _Itemcnt + 1
1625
            Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1626
            SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1627
            Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1628

    
1629
        Catch ex As Exception
1630

    
1631
        End Try
1632

    
1633

    
1634
    End Sub
1635

    
1636

    
1637
    Private Function DrawSymbol(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal oLine_Dt As DataTable) As Boolean
1638
        Try
1639

    
1640
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1641
            Dim oAttributeRow() As DataRow
1642
            If oAttribute_Dt.Rows.Count > 0 Then
1643
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1644
            End If
1645

    
1646
            If oSymbolRow.Length > 0 Then
1647
                Dim oDatasource As Object = _Placement.PIDDataSource
1648
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1649
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1650
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1651
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1652
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1653
                Dim dAngle As Double = 0.0
1654
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1655
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1656
                End If
1657

    
1658
                Dim objSymbol As LMSymbol
1659
                Dim dLocationX As Double = 0.0
1660
                Dim dLocationY As Double = 0.0
1661
                Dim dX As Double = 0.0
1662
                Dim dY As Double = 0.0
1663

    
1664
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1665
                    dX = dLocationX
1666
                    dY = dLocationY
1667
                    If sSymbolCompType = "" Or sSymbolCompType = "Piping OPC's" Then
1668
                        FindConnectionLine(oLine_Dt, dX, dY)
1669
                    End If
1670

    
1671
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1672
                    Dim oInstrument As LMInstrument
1673
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
1674
                        _iInstrumentcnt = _iInstrumentcnt + 1
1675
                        objSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1676
                        SetListBoxItems(ListBox_Result, "Place Instrument..(" & dLocationX & "," & dLocationY & ")..." & _iInstrumentcnt & " count ")
1677
                        oInstrument = oDatasource.GetInstrument(objSymbol.ModelItemID)
1678
                        Try
1679
                            If oAttributeRow.Length > 0 Then
1680
                                For Each oAttribute In oAttributeRow
1681
                                    Try
1682
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1683
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1684
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1685
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
1686
                                    Catch ex As Exception
1687

    
1688
                                    End Try
1689

    
1690
                                Next
1691
                                oInstrument.Commit()
1692
                            End If
1693
                        Catch ex As Exception
1694
                        End Try
1695
                    ElseIf sSymbolCompType.ToUpper() = _DB_FITTINGS.ToUpper() Then
1696
                        _iValvecnt = _iValvecnt + 1
1697
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1698
                        SetListBoxItems(ListBox_Result, "Place Valve..(" & dLocationX & "," & dLocationY & ")..." & _iValvecnt & " count ")
1699

    
1700
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_FITTINGS.ToUpper() Then
1701
                        _iFittingcnt = _iFittingcnt + 1
1702
                        If sSystemPath.Contains(",") Then
1703

    
1704
                            Dim sDuplicatePath As String() = sSystemPath.Split(",")
1705
                            Dim sMainSymbol As String = ""
1706
                            Dim sSubSymbol As String = ""
1707
                            For Each sPath In sDuplicatePath
1708
                                If sMainSymbol = "" Then
1709
                                    sMainSymbol = sPath.Replace(vbLf, "")
1710
                                Else
1711
                                    sSubSymbol = sPath.Replace(vbLf, "")
1712
                                End If
1713
                            Next
1714
                            Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1715
                            Dim dConnpos_x As Double = 0.0
1716
                            Dim dConnpos_y As Double = 0.0
1717
                            _Placement.PIDConnectPointLocation(oSymbolObj, 2, dConnpos_x, dConnpos_y)
1718
                            '   _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y, dAngle, TargetItem:=oSymbolObj.AsLMRepresentation)
1719
                            _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y,, dAngle)
1720

    
1721
                        Else
1722
                            _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1723
                        End If
1724

    
1725

    
1726
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1727
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() And sClass.ToUpper() = _SYMBOL_ACTUATORS.ToUpper() Then
1728
                        _iFittingcnt = _iFittingcnt + 1
1729
                        Dim sDuplicatePath As String() = sSystemPath.Split(",")
1730
                        Dim sMainSymbol As String = ""
1731
                        Dim sSubSymbol As String = ""
1732
                        For Each sPath In sDuplicatePath
1733
                            If sMainSymbol = "" Then
1734
                                sMainSymbol = sPath.Replace(vbLf, "")
1735
                            Else
1736
                                sSubSymbol = sPath.Replace(vbLf, "")
1737
                            End If
1738
                        Next
1739
                        Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1740
                        Dim dSymbolpos_x As Double = oSymbolObj.XCoordinate
1741
                        Dim dSymbolpos_y As Double = oSymbolObj.YCoordinate
1742
                        _Placement.PIDPlaceSymbol(sSubSymbol, dSymbolpos_x, dSymbolpos_y, , dAngle, TargetItem:=oSymbolObj.AsLMAItem)
1743

    
1744
                    Else
1745
                        _iFittingcnt = _iFittingcnt + 1
1746
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1747
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1748
                    End If
1749

    
1750
                End If
1751
                _Itemcnt = _Itemcnt + 1
1752
                Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1753
                SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1754
                Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1755
            End If
1756

    
1757
        Catch ex As Exception
1758
            Return False
1759
        End Try
1760
    End Function
1761

    
1762

    
1763
    Private Sub FindConnectionLine(ByVal oLine_Dt As DataTable, ByRef dx As Double, ByRef dy As Double)
1764

    
1765
        Try
1766
            For Each oRow In oLine_Dt.Rows
1767
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1768
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1769
                Dim d기준s_x As Double = 0
1770
                Dim d기준s_y As Double = 0
1771
                Dim d기준e_x As Double = 0
1772
                Dim d기준e_y As Double = 0
1773
                ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1774
                ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1775
                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
1776
                    dx = d기준s_x
1777
                    dy = d기준s_y
1778
                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
1779
                    dx = d기준e_x
1780
                    dy = d기준e_y
1781
                End If
1782
            Next
1783
        Catch ex As Exception
1784
        End Try
1785
    End Sub
1786

    
1787

    
1788
    Dim _라인보정기준값 As Integer = 10
1789

    
1790
    Private Function 라인보정(ByRef oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1791
                                      ByRef dex As Double, ByRef dey As Double)
1792
        Try
1793
            Dim bCheck라인 As Boolean = False
1794
            '일치하는 Line 찾기
1795
            For Each oRow In oLine_Dt.Rows
1796
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1797
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1798
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1799
                If sBUid <> sUid Then
1800
                    Dim d기준s_x As Double = 0
1801
                    Dim d기준s_y As Double = 0
1802
                    Dim d기준e_x As Double = 0
1803
                    Dim d기준e_y As Double = 0
1804
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1805
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1806

    
1807
                    If (dsx = d기준s_x And dsy = d기준s_y) Or (dsx = d기준e_x And dsy = d기준e_y) Or
1808
                       (dex = d기준s_x And dey = d기준s_y) Or (dex = d기준e_x And dey = d기준e_y) Then
1809
                        bCheck라인 = True
1810
                    End If
1811
                End If
1812
            Next
1813

    
1814
            If bCheck라인 = False Then
1815
                For Each oRow In oLine_Dt.Rows
1816
                    Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1817
                    Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1818
                    Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1819
                    If sBUid <> sUid Then
1820
                        Dim d기준s_x As Double = 0
1821
                        Dim d기준s_y As Double = 0
1822
                        Dim d기준e_x As Double = 0
1823
                        Dim d기준e_y As Double = 0
1824
                        ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1825
                        ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1826
                        If ((dsx - _라인보정기준값 <= d기준s_x And dsx + _라인보정기준값 >= d기준s_x) And (dsy - _라인보정기준값 <= d기준s_y And dsy + _라인보정기준값 >= d기준s_y)) Then
1827
                            oRow(_XML_LINE_STARTPOINT) = dsx & "," & dsy
1828
                            bCheck라인 = True
1829
                            Exit For
1830
                        ElseIf ((dsx - _라인보정기준값 <= d기준e_x And dsx + _라인보정기준값 >= d기준e_x) And (dsy - _라인보정기준값 <= d기준e_y And dsy + _라인보정기준값 >= d기준e_y)) Then
1831
                            oRow(_XML_LINE_ENDPOINT) = dsx & "," & dsy
1832
                            bCheck라인 = True
1833
                            Exit For
1834
                        ElseIf ((dex - _라인보정기준값 <= d기준s_x And dex + _라인보정기준값 >= d기준s_x) And (dey - _라인보정기준값 <= d기준s_y And dey + _라인보정기준값 >= d기준s_y)) Then
1835
                            oRow(_XML_LINE_STARTPOINT) = dex & "," & dey
1836
                            bCheck라인 = True
1837
                            Exit For
1838
                        ElseIf ((dex - _라인보정기준값 <= d기준e_x And dex + _라인보정기준값 >= d기준e_x) And (dey - _라인보정기준값 <= d기준e_y And dey + _라인보정기준값 >= d기준e_y)) Then
1839
                            oRow(_XML_LINE_ENDPOINT) = dex & "," & dey
1840
                            bCheck라인 = True
1841
                            Exit For
1842
                        End If
1843

    
1844
                    End If
1845
                Next
1846
            End If
1847

    
1848
            Return bCheck라인
1849
        Catch ex As Exception
1850
            Return False
1851
        End Try
1852

    
1853

    
1854
    End Function
1855

    
1856
    Private Function FindOverlapLine(ByVal oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1857
                                      ByRef dex As Double, ByRef dey As Double)
1858
        Try
1859
            Dim bCheckOverlap As Boolean = False
1860
            For Each oRow In oLine_Dt.Rows
1861
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1862
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1863
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1864
                If sBUid <> sUid Then
1865
                    Dim d기준s_x As Double = 0
1866
                    Dim d기준s_y As Double = 0
1867
                    Dim d기준e_x As Double = 0
1868
                    Dim d기준e_y As Double = 0
1869
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1870
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1871
                    If (d기준s_x <= dsx And d기준e_x >= dex And
1872
                        d기준s_y <= dsy And d기준e_y >= dey) Then
1873
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1874
                        If dsy - d기준s_y > d기준e_y - dey Then
1875
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1876
                            If dResultCalc < 10 Then
1877
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1878
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1879
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1880
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1881
                                If dCalcStartY = 0 Then
1882
                                    dey = d기준e_y
1883
                                Else
1884
                                    dey = dCalcStartY
1885
                                End If
1886
                            End If
1887
                        Else
1888
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1889
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1890
                            If dResultCalc < 10 Then
1891
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1892
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1893
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1894
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1895
                                If dCalcStartY = 0 Then
1896
                                    dsy = d기준s_y
1897
                                Else
1898
                                    dsy = dCalcStartY
1899
                                End If
1900
                            End If
1901
                        End If
1902
                        bCheckOverlap = True
1903
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1904
                            d기준s_y <= dey And d기준e_y >= dsy Then
1905
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1906
                        If dey - d기준s_y > d기준e_y - dsy Then
1907
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1908
                            If dResultCalc < 10 Then
1909
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1910
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1911
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1912
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1913
                                If dCalcStartY = 0 Then
1914
                                    dsy = d기준e_y
1915
                                Else
1916
                                    dsy = dCalcStartY
1917
                                End If
1918

    
1919
                            End If
1920
                            '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1921
                        Else
1922
                            '  Dim dResultCalc As Double = (Math.Abs((dsy - d기준s_y)) / Math.Abs((d기준e_y - dey))) * 100
1923
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1924
                            If dResultCalc < 10 Then
1925
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1926
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1927
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1928
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1929
                                If dCalcStartY = 0 Then
1930
                                    dey = d기준e_y
1931
                                Else
1932
                                    dey = dCalcStartY
1933
                                End If
1934
                            End If
1935
                        End If
1936
                        bCheckOverlap = True
1937
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1938
                            d기준s_y <= dey And d기준e_y >= dsy Then
1939

    
1940
                        If dsx - d기준s_x > d기준e_x - dex Then
1941
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1942
                            If dResultCalc < 10 Then
1943
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1944
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1945
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1946
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1947
                                If dCalcStartX = 0 Then
1948
                                    dex = d기준e_x
1949
                                Else
1950
                                    dex = dCalcStartX
1951
                                End If
1952
                            End If
1953
                        Else
1954
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1955
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1956
                            If dResultCalc < 10 Then
1957
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1958
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1959
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1960
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1961
                                If dCalcStartX = 0 Then
1962
                                    dsx = d기준s_x
1963
                                Else
1964
                                    dsx = dCalcStartX
1965
                                End If
1966
                            End If
1967
                        End If
1968
                        bCheckOverlap = True
1969
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1970
                            d기준s_y <= dey And d기준e_y >= dsy Then
1971

    
1972
                        If dex - d기준s_x > d기준e_x - dsx Then
1973
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1974
                            If dResultCalc < 10 Then
1975
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1976
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1977
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1978
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1979
                                If dCalcStartX = 0 Then
1980
                                    dsx = d기준e_x
1981
                                Else
1982
                                    dsx = dCalcStartX
1983
                                End If
1984
                            End If
1985
                        Else
1986
                            ' Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1987
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1988
                            If dResultCalc < 10 Then
1989
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1990
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1991
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1992
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1993
                                If dCalcStartX = 0 Then
1994
                                    dex = d기준s_x
1995
                                Else
1996
                                    dex = dCalcStartX
1997
                                End If
1998
                            End If
1999

    
2000
                        End If
2001
                        bCheckOverlap = True
2002
                    End If
2003
                End If
2004
            Next
2005

    
2006
            Return bCheckOverlap
2007
        Catch ex As Exception
2008
            Return False
2009
        End Try
2010
    End Function
2011

    
2012
    Private Sub CalcSperateLine(ByRef dStartX As Double, ByRef dStartY As Double,
2013
                                      ByRef dEndX As Double, ByRef dEndY As Double)
2014
        Try
2015
            Dim dRange As Double = 1 'Line 전체 길이의 10%씩 늘이기
2016
            If Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
2017
                Dim dCalc_x As Double = Math.Abs(dStartX - dEndX) * 0.1
2018
                If dStartX > dEndX Then
2019
                    dStartX = dStartX + dCalc_x
2020
                    dEndX = dEndX - dCalc_x
2021
                Else
2022
                    dEndX = dEndX + dCalc_x
2023
                    dStartX = dStartX - dCalc_x
2024
                End If
2025
            Else
2026
                Dim dCalc_y As Double = Math.Abs(dStartY - dEndY) * 0.1
2027
                If dStartY > dEndY Then
2028
                    dStartY = dStartY + dCalc_y
2029
                    dEndY = dEndY - dCalc_y
2030
                Else
2031
                    dEndY = dEndY + dCalc_y
2032
                    dStartY = dStartY - dCalc_y
2033
                End If
2034
            End If
2035

    
2036
        Catch ex As Exception
2037

    
2038
        End Try
2039

    
2040

    
2041
    End Sub
2042

    
2043
    Private Function DrawLineNo(ByVal oPipeRun_Dt As DataTable, ByVal CLine_No As Line_no) As Boolean
2044
        Try
2045
            Dim oDatasource As Object = _Placement.PIDDataSource
2046
            Dim sLocation = CLine_No.Location
2047
            Dim dLocationx As Double = 0.0
2048
            Dim dLocationy As Double = 0.0
2049

    
2050
            Dim dX As Double = 0.0
2051
            Dim dY As Double = 0.0
2052
            If ConvertPointBystring(sLocation, dLocationx, dLocationy) Then
2053
                dX = dLocationx
2054
                dY = dLocationy
2055

    
2056
                For Each oRow In oPipeRun_Dt.Rows
2057
                    Dim dStartx As Double = Double.Parse(oRow("startx").ToString())
2058
                    Dim dStarty As Double = Double.Parse(oRow("starty").ToString())
2059
                    Dim dEndx As Double = Double.Parse(oRow("endx").ToString())
2060
                    Dim dEndy As Double = Double.Parse(oRow("endy").ToString())
2061

    
2062
                    Dim dStartSum As Double = Math.Abs(dStartx - dLocationx) + Math.Abs(dStarty - dLocationy)
2063
                    Dim dEndSum As Double = Math.Abs(dEndx - dLocationx) + Math.Abs(dEndy - dLocationy)
2064
                    If dStartSum > dEndSum Then
2065
                        oRow("value") = dEndSum
2066
                    Else
2067
                        oRow("value") = dStartSum
2068
                    End If
2069

    
2070
                Next
2071
                Dim dataView As New DataView(oPipeRun_Dt)
2072
                dataView.Sort = " value asc"
2073
                Dim oDt As DataTable = dataView.ToTable()
2074
                If oDt.Rows.Count > 0 Then
2075
                    Try
2076
                        Dim oPiperun As LMPipeRun = CType(oDt.Rows(0)("Piperun"), LMPipeRun)
2077
                        ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
2078
                        Dim dLineNoLocation(2) As Double
2079
                        dLineNoLocation(1) = dX
2080
                        dLineNoLocation(2) = dY
2081
                        'Label
2082
                        Dim sSystemPath As String = CLine_No.SystemPath
2083
                        Dim dAngle As Double = CLine_No.Angle
2084
                        Dim labelpersist As LMLabelPersist
2085

    
2086
                        For Each representation In oPiperun.Representations
2087
                            If representation.RepresentationType = "Connector" Then
2088
                                labelpersist = _Placement.PIDPlaceLabel(sSystemPath,
2089
                                dLineNoLocation,, dAngle, LabeledItem:=representation)
2090
                                _iPipeLineNocnt = _iPipeLineNocnt + 1
2091
                                SetListBoxItems(ListBox_Result, "Place PipeLineNo Label..(" & dLocationx & "," & dLocationy & ")..." & _iPipeLineNocnt & " count ")
2092
                            End If
2093
                        Next
2094
                    Catch ex As Exception
2095

    
2096
                    End Try
2097

    
2098

    
2099
                End If
2100

    
2101

    
2102

    
2103
                Return True
2104
            Else
2105
                Return False
2106
            End If
2107

    
2108
        Catch ex As Exception
2109
            Return False
2110
        End Try
2111
    End Function
2112

    
2113

    
2114
    Private Sub InitItemCount()
2115
        _iPipeLineNocnt = 0
2116
        _iPipecnt = 0
2117
        _iFittingcnt = 0
2118
        _iValvecnt = 0
2119
        _iInstrumentcnt = 0
2120
        _iEquipmentcnt = 0
2121
        _iNozzlecnt = 1
2122
        _iPipintOpccnt = 0
2123

    
2124
    End Sub
2125

    
2126
    Private Function GetAllCheckNodeCount() As Integer
2127
        _allItem = 0
2128
        For i = 0 To Tree_Result.Nodes.Count - 1
2129
            For j = 0 To Tree_Result.Nodes(i).Nodes.Count - 1
2130
                For k = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes.Count - 1
2131
                    For l = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes.Count - 1
2132
                        If Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes(l).Checked = True Then
2133
                            _allItem = _allItem + 1
2134
                        End If
2135
                    Next
2136
                Next
2137
            Next
2138
        Next
2139
        Return _allItem
2140
    End Function
2141

    
2142

    
2143
    ''' <summary>
2144
    ''' Equipment 모델링
2145
    ''' </summary>
2146
    Private Sub EquipmentModeling(ByVal oDwg_Dt As DataTable)
2147
        For Each oDrwing As TreeNode In Tree_Result.Nodes
2148
            For Each oDwgNode As TreeNode In oDrwing.Nodes
2149
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
2150
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
2151
                If CDrawing IsNot Nothing Then
2152
                    If OpenSPPID(oDwg_Dt, oDwgNode.Text) Then
2153
                        InitItemCount()
2154
                        SetListBoxItems(ListBox_Result, "Place " & CDrawing.DwgName & "....")
2155
                        For Each oNode As TreeNode In oDwgNode.Nodes
2156
                            Dim iItemcnt As Integer = 0
2157
                            Dim sNodeUid As String = oNode.Name
2158
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2159
                            '1.Equipment
2160
                            '2.Piping OPC
2161
                            '3.OPC 시작되는 Line
2162
                            'Equipment 생성
2163
                            Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
2164
                            If CEqpNo IsNot Nothing Then
2165
                                Dim oSymbol_Dt As DataTable = CEqpNo.Dt_Equipment
2166
                                Dim oAttribute_Dt As DataTable = CEqpNo.Dt_Attribute
2167
                                For Each oSymbolNode As TreeNode In oNode.Nodes
2168
                                    If oSymbolNode.Checked Then
2169
                                        Dim sUid As String = oSymbolNode.Name
2170
                                        PlaceEquipment(sUid, oSymbol_Dt, oAttribute_Dt)
2171
                                    End If
2172
                                Next
2173
                            End If
2174
                        Next
2175
                    End If
2176
                End If
2177
            Next
2178
        Next
2179
    End Sub
2180

    
2181
    Private Sub PipingOPCModeling(ByVal oDwg_Dt As DataTable)
2182

    
2183
        Try
2184
            For Each oDrwing As TreeNode In Tree_Result.Nodes
2185
                For Each oDwgNode As TreeNode In oDrwing.Nodes
2186
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
2187
                    Dim CDrawing As Drawing = GetDrawing(sDwgName)
2188
                    If CDrawing IsNot Nothing Then
2189
                        Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
2190
                        Dim iPipingOPC_count As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
2191
                        SetListBoxItems(ListBox_Result, "Place " & CDrawing.DwgName & "....")
2192
                        For Each oNode As TreeNode In oDwgNode.Nodes
2193
                            Dim iItemcnt As Integer = 0
2194
                            Dim sNodeUid As String = oNode.Name
2195
                            Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2196
                            '1.Equipment
2197
                            '2.Piping OPC
2198
                            '3.OPC 시작되는 Line
2199
                            'Equipment 생성
2200
                            'If sNodeUid <> "PipeLineNo" Then
2201
                            Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2202
                            If CLineNo IsNot Nothing Then
2203
                                Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2204
                                Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2205
                                Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2206
                                Dim oDrawLinenoLabel As Boolean = False
2207

    
2208
                                For Each oSymbolNode As TreeNode In oNode.Nodes
2209
                                    If oSymbolNode.Checked Then
2210
                                        Dim sUid As String = oSymbolNode.Name
2211
                                        Dim oOpc_Rows As DataRow() = oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sUid & "'")
2212
                                        If oOpc_Rows.Length = 1 Then
2213
                                            If oOpc_Rows(0)(_XML_SYMBOL_TYPE) = _XML_PIPINGOPC Then
2214
                                                PlacePipingOPC(sUid, CLineNo.Uid, oOpc_Rows(0), oAttribute_Dt)
2215
                                                iPipingOPC_count = iPipingOPC_count + 1
2216
                                            End If
2217

    
2218
                                        End If
2219
                                    End If
2220
                                Next
2221

    
2222
                            End If
2223
                        Next
2224
                    End If
2225
                Next
2226
            Next
2227
        Catch ex As Exception
2228

    
2229
        End Try
2230
    End Sub
2231

    
2232
    Private Function CheckOPCConnectionLine(ByVal oOpcRow As DataRow, ByVal oLine_Dt As DataTable) As String
2233
        Dim sLineUid As String = ""
2234
        Try
2235

    
2236
            For Each oLinerow In oLine_Dt.Rows
2237

    
2238
                Dim oOpcConn_x1 As Double = oOpcRow(_Modeling_Connection1_X)
2239
                Dim oOpcConn_y1 As Double = oOpcRow(_Modeling_Connection1_Y)
2240
                Dim oOpcConn_x2 As Double = oOpcRow(_Modeling_Connection2_X)
2241
                Dim oOpcConn_y2 As Double = oOpcRow(_Modeling_Connection2_Y)
2242
                Dim oAngle As Double = oOpcRow(_Modeling_Angle)
2243
                Dim dOriginalStart_x As Double = 0.0
2244
                Dim dOriginalStart_y As Double = 0.0
2245
                Dim dOriginalEnd_x As Double = 0.0
2246
                Dim dOriginalEnd_y As Double = 0.0
2247
                Dim dStart_x As Double = 0.0
2248
                Dim dStart_y As Double = 0.0
2249
                Dim dEnd_x As Double = 0.0
2250
                Dim dEnd_y As Double = 0.0
2251
                Dim sStartpoint As String = oLinerow(_XML_LINE_STARTPOINT).ToString()
2252
                Dim sEndpoint As String = oLinerow(_XML_LINE_ENDPOINT).ToString()
2253
                Dim sPipeUid As String = oLinerow(_XML_LINE_UID).ToString()
2254

    
2255
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2256
                dStart_x = dOriginalStart_x
2257
                dStart_y = dOriginalStart_y
2258

    
2259
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2260
                dEnd_x = dOriginalEnd_x
2261
                dEnd_y = dOriginalEnd_y
2262

    
2263

    
2264
                If Math.Abs(oOpcConn_x1 - oOpcConn_x2) > Math.Abs(oOpcConn_y1 - oOpcConn_y2) Then
2265
                    '가로 OPC
2266
                    Dim dCalcY As Double = (oOpcConn_y1 + oOpcConn_y2) / 2
2267
                    If (dStart_x >= oOpcConn_x2 And dStart_x <= oOpcConn_x1 And
2268
                           dStart_y < dCalcY + 100 And dStart_y > dCalcY - 100) Or
2269
                           (dStart_x >= oOpcConn_x1 And dStart_x <= oOpcConn_x2 And
2270
                          dStart_y < dCalcY + 100 And dStart_y > dCalcY - 100) Then
2271
                        'OPC기준 Start점 End 점중 가까운곳을 시작점으로 지정
2272

    
2273
                        If Math.Abs(dStart_x - oOpcConn_x1) > Math.Abs(dStart_x - oOpcConn_x2) Then
2274
                            dStart_x = oOpcConn_x2
2275
                            oOpcRow(_Modeling_ConnType) = "2"
2276
                        Else
2277
                            dStart_x = oOpcConn_x1
2278
                            oOpcRow(_Modeling_ConnType) = "1"
2279
                        End If
2280
                        sLineUid = oLinerow(_XML_LINE_UID).ToString()
2281
                        oLinerow(_XML_LINE_STARTPOINT) = dStart_x & "," & dStart_y
2282

    
2283
                        If dStart_y <> dEnd_y Then
2284
                            dEnd_y = dStart_y
2285
                            oLinerow(_XML_LINE_ENDPOINT) = dEnd_x & "," & dEnd_y
2286
                        End If
2287
                    ElseIf (dEnd_x >= oOpcConn_x2 And dEnd_x <= oOpcConn_x1 And
2288
                           dEnd_y < dCalcY + 100 And dEnd_y > dCalcY - 100) Or
2289
                            (dEnd_x >= oOpcConn_x1 And dEnd_x <= oOpcConn_x2 And
2290
                              dEnd_y < dCalcY + 100 And dEnd_y > dCalcY - 100) Then
2291
                            'OPC기준 Start점 End 점중 가까운곳을 시작점으로 지정
2292
                            sLineUid = oLinerow(_XML_LINE_UID).ToString()
2293
                        If Math.Abs(dEnd_x - oOpcConn_x1) > Math.Abs(dEnd_x - oOpcConn_x2) Then
2294
                            dEnd_x = oOpcConn_x2
2295
                        Else
2296
                            dEnd_x = oOpcConn_x1
2297
                        End If
2298
                        sLineUid = oLinerow(_XML_LINE_UID).ToString()
2299
                        oLinerow(_XML_LINE_ENDPOINT) = dEnd_x & "," & dEnd_y
2300

    
2301
                        If dStart_y <> dEnd_y Then
2302
                            dStart_y = dEnd_y
2303
                            oLinerow(_XML_LINE_STARTPOINT) = dStart_x & "," & dStart_y
2304
                        End If
2305
                    End If
2306
                Else
2307
                    '세로 OPC
2308
                    Dim dCalcX As Double = (oOpcConn_x1 + oOpcConn_x2) / 2
2309
                    If (dStart_y >= oOpcConn_y2 And dStart_y <= oOpcConn_y1 And
2310
                           dStart_x < dCalcX + 100 And dStart_x > dCalcX - 100) Or
2311
                           (dStart_y >= oOpcConn_y1 And dStart_y <= oOpcConn_y2 And
2312
                          dStart_x < dCalcX + 100 And dStart_x > dCalcX - 100) Then
2313
                        'OPC기준 Start점 End 점중 가까운곳을 시작점으로 지정
2314
                        If Math.Abs(dStart_y - oOpcConn_y1) > Math.Abs(dStart_y - oOpcConn_y2) Then
2315
                            dStart_y = oOpcConn_y2
2316
                            oOpcRow(_Modeling_ConnType) = "2"
2317
                        Else
2318
                            dStart_y = oOpcConn_y1
2319
                            oOpcRow(_Modeling_ConnType) = "1"
2320
                        End If
2321
                        sLineUid = oLinerow(_XML_LINE_UID).ToString()
2322
                        oLinerow(_XML_LINE_STARTPOINT) = dStart_x & "," & dStart_y
2323

    
2324
                        If dStart_x <> dEnd_x Then
2325
                            dEnd_x = dStart_x
2326
                            oLinerow(_XML_LINE_ENDPOINT) = dEnd_x & "," & dEnd_y
2327
                        End If
2328
                    ElseIf (dEnd_y >= oOpcConn_y2 And dEnd_y <= oOpcConn_y1 And
2329
                       dEnd_x < dCalcX + 100 And dEnd_x > dCalcX - 100) Or
2330
                        (dEnd_y >= oOpcConn_y1 And dEnd_y <= oOpcConn_y2 And
2331
                          dEnd_x < dCalcX + 100 And dEnd_x > dCalcX - 100) Then
2332
                        'OPC기준 Start점 End 점중 가까운곳을 시작점으로 지정
2333
                        If Math.Abs(dEnd_y - oOpcConn_y1) > Math.Abs(dEnd_y - oOpcConn_y2) Then
2334
                            dEnd_y = oOpcConn_y2
2335
                        Else
2336
                            dEnd_y = oOpcConn_y1
2337
                        End If
2338
                        sLineUid = oLinerow(_XML_LINE_UID).ToString()
2339
                        oLinerow(_XML_LINE_ENDPOINT) = dEnd_x & "," & dEnd_y
2340
                        If dStart_x <> dEnd_x Then
2341
                            dStart_x = dEnd_x
2342
                            oLinerow(_XML_LINE_STARTPOINT) = dStart_x & "," & dStart_y
2343
                        End If
2344
                    End If
2345

    
2346

    
2347

    
2348
                End If
2349

    
2350

    
2351
            Next
2352

    
2353

    
2354
        Catch ex As Exception
2355
            Return sLineUid
2356
        End Try
2357
        Return sLineUid
2358

    
2359
    End Function
2360

    
2361
    Private Sub PlazeConnectionLine(ByVal oLine_Dt As DataTable, ByVal sLineUid As String, ByVal oRow As DataRow)
2362
        Try
2363
            Dim oOPCLineRow As DataRow() = oLine_Dt.Select("[" & _XML_LINE_UID & "] = '" & sLineUid & "'")
2364
            If oOPCLineRow.Length = 1 Then
2365
                Dim dOriginalStart_x As Double = 0.0
2366
                Dim dOriginalStart_y As Double = 0.0
2367
                Dim dOriginalEnd_x As Double = 0.0
2368
                Dim dOriginalEnd_y As Double = 0.0
2369
                Dim oOpcConnType As String = oRow(_Modeling_ConnType)
2370
                Dim dStart_x As Double = 0.0
2371
                Dim dStart_y As Double = 0.0
2372
                Dim dEnd_x As Double = 0.0
2373
                Dim dEnd_y As Double = 0.0
2374
                Dim sStartpoint As String = oOPCLineRow(0)(_XML_LINE_STARTPOINT).ToString()
2375
                Dim sEndpoint As String = oOPCLineRow(0)(_XML_LINE_ENDPOINT).ToString()
2376
                Dim sPipeUid As String = oOPCLineRow(0)(_XML_LINE_UID).ToString()
2377

    
2378
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2379
                dStart_x = dOriginalStart_x
2380
                dStart_y = dOriginalStart_y
2381

    
2382
                ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2383
                dEnd_x = dOriginalEnd_x
2384
                dEnd_y = dOriginalEnd_y
2385

    
2386
                Dim objInputs As PlaceRunInputs
2387
                objInputs = New PlaceRunInputs
2388
                If oOpcConnType = "1" Then
2389

    
2390

    
2391
                ElseIf oOpcConnType = "2" Then
2392

    
2393

    
2394
                End If
2395

    
2396

    
2397

    
2398

    
2399

    
2400
            End If
2401
        Catch ex As Exception
2402

    
2403
        End Try
2404

    
2405
    End Sub
2406
    Private Sub PipeLine_Fitting_Modeling()
2407
        For Each oDrwing As TreeNode In Tree_Result.Nodes
2408
            For Each oDwgNode As TreeNode In oDrwing.Nodes
2409

    
2410
                Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
2411
                Dim CDrawing As Drawing = GetDrawing(sDwgName)
2412
                If CDrawing IsNot Nothing Then
2413
                    Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
2414
                    Dim iLineNoCount As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
2415
                    For Each oNode As TreeNode In oDwgNode.Nodes
2416
                        Dim iItemcnt As Integer = 0
2417
                        Dim sNodeUid As String = oNode.Name
2418
                        Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2419

    
2420
                        Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2421
                        If CLineNo IsNot Nothing Then
2422

    
2423
                            Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2424
                            Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2425
                            Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2426
                            Dim oDrawLinenoLabel As Boolean = False
2427

    
2428
                            Dim oOpcRows() As DataRow = _ResultModeling_DT.Select("[" & _Modeling_LineNoUid & "] = '" & sNodeUid & "' and " &
2429
                                                    "[" & _Modeling_Type & "] = '" & _SYMBOL_OPC & "'")
2430
                            Dim bPlaceOpcLine As Boolean = False
2431
                            'For Each oOpcrow In oOpcRows
2432
                            '    'OPC 와 접하는 Line구하기
2433
                            '    Dim sLineUid As String = CheckOPCConnectionLine(oOpcrow, oLine_Dt)
2434

    
2435

    
2436
                            '    For Each oLinerow In oLine_Dt.Rows
2437
                            '            Dim dOriginalStart_x As Double = 0.0
2438
                            '            Dim dOriginalStart_y As Double = 0.0
2439
                            '            Dim dOriginalEnd_x As Double = 0.0
2440
                            '            Dim dOriginalEnd_y As Double = 0.0
2441
                            '            Dim dStart_x As Double = 0.0
2442
                            '            Dim dStart_y As Double = 0.0
2443
                            '            Dim dEnd_x As Double = 0.0
2444
                            '            Dim dEnd_y As Double = 0.0
2445
                            '            Dim sStartpoint As String = oLinerow(_XML_LINE_STARTPOINT).ToString()
2446
                            '            Dim sEndpoint As String = oLinerow(_XML_LINE_ENDPOINT).ToString()
2447
                            '            Dim sPipeUid As String = oLinerow(_XML_LINE_UID).ToString()
2448

    
2449
                            '            Dim oAddPiperunRow As DataRow = oPipeRun_Dt.NewRow()
2450
                            '            ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
2451
                            '            dStart_x = dOriginalStart_x
2452
                            '            dStart_y = dOriginalStart_y
2453
                            '            ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y)
2454
                            '            dEnd_x = dOriginalEnd_x
2455
                            '        dEnd_y = dOriginalEnd_y
2456
                            '        Dim objItem As LMAItem
2457
                            '        Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
2458
                            '        Dim sSystempath As String = "\Piping\Routing\Process Lines\Primary Piping.sym" ' oPipeRow(0)(_XML_LINE_SYSTEMPATH).ToString()
2459
                            '        If sType.ToUpper() = "ELECTRIC" Then
2460
                            '            sSystempath = "\Instrumentation\Signal Line\Electric.sym"
2461
                            '        ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
2462
                            '            sSystempath = "\Instrumentation\Signal Line\Connect to Process.sym"
2463
                            '        Else
2464
                            '        End If
2465

    
2466
                            '        objItem = _Placement.PIDCreateItem(PipeRunLocation)
2467
                            '        objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
2468

    
2469

    
2470

    
2471
                            '    Next
2472

    
2473
                            'Next
2474

    
2475

    
2476
                            For Each oLineNode As TreeNode In oNode.Nodes
2477
                                iItemcnt = iItemcnt + 1
2478
                                Dim sLineUid As String = oLineNode.Name
2479
                                If oLineNode.Checked Then
2480
                                    Dim sUid As String = oLineNode.Name
2481
                                    If oLine_Dt.Select("[" & _XML_LINE_UID & "]= '" & sUid & "'").Length = 1 Then
2482
                                        DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt, oPipeRun_Dt)
2483
                                    End If
2484
                                    oDrawLinenoLabel = True
2485
                                End If
2486
                                If oNode.Nodes.Count - 1 = iItemcnt And oDrawLinenoLabel Then
2487
                                    Try
2488
                                        DrawLineNo(oPipeRun_Dt, CLineNo)
2489
                                    Catch ex As Exception
2490
                                    End Try
2491
                                End If
2492
                            Next
2493
                            For Each oSymbolNode As TreeNode In oNode.Nodes
2494
                                If oSymbolNode.Checked Then
2495
                                    Dim sUid As String = oSymbolNode.Name
2496
                                    If oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False'").Length = 1 Then
2497
                                        DrawSymbol(sUid, oSymbol_Dt, oAttribute_Dt, CLineNo.Dt_Line)
2498
                                    End If
2499
                                End If
2500
                            Next
2501
                            iLineNoCount = iLineNoCount + 1
2502
                        End If
2503

    
2504

    
2505
                        Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2506
                        If CTrimLineNo IsNot Nothing Then
2507
                            Dim oLine_Dt As DataTable = CTrimLineNo.Dt_Line
2508
                            Dim oSymbol_Dt As DataTable = CTrimLineNo.Dt_Symbol
2509
                            Dim oAttribute_Dt As DataTable = CTrimLineNo.Dt_Attribute
2510
                            Dim oDrawLinenoLabel As Boolean = False
2511

    
2512
                            For Each oLineNode As TreeNode In oNode.Nodes
2513
                                iItemcnt = iItemcnt + 1
2514
                                Dim sLineUid As String = oLineNode.Name
2515
                                If oLineNode.Checked Then
2516
                                    Dim sUid As String = oLineNode.Name
2517
                                    If oLine_Dt.Select("[" & _XML_LINE_UID & "]= '" & sUid & "'").Length = 1 Then
2518
                                        DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt, oPipeRun_Dt)
2519
                                    End If
2520
                                    oDrawLinenoLabel = True
2521
                                End If
2522
                            Next
2523
                            For Each oSymbolNode As TreeNode In oNode.Nodes
2524
                                If oSymbolNode.Checked Then
2525
                                    Dim sUid As String = oSymbolNode.Name
2526
                                    If oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sUid & "' And [" & _XML_SYMBOL_DRAWING_TF & "] = 'False'").Length = 1 Then
2527
                                        DrawSymbol(sUid, oSymbol_Dt, oAttribute_Dt, CTrimLineNo.Dt_Line)
2528
                                    End If
2529
                                End If
2530
                            Next
2531
                            iLineNoCount = iLineNoCount + 1
2532
                        End If
2533

    
2534

    
2535
                        'Else
2536
                        '    Dim oDrawLinenoLabel As Boolean = False
2537
                        '    For Each oLineNode As TreeNode In oNode.Nodes
2538
                        '        Dim CLineNo As Line_no = GetOnlyPipeLineNo(CDrawing, oLineNode.Name)
2539
                        '        Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2540
                        '        Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2541
                        '        Dim sLineUid As String = oLineNode.Name
2542
                        '        If oLineNode.Checked Then
2543
                        '            Dim sUid As String = oLineNode.Name
2544
                        '            DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt, oPipeRun_Dt)
2545
                        '        End If
2546
                        '    Next
2547
                        'End If
2548

    
2549

    
2550

    
2551
                    Next
2552
                End If
2553
            Next
2554
        Next
2555
    End Sub
2556

    
2557
    Private Function AutoModeling() As Boolean
2558
        Try
2559
            _CompleteConvert = False
2560
            Label_Progress.Text = "0%"
2561
            SetListBoxItems(ListBox_Result, " Auto converting 시작....")
2562
            Dim oDwg_Dt As DataTable = LoadAllDrawing()
2563
            _allItem = GetAllCheckNodeCount()
2564
            '1.Equipment
2565
            '2.Piping OPC
2566
            '3.OPC 시작되는 Line
2567
            EquipmentModeling(oDwg_Dt)
2568
            PipingOPCModeling(oDwg_Dt)
2569
            PipeLine_Fitting_Modeling()
2570

    
2571
            SetProgressbar(ProgressBar_Status, 100)
2572
            Label_Progress.Text = "100%"
2573
            SetListBoxItems(ListBox_Result, " Auto converting 완료")
2574
            _CompleteConvert = True
2575
            Return True
2576
        Catch ex As Exception
2577
            Return False
2578
        End Try
2579
    End Function
2580

    
2581

    
2582

    
2583
    Private Sub ThreadConvert()
2584
        If _DrawingsList IsNot Nothing Then
2585
            If _DrawingsList.Count > 0 Then
2586
                AutoModeling()
2587
            End If
2588
        End If
2589
    End Sub
2590

    
2591
    Private Sub ThreadOPCRemove()
2592
        While _CompleteConvert = False
2593
            Dim oFindOPC As New FindOpc
2594
            oFindOPC.RemoveOPCDlg()
2595
        End While
2596

    
2597
    End Sub
2598

    
2599

    
2600
    Private Function OpenDrawing(ByVal oDt As DataTable, ByVal sDwgName As String) As String
2601
        Dim oRows As DataRow() = oDt.Select("[Name] = '" & sDwgName & "'")
2602
        Dim oPath As String = ""
2603
        If oRows.Length > 0 Then
2604
            oPath = oRows(0).Item("Path").ToString()
2605
        End If
2606
        Return oPath
2607
    End Function
2608

    
2609
    Private Sub LoadXmlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LoadXmlToolStripMenuItem.Click
2610
        If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
2611
            LoadDB()
2612
            LoadXmlItem(FolderBrowserDialog1.SelectedPath)
2613
        End If
2614
    End Sub
2615
    Private Sub LoadXmlItem(ByVal sFolderPath As String)
2616
        _DrawingsList = New List(Of Drawing)
2617
        Dim sfileEntries As String() = Directory.GetFiles(sFolderPath)
2618
        If Tree_Result.Nodes.Count > 0 Then
2619
            Tree_Result.Nodes(0).Nodes.Clear()
2620
            For Each sfileName In sfileEntries
2621
                Dim sExtension As String = Path.GetExtension(sfileName)
2622
                If sExtension = ".xml" Then
2623
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(sfileName)
2624
                    Dim sDwgPath As String = sfileName
2625
                    Dim oNode As TreeNode = Tree_Result.Nodes(0).Nodes.Add(sDwgPath, sDwgName, 15)
2626
                    Dim oDwg As Drawing = AddSymbolItem(sDwgPath, oNode)
2627
                    _DrawingsList.Add(oDwg)
2628
                End If
2629
            Next
2630
            Tree_Result.Nodes(0).Expand()
2631
        End If
2632
    End Sub
2633

    
2634

    
2635

    
2636

    
2637

    
2638

    
2639

    
2640

    
2641

    
2642
    Private Sub GenerateRelation(ByRef oDwg_Ds As Drawing)
2643
        Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
2644
        Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
2645
        Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
2646
        Dim oRelation As New GenerateRelation()
2647
        For Each oLinelist In oLineLists
2648

    
2649
            oRelation.CalcLineConnectionItem_Equal(oLinelist.Dt_Line, oLinelist.Dt_Symbol)
2650

    
2651
            'For Each oLineRow In oLinelist.Dt_Line.Rows
2652
            '    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
2653
            '    Dim dLineStart_x As Double = 0.0
2654
            '    Dim dLineStart_y As Double = 0.0
2655
            '    Dim dLineEnd_x As Double = 0.0
2656
            '    Dim dLineEnd_y As Double = 0.0
2657

    
2658
            '    Dim sStartpoint As String = oLineRow(_XML_LINE_STARTPOINT).ToString()
2659
            '    Dim sEndpoint As String = oLineRow(_XML_LINE_ENDPOINT).ToString()
2660

    
2661
            '    ConvertPointBystring(sStartpoint, dLineStart_x, dLineStart_y)
2662
            '    ConvertPointBystring(sEndpoint, dLineEnd_x, dLineEnd_y)
2663

    
2664
            '    Dim sConn1_Uid As String = ""
2665
            '    Dim sConn2_Uid As String = ""
2666
            '    For Each oConnLineRow In oLinelist.Dt_Line.Rows
2667
            '        Dim sConnLineUid As String = oLineRow(_XML_LINE_UID)
2668
            '        If sLineUid <> sConnLineUid Then
2669
            '            If sConn1_Uid <> "" And sConn2_Uid <> "" Then
2670
            '                Exit For
2671
            '            End If
2672
            '            Dim dConnLineStart_x As Double = 0.0
2673
            '            Dim dConnLineStart_y As Double = 0.0
2674
            '            Dim dConnLineEnd_x As Double = 0.0
2675
            '            Dim dConnLineEnd_y As Double = 0.0
2676
            '            Dim sConnStartpoint As String = oConnLineRow(_XML_LINE_STARTPOINT).ToString()
2677
            '            Dim sConnEndpoint As String = oConnLineRow(_XML_LINE_ENDPOINT).ToString()
2678
            '            ConvertPointBystring(sConnStartpoint, dConnLineStart_x, dConnLineStart_y)
2679
            '            ConvertPointBystring(sConnEndpoint, dConnLineEnd_x, dConnLineEnd_y)
2680

    
2681
            '            If CheckDuplicatePoint(dLineStart_x, dLineStart_y, dLineEnd_x, dLineEnd_y,
2682
            '                                   dConnLineStart_x, dConnLineStart_y, dConnLineEnd_x, dConnLineEnd_y) Then
2683
            '                If dLineStart_x = dConnLineStart_x And dLineStart_y = dConnLineStart_y Then
2684
            '                    sConn1_Uid = sConnLineUid
2685
            '                ElseIf dLineStart_x = dConnLineEnd_x And dLineStart_y = dConnLineEnd_y Then
2686
            '                    sConn1_Uid = sConnLineUid
2687
            '                ElseIf dLineEnd_x = dConnLineStart_x And dLineEnd_y = dConnLineStart_y Then
2688
            '                    sConn2_Uid = sConnLineUid
2689
            '                ElseIf dLineEnd_x = dConnLineEnd_x And dLineEnd_y = dConnLineEnd_y Then
2690
            '                    sConn2_Uid = sConnLineUid
2691
            '                End If
2692
            '            End If
2693
            '        End If
2694

    
2695
            '    Next
2696
            '    For Each oConnSymbolRow In oLinelist.Dt_Symbol.Rows
2697
            '        Dim sSymbolUid As String = oConnSymbolRow(_XML_SYMBOL_UID)
2698
            '        Dim sSymbolName As String = oConnSymbolRow(_XML_SYMBOL_NAME)
2699
            '        Dim sSymbolConnPoint As String = oConnSymbolRow(_XML_SYMBOL_CONNECTIONPOINT)
2700
            '        Dim sConnSplit As String() = sSymbolConnPoint.Split("/")
2701
            '        If sSymbolConnPoint <> "" Then
2702
            '            Dim dSymbolConn1_x As Double = 0.0
2703
            '            Dim dSymbolConn1_y As Double = 0.0
2704
            '            Dim dSymbolConn2_x As Double = 0.0
2705
            '            Dim dSymbolConn2_y As Double = 0.0
2706
            '            Dim dSymbolConn3_x As Double = 0.0
2707
            '            Dim dSymbolConn3_y As Double = 0.0
2708
            '            Dim dSymbolConn4_x As Double = 0.0
2709
            '            Dim dSymbolConn4_y As Double = 0.0
2710

    
2711
            '            Dim sConn1Point As String = ""
2712
            '            Dim sConn2Point As String = ""
2713
            '            Dim sConn3Point As String = ""
2714
            '            Dim sConn4Point As String = ""
2715

    
2716
            '            sConn1Point = sConnSplit(0)
2717

    
2718
            '            If sConnSplit.Length > 1 Then
2719
            '                sConn2Point = sConnSplit(1)
2720
            '                If sConnSplit.Length > 2 Then
2721
            '                    sConn3Point = sConnSplit(2)
2722
            '                    If sConnSplit.Length > 3 Then
2723
            '                        sConn4Point = sConnSplit(3)
2724
            '                    End If
2725
            '                End If
2726
            '            End If
2727

    
2728
            '            ConvertPointBystring(sConn1Point, dSymbolConn1_x, dSymbolConn1_y)
2729
            '            If sConn2Point <> "" Then
2730
            '                ConvertPointBystring(sConn2Point, dSymbolConn2_x, dSymbolConn2_y)
2731
            '            End If
2732
            '            If sConn3Point <> "" Then
2733
            '                ConvertPointBystring(sConn3Point, dSymbolConn3_x, dSymbolConn3_y)
2734
            '            End If
2735
            '            If sConn4Point <> "" Then
2736
            '                ConvertPointBystring(sConn4Point, dSymbolConn4_x, dSymbolConn4_y)
2737
            '            End If
2738

    
2739
            '            If dLineStart_x = dSymbolConn1_x And dLineStart_y = dSymbolConn1_y Then
2740
            '                sConn1_Uid = sSymbolUid
2741
            '            ElseIf dLineStart_x = dSymbolConn2_x And dLineStart_y = dSymbolConn2_y Then
2742
            '                sConn1_Uid = sSymbolUid
2743
            '            ElseIf dLineStart_x = dSymbolConn3_x And dLineStart_y = dSymbolConn3_y Then
2744
            '                sConn1_Uid = sSymbolUid
2745
            '            ElseIf dLineStart_x = dSymbolConn4_x And dLineStart_y = dSymbolConn4_y Then
2746
            '                sConn1_Uid = sSymbolUid
2747
            '            End If
2748

    
2749
            '            If dLineEnd_x = dSymbolConn1_x And dLineEnd_y = dSymbolConn1_y Then
2750
            '                sConn2_Uid = sSymbolUid
2751
            '            ElseIf dLineEnd_x = dSymbolConn2_x And dLineEnd_y = dSymbolConn2_y Then
2752
            '                sConn2_Uid = sSymbolUid
2753
            '            ElseIf dLineEnd_x = dSymbolConn3_x And dLineEnd_y = dSymbolConn3_y Then
2754
            '                sConn2_Uid = sSymbolUid
2755
            '            ElseIf dLineEnd_x = dSymbolConn4_x And dLineEnd_y = dSymbolConn4_y Then
2756
            '                sConn2_Uid = sSymbolUid
2757
            '            End If
2758
            '        Else
2759
            '            Dim dConnSymbolStart_x As Double = 0.0
2760
            '            Dim dConnSymbolStart_y As Double = 0.0
2761
            '            Dim sConnStartpoint As String = oConnSymbolRow(_XML_LINE_STARTPOINT).ToString()
2762
            '            ConvertPointBystring(sConnStartpoint, dConnSymbolStart_x, dConnSymbolStart_y)
2763

    
2764

    
2765
            '        End If
2766

    
2767

    
2768

    
2769

    
2770
            '    Next
2771
            '연결된 Connection point 가 없을때
2772
            '1/100만큼  Line Length 길이의 오차범위를 줘서 다시계산
2773

    
2774
            '1/10만큼 Symbol Size 만큼의 오차범위를 줘서 다시계산
2775

    
2776

    
2777

    
2778

    
2779
            'Next
2780

    
2781
        Next
2782

    
2783

    
2784

    
2785
    End Sub
2786

    
2787

    
2788
    ''' <summary>
2789
    '''  XML Tree 구조 생성 
2790
    ''' </summary>
2791
    ''' <param name="sDwgPath"></param>
2792
    Private Function AddSymbolItem(ByVal sDwgPath As String, ByVal oParentNode As TreeNode) As Drawing
2793
        Dim oDwg_Ds As Drawing = LoadSymbolInXml(sDwgPath)
2794

    
2795

    
2796

    
2797

    
2798

    
2799
        If oDwg_Ds IsNot Nothing Then
2800
            Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
2801

    
2802
            Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
2803

    
2804
            Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
2805

    
2806
            Dim oPipe As Boolean = False
2807
            Dim oFitting As Boolean = False
2808
            Dim oOnlyPipesNode As TreeNode
2809
            Dim oOnlyFittingsNode As TreeNode
2810
            'PipeLine 구분
2811

    
2812
            For Each oLinelist In oLineLists
2813
                Dim sLineNoUid As String = oLinelist.Uid
2814
                Dim sLineNo As String = oLinelist.Text
2815
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
2816
                For Each oLineRow In oLinelist.Dt_Line.Rows
2817
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
2818
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
2819
                    oPipeNode.Tag = sLineNoUid
2820
                Next
2821
                For Each oSymbolRow In oLinelist.Dt_Symbol.Rows
2822
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2823
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2824
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
2825
                    oSymbolNode.Tag = sLineNoUid
2826
                Next
2827
            Next
2828

    
2829
            For Each oEqplist In oEqpLists
2830
                Dim sEqpUid As String = oEqplist.Uid
2831
                Dim sEqpNo As String = "EQUIPMENT"
2832
                Dim oEqpNode As TreeNode = oParentNode.Nodes.Add(sEqpUid, sEqpNo)
2833

    
2834

    
2835
                For Each oSymbolRow In oEqplist.Dt_Equipment.Rows
2836
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2837
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2838
                    Dim oSymbolNode As TreeNode = oEqpNode.Nodes.Add(sSymbolUid, sSymbolName)
2839
                    oSymbolNode.Tag = sEqpUid
2840
                Next
2841
            Next
2842
            Dim sTrimLine As String = "TrimLineNos"
2843
            Dim iTrimLinecnt As Integer = 1
2844
            For Each oTrimLinelist In oTrimLineLists
2845
                Dim sLineNoUid As String = oTrimLinelist.Uid
2846
                Dim sLineNo As String = sTrimLine & "_" & iTrimLinecnt
2847
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
2848
                For Each oLineRow In oTrimLinelist.Dt_Line.Rows
2849
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
2850
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
2851
                    oPipeNode.Tag = sLineNoUid
2852
                Next
2853
                For Each oSymbolRow In oTrimLinelist.Dt_Symbol.Rows
2854
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2855
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2856
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
2857
                    oSymbolNode.Tag = sLineNoUid
2858
                Next
2859
                iTrimLinecnt = iTrimLinecnt + 1
2860
            Next
2861

    
2862
        End If
2863

    
2864
        Return oDwg_Ds
2865
    End Function
2866
    Private Sub Tree_Result_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles Tree_Result.AfterCheck
2867
        If e.Node.Checked = True Then
2868
            For Each oNode As TreeNode In e.Node.Nodes
2869
                oNode.Checked = True
2870
            Next
2871
        Else
2872
            For Each oNode As TreeNode In e.Node.Nodes
2873
                oNode.Checked = False
2874
            Next
2875
        End If
2876
    End Sub
2877

    
2878
    Private Sub Btn_Setting_Click(sender As Object, e As EventArgs) Handles Btn_Setting.Click
2879
        Dim oSettings As Settings = New Settings()
2880
        oSettings.ShowDialog()
2881
    End Sub
2882

    
2883
    Private Sub Btn_TestNozzle_Click(sender As Object, e As EventArgs) Handles Btn_TestNozzle.Click
2884

    
2885
        Dim sVessel_ID As String = "841D5E640AE5421B9A017DDC2E87FF11"
2886
        Dim objVessel As LMVessel
2887
        objVessel = _Placement.PIDDataSource.GetVessel(sVessel_ID)
2888
        Dim oVesselLocation As LMLocations = objVessel.Locations
2889
        Dim symVessel As LMSymbol = _Placement.PIDDataSource.GetSymbol(objVessel.Representations.Nth(1).Id)
2890
        Dim XCoordinate As String = symVessel.Attributes("XCoordinate").Value
2891
        Dim YCoordinate As String = symVessel.Attributes("YCoordinate").Value
2892
        symVessel.Attributes("XCoordinate").Value = XCoordinate + 0.01
2893
        symVessel.Attributes("YCoordinate").Value = YCoordinate + 0.01
2894
        symVessel.Commit()
2895
        Dim sValve_ID As String = "DB7B0CA8A2664A6BA7A9615764BA62B0"
2896
        Dim objValve As LMSymbol
2897
        Dim objValves As LMPipingComp = _Placement.PIDDataSource.GetPipingComp(sValve_ID)
2898

    
2899
        objValve = _Placement.PIDDataSource.GetSymbol(objValves.Representations.Nth(1).Id)
2900
        objValve.Commit()
2901
        Dim dVesselX As Double = XCoordinate
2902
        Dim dVesselY As Double = YCoordinate
2903
        Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
2904

    
2905
        _Placement.PIDConnectPointLocation(objValve, 1, X1, Y1)
2906

    
2907
        _Placement.PIDConnectPointLocation(objValve, 2, X2, Y2)
2908

    
2909
        Dim nozzlename As String = "\Equipment Components\Nozzles\Flanged Nozzle.sym"
2910
        Dim dCalc_x As Double = 0
2911
        Dim dCalc_y As Double = 0
2912

    
2913
        If dVesselX - X2 > 0 Then
2914
            dCalc_x = dVesselX - (dVesselX - X2)
2915
        Else
2916
            dCalc_x = dVesselX + (X2 - dVesselX)
2917
        End If
2918
        If dVesselY - Y2 > 0 Then
2919
            dCalc_y = dVesselY - (dVesselY - Y2)
2920
        Else
2921
            dCalc_y = dVesselY + (Y2 - dVesselY)
2922
        End If
2923

    
2924
        Dim objNozzle As LMSymbol = _Placement.PIDPlaceSymbol(nozzlename, dCalc_x, dCalc_y,
2925
            TargetItem:=symVessel.AsLMRepresentation)
2926

    
2927
        Dim blnSuccess As Boolean = _Placement.PIDConnectPointLocation(objNozzle, 1, X1, Y1)
2928
        blnSuccess = _Placement.PIDConnectPointLocation(objNozzle, 2, X1, Y1)
2929

    
2930
        objValve = _Placement.PIDPlaceSymbol(objValve.FileName, X1, Y1, ExistingItem:=objValve.AsLMAItem,
2931
          TargetItem:=objNozzle.AsLMRepresentation)
2932

    
2933

    
2934

    
2935
    End Sub
2936

    
2937
    Private Sub Btn_SymbolLibrary_Click(sender As Object, e As EventArgs) Handles Btn_SymbolLibrary.Click
2938
        Dim oMapping As New Mapping(_PIDSymbol_DB)
2939
        oMapping.Show()
2940
    End Sub
2941

    
2942
    Private Sub Btn_Stop_Click(sender As Object, e As EventArgs) Handles Btn_Stop.Click
2943
        Try
2944
            SetListBoxItems(ListBox_Result, " Auto converting 중지....")
2945
            _Main_trd.Abort()
2946
            _Opc_trd.Abort()
2947
        Catch ex As Exception
2948

    
2949
        End Try
2950
    End Sub
2951
End Class
2952

    
2953

    
2954
Public Class DrawingInfo
2955
    Public mDrawingName As String
2956
    Public mSpID As String
2957
    Public mPath As String
2958
End Class
2959

    
2960

    
2961

    
2962

    
2963

    
클립보드 이미지 추가 (최대 크기: 500 MB)