프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / SPPIDConverter / Main.vb @ e6b6b13d

이력 | 보기 | 이력해설 | 다운로드 (104 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 _Placement As New Placement
18
    Dim _DWG_X = 0.84 '0.695 '1 '
19
    Dim _DWG_Y = 0.594 '0.585 '0.8 '
20

    
21
    Dim _IMG_X = 0
22
    Dim _IMG_Y = 0
23

    
24
    Dim _Unit As String
25

    
26
    'Drawing 전역변수
27
    Dim _objPIDADrawing As Object
28
    '현재선택한 폴더경로
29
    Dim _selectFolderPath As String
30

    
31
    Private _Main_trd As Thread
32
    Private _Opc_trd As Thread
33

    
34
    Private _CompleteConvert As Boolean = False
35

    
36
    Private _DrawingsList As List(Of Drawing)
37

    
38

    
39
    Private _iPipeLineNocnt As Integer
40
    Private _iPipecnt As Integer
41
    Private _iFittingcnt As Integer
42
    Private _iValvecnt As Integer
43
    Private _iInstrumentcnt As Integer
44
    Private _iEquipmentcnt As Integer
45
    Private _iNozzlecnt As Integer
46

    
47
    Dim _Gembox As New CGembox()
48
    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
49
        LoadDB()
50

    
51
    End Sub
52

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

    
57
            _Gembox.isLoadFile(My.Settings.SymbolLibrary)
58
            _Mapping_DB = _Gembox.LoadFileFunc()
59
            '  _Mapping_DB = Load_DB(sDBPath, _DB_TABLE_MAPPING)
60
            _Attribute_DB = Load_DB(sDBPath, _DB_TABLE_ATTRIBUTE)
61
            _PIDSymbol_DB = Load_DB(sDBPath, _DB_TABLE_SYMBOLNAME)
62
            'TestPID()
63
            'OpenDrawing()
64
        Else
65
            MessageBox.Show("설정값을 먼저 확인해주세요")
66
        End If
67
    End Sub
68
    Public Function GetDrawingInfo(ByVal errorList As ArrayList)
69
        Dim ds As Llama.LMADataSource
70
        ds = New Llama.LMADataSource
71
        Dim lmaItem As Llama.LMAItem
72
        For i = 0 To errorList.Count - 1
73
            lmaItem = ds.GetModelItem(errorList.Item(i).m_strSPID()).AsLMAItem
74
            Dim drawingInfo As DrawingInfo
75
            drawingInfo = GetDrawingName(lmaItem.ItemType, lmaItem.Id)
76
            errorList.Item(i).m_LMAItem = lmaItem
77
            errorList.Item(i).m_strDrawingName = drawingInfo.mDrawingName
78
            errorList.Item(i).m_strDrawingPath = drawingInfo.mPath
79
        Next
80
    End Function
81
    Private mDataSource As Object
82

    
83
    'Public Sub New()
84

    
85
    '    '  mDataSource.ProjectNumber = m_Information.InfoSite.SiteName
86
    '    '   mDataSource.SiteNode = m_Information.InfoProject.ProjectINI
87
    '    'm_Information = SPPIDClass.Information.GetInstance()
88

    
89
    '    'If m_Information.InfoProject.ProjectVersion = SPPIDClass.InfoProject.SPPID_43 Then
90
    '    '    'SPPID4.3용
91
    '    '    mDataSource.ProjectNumber = m_Information.InfoSite.SiteName
92
    '    'Else
93
    '    '    'SPPID2007, SPPID2009용
94
    '    '    mDataSource.ProjectNumber = m_Information.InfoSite.SiteName & "!" & m_Information.InfoSite.SiteName
95
    '    'End If
96

    
97
    '    '  mDataSource.SiteNode = m_Information.InfoProject.ProjectINI
98
    '    '  mDataSource.ProjectNumber = m_Information.InfoSite.SiteName & "!" & m_Information.InfoSite.SiteName
99
    '    '#If LATE_BINDING Then
100
    '    '        mInstruments = CreateObject("Llama.LMInstruments", "")
101
    '    '        mPipingComps = CreateObject("Llama.LMPipingComps", "")
102
    '    '        mVessels = CreateObject("Llama.LMVessels", "")
103
    '    '        mDrawings = CreateObject("Llama.LMDrawings", "")
104
    '    '        mEquipments = CreateObject("Llama.LMEquipments", "")
105
    '    '        mExchangers = CreateObject("Llama.LMExchangers", "")
106
    '    '        mMechanicals = CreateObject("Llama.LMMechanicals", "")
107
    '    '        mNozzles = CreateObject("Llama.LMNozzles", "")
108
    '    '        mPipeRuns = CreateObject("Llama.LMPipeRuns", "")
109
    '    '        mEquipmentOthers = CreateObject("Llama.LMEquipmentOthers", "")
110
    '    '#Else
111
    '    '        mInstruments = New Llama.LMInstruments
112
    '    '        mPipingComps = New Llama.LMPipingComps
113
    '    '        mVessels = New Llama.LMVessels
114
    '    '        mDrawings = New Llama.LMDrawings
115
    '    '        mEquipments = New Llama.LMEquipments
116
    '    '        mExchangers = New Llama.LMExchangers
117
    '    '        mMechanicals = New Llama.LMMechanicals
118
    '    '        mNozzles = New Llama.LMNozzles
119
    '    '        mPipeRuns = New Llama.LMPipeRuns
120
    '    '        mEquipmentOthers = New Llama.LMEquipmentOthers
121
    '    '#End If
122
    'End Sub
123

    
124
    Function OpenDrawing()
125
        Dim datasource As LMADataSource
126
        Dim objPIDAutoApp As Object
127
        Dim objPIDADrawing As Object
128
        Dim objDrawing As LMDrawing
129
        Dim objDrawings As LMDrawings
130
        datasource = New Llama.LMADataSource
131
        objPIDAutoApp = CreateObject("PIDAutomation.Application")
132
        objDrawings = New Llama.LMDrawings 'New LMDrawings
133
        datasource.SiteNode = "\\desktop-9vlq0dp\Test03Site\smartplantv4.ini"
134
        datasource.ProjectNumber = "SBR_PBR"
135
        objDrawings.Collect(datasource)
136

    
137
        For Each objDrawing In objDrawings
138
            If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
139
                objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(objDrawing.Attributes("Name"))
140
                If Not objPIDADrawing Is Nothing Then
141
                    'MsgBox "Drawing " & objDrawing.Attributes("Name").Value & " is opened!"
142
                    objPIDADrawing.CloseDrawing
143
                End If
144
            End If
145
        Next
146
        objPIDAutoApp.Quit
147
        objPIDAutoApp = Nothing
148
        objPIDADrawing = Nothing
149
        objDrawing = Nothing
150
        objDrawings = Nothing
151
    End Function
152

    
153

    
154
    Public Function GetDrawingName(ByVal itemType As String, ByVal itemName As String) As DrawingInfo
155

    
156
        Dim objFilter As Object
157
        objFilter = CreateObject("Llama.LMAFilter", "")
158

    
159
        Dim drawingInfo As DrawingInfo
160
        drawingInfo = New DrawingInfo
161

    
162
        objFilter.Criteria.AddNew("FirstOne")
163
        objFilter.Criteria.Item("FirstOne").SourceAttributeName = "SP_ID"
164
        objFilter.Critedkria.Item("FirstOne").ValueAttribute = itemName
165

    
166
        objFilter.Criteria.Item("FirstOne").Operator = "="
167
        objFilter.Criteria.AddNew("SecondOne")
168
        objFilter.Criteria.Item("SecondOne").SourceAttributeName = "ItemStatus"
169
        objFilter.Criteria.Item("SecondOne").ValueAttribute = 1
170
        objFilter.Criteria.Item("SecondOne").Operator = "="
171
        objFilter.Criteria.Item("SecondOne").Conjunctive = -1
172
        objFilter.ItemType = itemType
173

    
174
        Dim PlantItems As Object
175
        PlantItems = CreateObject("Llama.LMPlantItems", "")
176
        PlantItems.Collect(mDataSource, Filter:=objFilter)
177

    
178
        If PlantItems.Count = 0 Then
179
            drawingInfo.mSpID = "PlantStockpile"
180
        End If
181

    
182
        For Each PlantItem In PlantItems
183

    
184
            'If Not PlantItem.Representations.Nth(1).DrawingID.Value.ToString().Equals("0") Then
185
            Try
186
                drawingInfo.mDrawingName = PlantItem.Representations.Nth(1).DrawingObject.Attributes("Name").Value
187
                drawingInfo.mSpID = PlantItem.Representations.Nth(1).DrawingID
188
                drawingInfo.mPath = PlantItem.Representations.Nth(1).DrawingObject.Attributes("Path").Value
189
                Debug.WriteLine("DrawingName : " & drawingInfo.mDrawingName & ", SPID : " & drawingInfo.mSpID & ", Path : " & drawingInfo.mPath)
190
            Catch ex As Exception
191

    
192
            End Try
193

    
194
            'End If
195

    
196
        Next
197

    
198
        Return drawingInfo
199

    
200
    End Function
201

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

    
238
    Public Function SetActiveSiteFromConfigInfo(ByVal strActiveSite As String) As Boolean
239
        On Error GoTo errHandler
240
        Dim objConfigInfo As Object 'interopigrConfigInfo412.igrConfigInfo
241
        objConfigInfo = CreateObject("interopigrConfigInfo412.igrConfigInfo", "")
242
        If Not objConfigInfo Is Nothing Then
243
            objConfigInfo.ApplicationName = "SmartPlantManager"
244
            objConfigInfo.SetConfigString(3, "SmartPlant Manager", "SiteServer", strActiveSite)
245
            SetActiveSiteFromConfigInfo = True
246
        End If
247
        objConfigInfo = Nothing
248
        Exit Function
249
errHandler:
250
        '    LogAndRaiseError ModuleName & "::GetConfigInfo "
251
    End Function
252

    
253
    Private Function CreateDwg(ByVal oDwgName As String) As Boolean
254
        Dim objPIDADrawing As Object = Nothing
255
        Dim objPIDAutoApp As Object = Nothing
256
        Dim datasource As LMADataSource = Nothing
257
        Try
258
            Dim DrawingNumber As String
259
            Dim DrawingName As String
260
            Dim sPlantGroupName As String = "Test"
261
            Dim sTemplateName As String = "\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\P&ID Reference Data\Template Files\Gazprom Project.pid"
262
            Dim objDrawing As LMDrawing
263
            Dim objDrawings As LMDrawings
264
            objDrawings = New LMDrawings
265
            datasource = New LMADataSource
266
            Debug.Print(datasource.ProjectNumber)
267
            Debug.Print(datasource.SiteNode)
268
            Debug.Print(datasource.IsSatellite)
269
            Debug.Print(datasource.GetSystemEditingToolbarSetting)
270
            objDrawings.Collect(datasource)
271
            Dim sPath As String = "‪\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\Plant_Hierarchy\8121\8121-1\188943-8121-PR-DW-011001.pid"
272
            objPIDAutoApp = CreateObject("PIDAutomation.Application")
273

    
274
            For Each objDrawing In objDrawings
275
                If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
276
                    objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(sPath)
277
                    If Not objPIDADrawing Is Nothing Then
278
                        objPIDADrawing.CloseDrawing
279
                    End If
280
                End If
281
            Next
282

    
283
            Dim extension As String = Path.GetExtension(oDwgName)
284
            oDwgName = oDwgName.Replace(extension, "")
285

    
286
            objPIDAutoApp = CreateObject("PIDAutomation.Application")
287

    
288
            'For Each objDrawing In objPIDAutoApp.Drawings
289
            '    objDrawing.CloseDrawing(True)
290
            'Next
291

    
292
            objPIDAutoApp.Drawings.OpenDrawing(oDwgName + ".pid")
293

    
294
            objPIDAutoApp.ActiveWindow.Fit()
295

    
296
            Return True
297
        Catch ex As Exception
298
            If objPIDADrawing IsNot Nothing Then
299
                objPIDADrawing.CloseDrawing
300
            End If
301
            If objPIDAutoApp IsNot Nothing Then
302
                objPIDAutoApp.Quit
303
            End If
304
            datasource = Nothing
305
            objPIDAutoApp = Nothing
306
            objPIDADrawing = Nothing
307
            Return False
308
        End Try
309
        If objPIDADrawing IsNot Nothing Then
310
            objPIDADrawing.CloseDrawing
311
        End If
312

    
313
    End Function
314

    
315

    
316
    Private Function GetDataFromMappingDB(ByVal sSymbolName As String, ByVal sColumn As String) As String
317
        Dim sValue As String = ""
318
        For Each oDt As DataTable In _Mapping_DB.Tables
319
            If oDt.Rows.Count > 0 Then
320
                Dim oSelectRow() As DataRow = oDt.Select("[img_symbolname] = '" + sSymbolName + "'")
321
                If oSelectRow.Length = 1 Then
322
                    If sColumn = _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME Then
323
                        sValue = oSelectRow(0).Item("SYM FILE NAME").ToString()
324
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH Then
325
                        sValue = "\" & oSelectRow(0).Item("SYMBOL PATH").ToString() & "\" & oSelectRow(0).Item("SYM FILE NAME").ToString()
326
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_COMPTPYE Then
327
                        sValue = oSelectRow(0).Item("ITEM TYPE").ToString()
328
                    ElseIf sColumn = _DB_COLUMN_MAPPING_SPPID_CLASS Then
329
                        sValue = oSelectRow(0).Item("CLASS").ToString()
330
                    Else
331
                        sValue = oSelectRow(0).Item("SYMBOL PATH").ToString() & "\" & oSelectRow(0).Item("SYM FILE NAME").ToString()
332
                    End If
333

    
334
                End If
335
            End If
336
        Next
337

    
338
        Return sValue
339
    End Function
340

    
341
    Private Function GetAttributeMapping(ByVal sAttributeName As String, ByVal sColumn As String) As String
342
        Dim sSPPIDAttribute As String = ""
343
        If _Attribute_DB.Rows.Count > 0 Then
344
            Dim oSelectRow() As DataRow = _Attribute_DB.Select("[pid_attribute] = '" + sAttributeName + "'")
345
            If oSelectRow.Length = 1 Then
346
                sSPPIDAttribute = oSelectRow(0).Item(sColumn).ToString()
347
            End If
348
        End If
349
        Return sSPPIDAttribute
350
    End Function
351

    
352
    '  Dim _TempSymbolDt As DataTable = Symbol_Dt()
353

    
354

    
355
    Private Function LoadSymbolInXml(ByVal sXmlPath As String) As Drawing
356
        Try
357
            ''  _TempSymbolDt = Symbol_Dt()
358
            Dim CDrawing As Drawing = New Drawing()
359
            Dim oDt As DataTable = LoadSymbol_DT()
360
            Dim oElement As XElement = XElement.Load(sXmlPath)
361

    
362
            If oElement IsNot Nothing Then
363
                CDrawing.DwgName = oElement.Element(_XML_DWGNAME).Value
364
                CDrawing.Size = oElement.Element(_XML_DWGSIZE).Value
365
                SplitLocation(CDrawing.Size, _IMG_X, _IMG_Y)
366
                CDrawing.Unit = oElement.Element(_XML_UNIT).Value
367

    
368
                Dim oLineno_list As New List(Of Line_no)
369
                Dim oEqp_list As New List(Of Eqp_no)
370

    
371
                For Each oLineNo As Object In oElement.Elements(_XML_CATEGORY_LINENO)
372

    
373
                    Dim CLineNo As Line_no = New Line_no()
374
                    Try
375
                        CLineNo.Uid = oLineNo.Element(_XML_LINENO_UID).Value
376
                        CLineNo.Text = oLineNo.Element(_XML_LINENO_TEXT).Value
377
                        CLineNo.Location = oLineNo.Element(_XML_LINENO_LOCATION).Value
378
                        CLineNo.Angle = oLineNo.Element(_XML_LINENO_ANGLE).Value
379
                        CLineNo.SystemPath = "\Piping\Labels - Piping Segments\Kemya Line Number.sym" 'GetDataFromMappingDB(_XML_CATEGORY_LINENO, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
380
                    Catch ex As Exception
381
                        'CLineNo.Text = "PipeLineNo"
382
                        'CLineNo.Uid = "PipeLineNo"
383
                    End Try
384

    
385

    
386
                    Dim oLine_Dt As DataTable = Line_Dt()
387
                    Dim oSymbol_Dt As DataTable = Symbol_Dt()
388
                    Dim oAttribute_Dt As DataTable = Attribute_Dt()
389

    
390
                    For Each oRun As Object In oLineNo.Elements(_XML_CATEGORY_RUN)
391
                        For Each oLine As Object In oRun.Elements(_XML_CATEGORY_LINE)
392
                            Try
393
                                Dim oAddrow As DataRow = oLine_Dt.NewRow()
394
                                Dim oEleObj As XElement
395
                                Dim sUid As String
396
                                Dim sStartpoint As String
397
                                Dim sEndpoint As String
398
                                oEleObj = oLine.Element(_XML_LINE_UID)
399
                                sUid = oEleObj.Value
400
                                oEleObj = oLine.Element(_XML_LINE_STARTPOINT)
401
                                sStartpoint = oEleObj.Value
402
                                oEleObj = oLine.Element(_XML_LINE_ENDPOINT)
403
                                sEndpoint = oEleObj.Value
404

    
405
                                oAddrow(_XML_LINE_UID) = sUid
406
                                oAddrow(_XML_LINE_STARTPOINT) = sStartpoint
407
                                oAddrow(_XML_LINE_ENDPOINT) = sEndpoint
408
                                oAddrow(_XML_LINE_SYSTEMPATH) = GetDataFromMappingDB(_XML_CATEGORY_LINE, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
409
                                oAddrow(_XML_LINE_DRAWING) = "FALSE"
410
                                oLine_Dt.Rows.Add(oAddrow)
411
                            Catch ex As Exception
412

    
413
                            End Try
414

    
415
                        Next
416

    
417
                        For Each oSymbol As Object In oRun.Elements(_XML_CATEGORY_SYMBOL)
418
                            Try
419
                                Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
420
                                Dim oEleObj As XElement
421
                                Dim sUid As String
422
                                Dim sName As String
423
                                Dim sLocation As String
424
                                Dim sSize As String
425
                                Dim sAngle As String
426
                                Dim sOriginalPoint As String = ""
427
                                oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
428
                                sUid = oEleObj.Value
429
                                oEleObj = oSymbol.Element(_XML_SYMBOL_PARENT)
430
                                sName = oEleObj.Value
431
                                oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
432
                                sLocation = oEleObj.Value
433
                                oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
434
                                sSize = oEleObj.Value
435
                                oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
436
                                sAngle = oEleObj.Value
437
                                Try
438
                                    oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
439
                                    sOriginalPoint = oEleObj.Value
440
                                Catch ex As Exception
441

    
442
                                End Try
443

    
444
                                oAddrow(_XML_SYMBOL_UID) = sUid
445
                                oAddrow(_XML_SYMBOL_NAME) = IO.Path.GetFileNameWithoutExtension(GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME))
446
                                oAddrow(_XML_SYMBOL_LOCATION) = sLocation
447
                                oAddrow(_XML_SYMBOL_SIZE) = sSize
448
                                oAddrow(_XML_SYMBOL_ANGLE) = sAngle
449
                                oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
450
                                oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
451
                                oAddrow(_XML_SYMBOL_CLASS) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_CLASS)
452
                                oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
453

    
454
                                oSymbol_Dt.Rows.Add(oAddrow)
455
                            Catch ex As Exception
456

    
457
                            End Try
458

    
459
                        Next
460

    
461
                        For Each oAtrribute As Object In oRun.Elements(_XML_CATEGORY_ATTRIBUTE)
462
                            Try
463
                                Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
464
                                Dim oEleObj As XElement
465
                                Dim sUid As String
466
                                Dim sName As String
467
                                Dim sValue As String
468

    
469
                                oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
470
                                sUid = oEleObj.Value
471
                                oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
472
                                sName = oEleObj.Value
473
                                oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
474
                                sValue = oEleObj.Value
475

    
476
                                oAddrow(_XML_ATTRIBUTE_UID) = sUid
477
                                oAddrow(_XML_ATTRIBUTE_NAME) = sName
478
                                oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
479
                                oAttribute_Dt.Rows.Add(oAddrow)
480
                            Catch ex As Exception
481

    
482
                            End Try
483

    
484
                        Next
485

    
486
                    Next
487
                    'Line No Attribute
488
                    For Each oAtrribute As Object In oLineNo.Elements(_XML_CATEGORY_ATTRIBUTE)
489
                        Try
490
                            Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
491
                            Dim oEleObj As XElement
492
                            Dim sUid As String
493
                            Dim sName As String
494
                            Dim sValue As String
495

    
496
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
497
                            sUid = oEleObj.Value
498
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
499
                            sName = oEleObj.Value
500
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
501
                            sValue = oEleObj.Value
502
                            oAddrow(_XML_ATTRIBUTE_UID) = sUid
503
                            oAddrow(_XML_ATTRIBUTE_NAME) = sName
504
                            oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
505
                            oAttribute_Dt.Rows.Add(oAddrow)
506
                        Catch ex As Exception
507

    
508
                        End Try
509

    
510
                    Next
511
                    CLineNo.Dt_Line = oLine_Dt
512
                    CLineNo.Dt_Symbol = oSymbol_Dt
513
                    CLineNo.Dt_Attribute = oAttribute_Dt
514
                    oLineno_list.Add(CLineNo)
515
                    'For Each oSymbol As Object In oElement.Elements(_XML_CATEGORY_SYMBOL)
516
                    '    Dim oAddrow As DataRow = _TempSymbolDt.NewRow()
517
                    '    Dim oEleObj As XElement
518
                    '    Dim sUid As String
519
                    '    Dim sName As String
520
                    '    Dim sLocation As String
521
                    '    Dim sSize As String
522
                    '    Dim sAngle As String
523
                    '    Dim sOriginalPoint As String = ""
524
                    '    oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
525
                    '    sUid = oEleObj.Value
526
                    '    oEleObj = oSymbol.Element(_XML_SYMBOL_NAME)
527
                    '    sName = oEleObj.Value
528
                    '    oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
529
                    '    sLocation = oEleObj.Value
530
                    '    oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
531
                    '    sSize = oEleObj.Value
532
                    '    oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
533
                    '    sAngle = oEleObj.Value
534
                    '    Try
535
                    '        oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
536
                    '        sOriginalPoint = oEleObj.Value
537
                    '    Catch ex As Exception
538

    
539
                    '    End Try
540
                    '    oAddrow(_XML_SYMBOL_UID) = sUid
541
                    '    oAddrow(_XML_SYMBOL_NAME) = sName
542
                    '    oAddrow(_XML_SYMBOL_LOCATION) = sLocation
543
                    '    oAddrow(_XML_SYMBOL_SIZE) = sSize
544
                    '    oAddrow(_XML_SYMBOL_ANGLE) = sAngle
545
                    '    oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
546
                    '    oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
547
                    '    oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
548
                    '    _TempSymbolDt.Rows.Add(oAddrow)
549
                    'Next
550
                Next
551
                For Each oEqpNo As Object In oElement.Elements(_XML_CATEGORY_EQUIPMENT)
552
                    Dim CEqp_no As Eqp_no = New Eqp_no()
553
                    'CEqp_no.Uid = oEqpNo.Element(_XML_EQP_UID).Value
554
                    'CEqp_no.Text = oEqpNo.Element(_XML_EQP_TEXT).Value
555
                    'CEqp_no.Location = oEqpNo.Element(_XML_EQP_LOCATION).Value
556
                    'CEqp_no.Angle = oEqpNo.Element(_XML_EQP_ANGLE).Value
557
                    'CEqp_no.SystemPath = GetDataFromMappingDB(_XML_CATEGORY_EQUIPMENT, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
558
                    Dim oSymbol_Dt As DataTable = Symbol_Dt()
559
                    Dim oAttribute_Dt As DataTable = Attribute_Dt()
560

    
561
                    For Each oSymbol As Object In oEqpNo.Elements(_XML_CATEGORY_SYMBOL)
562
                        Try
563
                            Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
564
                            Dim oEleObj As XElement
565
                            Dim sUid As String
566
                            Dim sName As String
567
                            Dim sLocation As String
568
                            Dim sSize As String
569
                            Dim sAngle As String
570
                            Dim sOriginalPoint As String = ""
571
                            oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
572
                            sUid = oEleObj.Value
573
                            oEleObj = oSymbol.Element(_XML_SYMBOL_NAME)
574
                            sName = oEleObj.Value
575
                            oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
576
                            sLocation = oEleObj.Value
577
                            oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
578
                            sSize = oEleObj.Value
579
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
580
                            sAngle = oEleObj.Value
581
                            Try
582
                                oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
583
                                sOriginalPoint = oEleObj.Value
584
                            Catch ex As Exception
585
                            End Try
586
                            oAddrow(_XML_SYMBOL_UID) = sUid
587
                            oAddrow(_XML_SYMBOL_NAME) = sName
588
                            oAddrow(_XML_SYMBOL_LOCATION) = sLocation
589
                            oAddrow(_XML_SYMBOL_SIZE) = sSize
590
                            oAddrow(_XML_SYMBOL_ANGLE) = sAngle
591
                            oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
592
                            oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
593
                            oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
594
                            oSymbol_Dt.Rows.Add(oAddrow)
595
                        Catch ex As Exception
596

    
597
                        End Try
598

    
599
                    Next
600
                    For Each oAtrribute As Object In oEqpNo.Elements(_XML_CATEGORY_ATTRIBUTE)
601
                        Try
602
                            Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
603
                            Dim oEleObj As XElement
604
                            Dim sUid As String
605
                            Dim sName As String
606
                            Dim sValue As String
607
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
608
                            sUid = oEleObj.Value
609
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
610
                            sName = oEleObj.Value
611
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
612
                            sValue = oEleObj.Value
613
                            oAddrow(_XML_ATTRIBUTE_UID) = sUid
614
                            oAddrow(_XML_ATTRIBUTE_NAME) = sName
615
                            oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
616
                            oAttribute_Dt.Rows.Add(oAddrow)
617
                        Catch ex As Exception
618

    
619
                        End Try
620

    
621
                    Next
622
                    CEqp_no.Dt_Equipment = oSymbol_Dt
623
                    CEqp_no.Dt_Attribute = oAttribute_Dt
624
                    oEqp_list.Add(CEqp_no)
625
                Next
626
                CDrawing.Line_nos = oLineno_list
627
                CDrawing.Eqp_nos = oEqp_list
628
            End If
629
            Return CDrawing
630
        Catch ex As Exception
631
            Return Nothing
632
        End Try
633

    
634
    End Function
635

    
636

    
637

    
638
    'Private Function LoadPipeInXml(ByVal sXmlPath As String) As DataTable
639
    '    Try
640
    '        Dim oDt As DataTable = LoadPipe_DT()
641
    '        Dim oElement As XElement = XElement.Load(sXmlPath)
642
    '        If oElement IsNot Nothing Then
643
    '            Dim DWGElement As XElement = oElement.Element("DWGNAME")
644
    '            Dim DWGNAME = DWGElement.Value
645
    '            Dim sXY As XElement = oElement.Element("SIZE")
646
    '            Dim sSize = sXY.Value
647
    '            Dim oSplitDWGPos As String() = sSize.Split(", ")
648

    
649
    '            If IsNumeric(oSplitDWGPos(0)) Then
650
    '                _IMG_X = Double.Parse(oSplitDWGPos(0))
651
    '            End If
652
    '            If IsNumeric(oSplitDWGPos(1)) Then
653
    '                _IMG_Y = Double.Parse(oSplitDWGPos(1))
654
    '            End If
655

    
656
    '            For Each pipes As Object In oElement.Elements("IMGLINES")
657
    '                For Each pipe As Object In pipes.Elements("IMGLINE")
658
    '                    Dim oAddrow As DataRow = oDt.NewRow()
659
    '                    Dim oObj As XElement = pipe.Element("ITEM")
660
    '                    Dim oItem = oObj.Value
661
    '                    ' Dim oSymbolPath As String = "\" + oSymbol + "\" + oClass + "\" + oType + "\" + oItem + ".sym"
662
    '                    Dim oSymbolPath As String = GetSystemPathFromMappingDB(oItem)
663
    '                    oObj = pipe.Element("START")
664
    '                    Dim oStartPoint = oObj.Value
665
    '                    Dim oSplitPos As String() = oStartPoint.Split(", ")
666
    '                    Dim oStartpos_X As Double = 0.0
667
    '                    Dim oStartpos_Y As Double = 0.0
668
    '                    If IsNumeric(oSplitPos(0)) Then
669
    '                        oStartpos_X = Double.Parse(oSplitPos(0))
670
    '                    End If
671
    '                    If IsNumeric(oSplitPos(1)) Then
672
    '                        oStartpos_Y = Double.Parse(oSplitPos(1))
673
    '                    End If
674

    
675
    '                    ConvertPoint(oStartpos_X, oStartpos_Y, _DWG_X, _DWG_Y)
676
    '                    oObj = pipe.Element("End")
677
    '                    Dim oEndPoint = oObj.Value
678
    '                    oSplitPos = oEndPoint.Split(", ")
679
    '                    Dim oEndpos_X As Double = 0.0
680
    '                    Dim oEndpos_Y As Double = 0.0
681
    '                    If IsNumeric(oSplitPos(0)) Then
682
    '                        oEndpos_X = Double.Parse(oSplitPos(0))
683
    '                    End If
684
    '                    If IsNumeric(oSplitPos(1)) Then
685
    '                        oEndpos_Y = Double.Parse(oSplitPos(1))
686
    '                    End If
687
    '                    ConvertPoint(oEndpos_X, oEndpos_Y, _DWG_X, _DWG_Y)
688

    
689
    '                    oAddrow("start_x") = oStartpos_X '+ 0.05
690
    '                    oAddrow("start_y") = oStartpos_Y
691
    '                    oAddrow("end_x") = oEndpos_X
692
    '                    oAddrow("end_y") = oEndpos_Y
693
    '                    oAddrow("SystemPath") = oSymbolPath
694
    '                    oDt.Rows.Add(oAddrow)
695
    '                Next
696
    '            Next
697

    
698
    '        End If
699

    
700

    
701
    '        Return oDt
702
    '    Catch ex As Exception
703
    '        Return Nothing
704
    '    End Try
705
    'End Function
706

    
707

    
708
    Private Sub ConvertPointByImage(ByRef dX As Double, ByRef dY As Double, ByVal dDwgX As Double, ByVal dDwgY As Double)
709

    
710
        Dim calcx As Double = 0
711
        Dim calcy As Double = 0
712
        calcx = (dX * _DWG_X) / dDwgX 'Math.Round((dX * _DWG_X) / dDwgX, 2)
713
        calcy = _DWG_Y - ((dY * _DWG_Y) / dDwgY) '_DWG_Y - Math.Round((dY * _DWG_Y) / dDwgY, 2)
714
        dX = calcx
715
        dY = calcy
716
    End Sub
717

    
718

    
719
    '@brief Convert To SPPID
720
    '@author : Gyusu Park
721
    '@date : 2018-04-10
722
    '@history:
723

    
724
    Private Sub SplitLocation(ByVal sLocation As String, ByRef dX As Double, ByRef dY As Double)
725

    
726
        Dim opointstr As String() = Split(sLocation, ",")
727
        If (opointstr.Length > 1) Then
728
            If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
729
                dX = opointstr(0)
730
                dY = opointstr(1)
731
            End If
732
        End If
733

    
734
    End Sub
735

    
736

    
737

    
738

    
739

    
740

    
741
    Private Function AutoConverting(ByVal oPipe_Dt As DataTable, ByVal oSymbol_Dt As DataTable, ByVal oTreeNode As TreeNode) As Boolean
742
        Dim iTotalCount As Double = oPipe_Dt.Rows.Count + oSymbol_Dt.Rows.Count
743
        Dim iSymbolcount As Double = 0
744

    
745
        Dim lobjDatasource As Object = _Placement.PIDDataSource
746

    
747
        ' lobjDatasource.BeginTransaction()
748
        '  datasource = objPlacement.PIDDataSource
749
        'Dim iPipecnt As Integer = 0
750
        SetListBoxItems(ListBox_Result, " Auto converting 시작....")
751

    
752
        Dim iPipeCnt As Integer = 0
753
        If oPipe_Dt IsNot Nothing Then
754
            For Each oRow As DataRow In oPipe_Dt.Rows
755
                Dim oposition As String = oRow("position").ToString()
756
                Dim oSymbol As String = oRow("SystemPath").ToString()
757

    
758
                Dim objConnector As LMConnector
759
                Dim objInputs As PlaceRunInputs
760
                objInputs = New PlaceRunInputs
761
                Dim oSplitStr As String() = Split(oposition, " ")
762
                For Each sposition As String In oSplitStr
763
                    Dim opointstr As String() = Split(sposition, ", ")
764

    
765
                    If (opointstr.Length > 1) Then
766
                        If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
767
                            Dim ox As Double = opointstr(0)
768
                            Dim oy As Double = opointstr(1)
769
                            ConvertPointByImage(ox, oy, _IMG_X, _IMG_Y)
770
                            objInputs.AddPoint(ox, oy)
771
                        End If
772
                    End If
773
                Next
774
                Dim objItem As LMAItem
775
                objItem = _Placement.PIDCreateItem(oSymbol)
776
                objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
777
                SetListBoxItems(ListBox_Result, " Place PipeLine...." & "(" & (iPipeCnt + 1) & "/" & oPipe_Dt.Rows.Count)
778
                'Dim objPipeRun As LMPipeRun = datasource.GetPipeRun(objConnector.ModelItemID)
779
                'objPipeRun.Attributes("OperFluidCode").Value = "AFS"
780
                'objPipeRun.Commit()
781
                iSymbolcount = iSymbolcount + 1
782
                iPipeCnt = iPipeCnt + 1
783
            Next
784
        End If
785

    
786
        SetListBoxItems(ListBox_Result, " Place PipeLine....완료")
787

    
788
        Dim iAllInstrumentCnt As Integer = oSymbol_Dt.Select("Name = 'INSTRUMENTATION'").Length
789
                    Dim iValveCnt As Integer = oSymbol_Dt.Select("Class = 'VALVES'").Length
790
        Dim iInstrumentCnt As Integer = 1
791
        Dim iFittingsCnt As Integer = 1
792

    
793
        Dim oInsNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Instruments", True)(0)
794
        Dim oValveNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Valves", True)(0)
795
        Dim oFittingsNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Fittings", True)(0)
796
        For Each oRow As DataRow In oSymbol_Dt.Rows
797

    
798
            Try
799

    
800
                Dim sSystemPath As String = oRow("SystemPath").ToString()
801
                Dim sName As String = oRow("Name").ToString()
802
                Dim sType As String = oRow("Type").ToString()
803
                Dim sText As String = oRow("Text").ToString()
804
                Dim sClass As String = oRow("Class").ToString()
805
                Dim sItem As String = oRow("Item").ToString()
806

    
807
                Dim oX As Double = 0.0
808
                Dim oY As Double = 0.0
809
                If IsNumeric(oRow("x").ToString()) Then
810
                    oX = Double.Parse(oRow("x").ToString())
811
                End If
812
                If IsNumeric(oRow("y").ToString()) Then
813
                    oY = Double.Parse(oRow("y").ToString())
814
                End If
815
                Dim oAngle As Double = 0.0
816
                If IsNumeric(oRow("Angle").ToString()) Then
817
                    oAngle = Double.Parse(oRow("Angle").ToString())
818
                End If
819
                '   oSymbol = "\INSTRUMENTation\SYSTEM FUNCTIONS\D C S\DCS FUNC ACCESS IN PRIME LOC.sym"
820
                If sSystemPath <> "" Then
821
                    If sName = _TYPE_Instumentation Then
822

    
823
                        Dim sTagsuffix As String = ""
824
                        Dim sTagSequenceNo As String = ""
825
                        Dim sMeasuredVariableCode As String = ""
826
                        Dim sInstrumentTypeModifier As String = ""
827

    
828
                        If sText <> "" Then
829
                            If sText.Contains(",") Then
830
                                Dim splitstr() As String = sText.Split(",")
831
                                For i = 0 To splitstr.Count - 1
832
                                    If i = 0 Then
833
                                        sMeasuredVariableCode = Mid(splitstr(i), 1, 1)
834
                                        sTagSequenceNo = Mid(splitstr(i), 2, Len(splitstr(i)))
835
                                    Else
836
                                        If Len(splitstr(i)) = 1 Then
837
                                            sInstrumentTypeModifier = splitstr(i)
838
                                        ElseIf Len(splitstr(i)) = 0 Then
839

    
840
                                        ElseIf Len(splitstr(i)) > 1 Then
841
                                            sInstrumentTypeModifier = Mid(splitstr(i), 1, 1)
842
                                            sTagsuffix = Mid(splitstr(i), 2, Len(splitstr(i)))
843
                                        End If
844
                                    End If
845
                                Next
846
                            Else
847
                                sMeasuredVariableCode = Mid(sText, 1, 1)
848
                                sTagSequenceNo = Mid(sText, 2, Len(sText))
849
                            End If
850

    
851
                        End If
852

    
853
                        Dim objInstrSym As LMSymbol
854
                        objInstrSym = _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
855
                        SetListBoxItems(ListBox_Result, " Place Instrument...." & "(" & (iInstrumentCnt + 1) & "/" & iAllInstrumentCnt & ")")
856

    
857
                        ' SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sTagSequenceNo)
858
                        Dim action As Action = Sub()
859
                                                   oInsNode.Nodes.Add(sClass & "-" & iInstrumentCnt)
860
                                                   oInsNode.ExpandAll()
861
                                               End Sub
862
                        oInsNode.TreeView.Invoke(action)
863

    
864

    
865
                        Dim objInstr As LMInstrument
866
                        objInstr = lobjDatasource.GetInstrument(objInstrSym.ModelItemID)
867

    
868
                        Dim objItem As LMAItem
869
                        objItem = _Placement.PIDCreateItem(sSystemPath)
870

    
871

    
872
                        objInstr.Attributes("MeasuredVariableCode").Value = sMeasuredVariableCode
873
                        objInstr.Attributes("InstrumentTypeModifier").Value = sInstrumentTypeModifier
874
                        objInstr.Attributes("TagSuffix").Value = sTagsuffix
875
                        objInstr.Attributes("TagSequenceNo").Value = sTagSequenceNo
876
                        objInstr.Commit()
877
                        iInstrumentCnt = iInstrumentCnt + 1
878
                    ElseIf sName = "GATE VALVE WITH PLUG" Then
879

    
880
                    ElseIf sName = "MEDIUM 1D 1TO1" Then
881

    
882
                    ElseIf sClass = "VALVES" Then
883
                        Dim action As Action = Sub()
884
                                                   oValveNode.ExpandAll()
885
                                                   oValveNode.Nodes.Add(sClass & "-" & iValveCnt)
886
                                               End Sub
887
                        oValveNode.TreeView.Invoke(action)
888

    
889
                        _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
890

    
891
                        iValveCnt = iValveCnt + 1
892
                    Else
893
                        Dim action As Action = Sub()
894
                                                   oFittingsNode.ExpandAll()
895
                                                   oFittingsNode.Nodes.Add(sClass & "-" & iFittingsCnt)
896
                                               End Sub
897
                        oFittingsNode.TreeView.Invoke(action)
898
                        _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
899

    
900
                        iFittingsCnt = iFittingsCnt + 1
901

    
902
                    End If
903
                    iSymbolcount = iSymbolcount + 1
904
                Else
905
                End If
906
            Catch ex As Exception
907

    
908
            End Try
909
            Dim dCalcProgressValue As Double = (iSymbolcount / iTotalCount) * 100
910
            SetProgressbar(ProgressBar_Status, dCalcProgressValue)
911
            '     ProgressBar_Status.Value = (iSymbolcount / iTotalCount) * 100
912

    
913
        Next
914

    
915
        MsgBox("Complete AutoConverting")
916
        SetListBoxItems(ListBox_Result, "Place Instrument....변환완료")
917
        SetListBoxItems(ListBox_Result, "총 symbol:  " & iSymbolcount & "개 변환완료")
918
        SetProgressbar(ProgressBar_Status, 100)
919
        ' MsgBox("symbol: " & iSymbolcount & "개, pipe : " & iPipecnt & "개 변환완료")
920
    End Function
921

    
922

    
923
    Private Sub Tree_XMLFiles_AfterCheck(sender As Object, e As TreeViewEventArgs)
924
        If e.Node.Checked = True Then
925
            For Each oNode As TreeNode In e.Node.Nodes
926
                oNode.Checked = True
927
            Next
928
        Else
929
            For Each oNode As TreeNode In e.Node.Nodes
930
                oNode.Checked = False
931
            Next
932
        End If
933
    End Sub
934

    
935
    Private Function Load_DB(ByVal sDBPath As String, ByVal sTableName As String) As DataTable
936

    
937
        Try
938
            Dim oDt As New DataTable
939
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
940
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
941
            conn.Open()
942
            Dim sQuery As String = "Select * from " & sTableName
943
            Dim cmd As SQLiteCommand = conn.CreateCommand()
944
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
945
            Dim oDataSet As DataSet = New DataSet()
946
            adapter.Fill(oDataSet)
947
            oDt = oDataSet.Tables(0)
948
            Return oDt
949
        Catch ex As Exception
950
            Return Nothing
951
        End Try
952

    
953

    
954
    End Function
955

    
956
    Private Sub Load_AttributeDB(ByVal sDBPath As String)
957

    
958
        Try
959
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
960
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
961
            conn.Open()
962
            Dim sQuery As String = "Select * from Attribute"
963
            Dim cmd As SQLiteCommand = conn.CreateCommand()
964
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
965
            Dim oDataSet As DataSet = New DataSet()
966
            adapter.Fill(oDataSet)
967
            _Attribute_DB = oDataSet.Tables(0)
968
        Catch ex As Exception
969

    
970
        End Try
971

    
972

    
973
    End Sub
974

    
975
    'Private Sub Tree_XMLFiles_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles Tree_XMLFiles.AfterSelect
976
    '    If first_start = False Then Exit Sub
977
    '    Dim pa = e.Node.FullPath.ToString
978

    
979
    '    printfilesfolders_here(pa, e.Node)
980

    
981
    '    displayfiles(pa)
982

    
983
    '    Dim coco As String = ""
984
    '    coco = pa.ToString
985
    '    coco = coco.Replace("\\", "\")
986
    '    Me.Text = coco
987
    '    folders_path = coco
988
    'End Sub
989

    
990
    Sub printfilesfolders_here(ByVal path As String, ByRef itree As TreeNode)
991

    
992
        Dim foldername As String
993
        Dim filename As String
994
        itree.Nodes.Clear()
995
        On Error GoTo eee
996
        For Each foldername In Directory.GetDirectories(path)
997
            On Error GoTo eee
998
            Dim jj = foldername.LastIndexOf("\")
999
            Dim jj1 = foldername.Length - jj
1000
            Dim foldr = foldername.Substring((jj + 1), (jj1 - 1))
1001
            itree.Nodes.Add(foldr, foldr)
1002
        Next ' if you put this next at the end of procedure recursive will be done on first folder only
1003
        Exit Sub
1004
eee:
1005
    End Sub
1006

    
1007

    
1008

    
1009
    '    Private Sub Tree_XMLFiles_MouseMove(sender As Object, e As MouseEventArgs) Handles Tree_XMLFiles.MouseMove
1010
    '        first_start = True
1011
    '    End Sub
1012

    
1013
    '    Private Sub ListView_File_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView_File.SelectedIndexChanged
1014
    '        Dim indexes As ListView.SelectedIndexCollection =
1015
    '                         Me.ListView_File.SelectedIndices
1016
    '        Dim index As Integer
1017

    
1018
    '        For Each index In indexes
1019
    '            'On Error Resume Next
1020
    '            If folders_path.EndsWith("\") = True Then
1021
    '                Me.Status_Main.Items(0).Text = folders_path + (Me.ListView_File.Items(index).Text)
1022
    '                'On Error Resume Next
1023
    '            Else
1024
    '                Me.Status_Main.Items(0).Text = folders_path + "\" + (Me.ListView_File.Items(index).Text)
1025
    '            End If
1026

    
1027
    '            Dim infoReader As System.IO.FileInfo
1028
    '            infoReader = My.Computer.FileSystem.GetFileInfo(Me.Status_Main.Items(0).Text)
1029
    '            Me.Status_Main.Items(1).Text = " Created : " + infoReader.CreationTime.ToString + " " + infoReader.Attributes.ToString
1030
    '        Next
1031
    '    End Sub
1032

    
1033
    '    Private Sub Procees()
1034
    '        Dim indexes As ListView.SelectedIndexCollection =
1035
    '                            Me.ListView_File.SelectedIndices
1036
    '        Dim index As Integer
1037

    
1038
    '        For Each index In indexes
1039
    '            'On Error Resume Next
1040
    '            If folders_path.EndsWith("\") = True Then
1041
    '                On Error GoTo out
1042
    '                Me.Status_Main.Items(0).Text = folders_path + (Me.ListView_File.Items(index).Text)
1043
    '                On Error GoTo out
1044
    '                'On Error Resume Next
1045
    '            Else
1046
    '                Me.Status_Main.Items(0).Text = folders_path + "\" + (Me.ListView_File.Items(index).Text)
1047
    '                On Error GoTo out
1048
    '            End If
1049

    
1050
    '            Dim infoReader As System.IO.FileInfo
1051
    '            infoReader = My.Computer.FileSystem.GetFileInfo(Me.Status_Main.Items(0).Text)
1052
    '            Me.Status_Main.Items(1).Text = " Created : " + infoReader.CreationTime.ToString + " " + infoReader.Attributes.ToString
1053
    '            On Error GoTo out
1054
    '            MsgBox(Me.Status_Main.Items(0).Text + " is processed")
1055
    '            On Error GoTo out
1056
    '        Next
1057
    '        Exit Sub
1058
    'out:
1059
    '        MsgBox(Err.Description)
1060
    'End Sub
1061

    
1062
    Private Function LoadAllDrawing() As DataTable
1063

    
1064

    
1065
        SetListBoxItems(ListBox_Result, "도면정보 로드중....")
1066

    
1067
        Dim oDt As DataTable = Drawing_Dt()
1068
        Dim sHierarchy As String = My.Settings.Plant_Hierarchy
1069

    
1070

    
1071
        Dim files() As String
1072
        files = Directory.GetFiles(sHierarchy, "*.pid", SearchOption.AllDirectories)
1073
        For Each FileName As String In files
1074
            Dim sName As String = FileName
1075
            Dim oAddRow As DataRow = oDt.NewRow()
1076
            oAddRow("Name") = Path.GetFileNameWithoutExtension(sName)
1077
            oAddRow("Path") = FileName
1078
            oDt.Rows.Add(oAddRow)
1079
        Next
1080
        Return oDt
1081
    End Function
1082

    
1083
    Private Function LoadAllDrawing2() As DataTable
1084
        Dim datasource As LMADataSource
1085
        Dim objPIDAutoApp As Object
1086
        Dim objPIDADrawing As Object
1087
        Dim objDrawing As Object 'Drawing
1088
        'Dim objDrawing As LMDrawing
1089
        'Dim objDrawings As LMDrawings
1090

    
1091
        datasource = New LMADataSource
1092

    
1093
        '    objDrawings = New LMDrawings
1094
        'objDrawings.Collect(datasource)
1095
        objPIDAutoApp = CreateObject("PIDAutomation.Application")
1096

    
1097
        For Each objDrawing In objPIDAutoApp.Drawings
1098
            objDrawing.CloseDrawing(True)
1099
        Next
1100
        Try
1101
            objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("UY1-K-2000_P1_300dpi_0321_TEST_1")
1102
        Catch ex As Exception
1103
            Process.Start("\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\Plant_Hierarchy\8121\8121-1\UY1-K-2000_P1_300dpi_0321_TEST_1.pid")
1104
        End Try
1105

    
1106

    
1107

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

    
1112
        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("1")
1113

    
1114
        For Each objDrawing In objPIDAutoApp.Drawings
1115
            If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
1116
                Try
1117

    
1118
                    Dim sName As String = objDrawing.Attributes("Name").Value
1119

    
1120
                    iCount = iCount + 1
1121
                    If sName = "UY1-K-2000_P1_300dpi_0321_TEST_1" Then
1122
                        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(objDrawing.Attributes("Name"))
1123
                        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("\8121\8121-1\UY1-K-2000_P1_300dpi_0321_TEST_1.pid")
1124
                        If Not objPIDADrawing Is Nothing Then
1125
                            objPIDADrawing.CloseDrawing()
1126
                        End If
1127
                    End If
1128

    
1129

    
1130
                Catch ex As Exception
1131

    
1132
                End Try
1133

    
1134
            End If
1135
        Next
1136
        objPIDAutoApp.Quit
1137
        objPIDAutoApp = Nothing
1138
        objPIDADrawing = Nothing
1139
        objDrawing = Nothing
1140
        '   objDrawings = Nothing
1141
    End Function
1142

    
1143
    Dim _XMLList As ListView = New ListView()
1144

    
1145

    
1146

    
1147

    
1148

    
1149

    
1150
    Private Function CheckOpenDrawing() As Boolean
1151
        Try
1152

    
1153
            Dim lobjDatasource As Object
1154
            _Placement = CreateObject("Plaice.Placement", "")
1155
            lobjDatasource = _Placement.PIDDataSource
1156
            Return True
1157
        Catch ex As Exception
1158
            Return False
1159
        End Try
1160

    
1161
    End Function
1162

    
1163

    
1164
    Private Sub Btn_Convert_Click(sender As Object, e As EventArgs) Handles Btn_Convert.Click
1165

    
1166
        Main_Tab.SelectedIndex = 1
1167
        ListBox_Result.Items.Clear()
1168
        ' DataGrid_Result.DataSource = New DataTable()
1169
        Me.ProgressBar_Status.Visible = True
1170
        ProgressBar_Status.Maximum = 100
1171
        ProgressBar_Status.Value = 0
1172
        ' _selectFolderPath = Tree_XMLFiles.SelectedNode.FullPath.Replace("\\", "\")
1173
        _Main_trd = New Thread(AddressOf ThreadConvert)
1174
        _Main_trd.IsBackground = True
1175
        _Main_trd.Start()
1176
        FineOPCForm()
1177
    End Sub
1178

    
1179
    Private Sub FineOPCForm()
1180
        _Opc_trd = New Thread(AddressOf ThreadOPCRemove)
1181
        _Opc_trd.IsBackground = True
1182
        _Opc_trd.Start()
1183
    End Sub
1184

    
1185
    'Private Sub ThreadTask()
1186

    
1187

    
1188
    '    If _XMLList.Items.Count > 0 Then
1189

    
1190
    '        Dim oDwg_Dt As DataTable = LoadAllDrawing()
1191
    '        Dim iDwgCnt As Integer = 0
1192
    '        Dim objPIDAutoApp As Object
1193
    '        objPIDAutoApp = CreateObject("PIDAutomation.Application")
1194

    
1195

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

    
1199
    '            Dim sDwgName As String = Path.GetFileNameWithoutExtension(myList(i))
1200
    '            Txt_Status.Text = sDwgName & "..(" & i + 1 & "/" & myList.Count & ")"
1201
    '            SetListBoxItems(ListBox_Result, Txt_Status.Text & " 처리중....")
1202
    '            Dim sDwgNo As String = myList(i)
1203
    '            Dim oDwgPath As String = ""
1204
    '            oDwgPath = _selectFolderPath + "\" + sDwgNo
1205

    
1206
    '            Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
1207
    '            If sPath <> "" Then
1208

    
1209
    '                Process.Start(sPath)
1210

    
1211
    '                Dim bCheckOpenDrawing As Boolean = False
1212
    '                While (True)
1213
    '                    bCheckOpenDrawing = CheckOpenDrawing()
1214
    '                    If bCheckOpenDrawing = True Then
1215
    '                        Exit While
1216
    '                    Else
1217
    '                        Thread.Sleep(2000)
1218
    '                    End If
1219
    '                End While
1220

    
1221
    '                If bCheckOpenDrawing Then
1222
    '                    SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
1223
    '                    Dim oPipe_Dt As DataTable = New DataTable() 'LoadPipeInXml(oDwgPath)
1224

    
1225
    '                    Dim oSymbol_Dt As DataTable = LoadSymbolInXml(oDwgPath)
1226
    '                    Dim oTreeNode As New TreeNode  'SetTreeViewItems(Tree_Result, Tree_Result.Nodes, sDwgName, sDwgName)
1227
    '                    'oTreeNode = Tree_Result.Nodes.Find(sDwgName, True)(0)
1228
    '                    Dim action As Action = Sub()
1229
    '                                               oTreeNode = Tree_Result.Nodes.Add(sDwgName, sDwgName)
1230
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Instruments", "Instuments")
1231
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Pipes", "Pipes")
1232
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Valves", "Valves")
1233
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Fittings", "Fittings")
1234
    '                                               oTreeNode.ExpandAll()
1235
    '                                           End Sub
1236
    '                    Tree_Result.Invoke(action)
1237

    
1238

    
1239
    '                    '    oTreeNode.Expand()
1240
    '                    SetListBoxItems(ListBox_Result, sDwgName & " Auto converting 대기....")
1241
    '                    AutoConverting(oPipe_Dt, oSymbol_Dt, oTreeNode)
1242

    
1243
    '                End If
1244

    
1245
    '            End If
1246
    '            ''도면 생성
1247
    '            'If CreateDwg(sDwgName) Then
1248
    '            '    'AutoConverting
1249

    
1250
    '            'End If
1251

    
1252
    '        Next
1253
    '    End If
1254
    'End Sub
1255

    
1256
    Dim _objPIDAutoApp As Object
1257

    
1258
    Private Function OpenSPPID(ByVal oDwg_Dt As DataTable, ByVal sDwgName As String) As Boolean
1259
        Dim bCheckOpen As Boolean = False
1260
        '   Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgPath)
1261
        SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
1262
        _objPIDAutoApp = CreateObject("PIDAutomation.Application")
1263

    
1264
        Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
1265
        If sPath <> "" Then
1266
            Process.Start(sPath)
1267
        Else
1268
            Return bCheckOpen
1269
        End If
1270

    
1271
            Dim bCheckOpenDrawing As Boolean = False
1272
            While (True)
1273
                bCheckOpenDrawing = CheckOpenDrawing()
1274
                If bCheckOpenDrawing = True Then
1275
                    bCheckOpen = True
1276
                    Exit While
1277
                Else
1278
                    Thread.Sleep(2000)
1279
                End If
1280
            End While
1281

    
1282

    
1283
            Return bCheckOpen
1284
    End Function
1285

    
1286
    Private Function GetDrawing(ByVal sDwgName As String) As Drawing
1287
        For Each CDrawing In _DrawingsList
1288
            If CDrawing.DwgName.ToUpper() = sDwgName.ToUpper() Then
1289
                Return CDrawing
1290
            End If
1291
        Next
1292
        Return Nothing
1293
    End Function
1294

    
1295
    Private Function GetLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
1296
        For Each CLineNo In CDrawing.Line_nos
1297
            If CLineNo.Uid = sLineNoUid Then
1298
                Return CLineNo
1299
            End If
1300
        Next
1301
        Return Nothing
1302
    End Function
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, ByVal oAttribute_Dt As DataTable) As LMPipeRun
1349
        Try
1350
            Dim oPipeRun As LMPipeRun
1351
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" + sUid + "'")
1352
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
1353

    
1354
            If oPipeRow.Length > 0 Then
1355
                Dim oDatasource As Object = _Placement.PIDDataSource
1356
                Dim objItem As LMAItem
1357
                Dim objConnector As LMConnector
1358
                Dim objInputs As PlaceRunInputs
1359
                objInputs = New PlaceRunInputs
1360
                Dim dOriginalStart_x As Double = 0.0
1361
                Dim dOriginalStart_y As Double = 0.0
1362
                Dim dOriginalEnd_x As Double = 0.0
1363
                Dim dOriginalEnd_y As Double = 0.0
1364
                Dim dStart_x As Double = 0.0
1365
                Dim dStart_y As Double = 0.0
1366
                Dim dEnd_x As Double = 0.0
1367
                Dim dEnd_y As Double = 0.0
1368
                Dim sSystempath As String = "\Piping\Routing\Process Lines\Primary Piping.sym" ' oPipeRow(0)(_XML_LINE_SYSTEMPATH).ToString()
1369
                Dim sStartpoint As String = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
1370
                Dim sEndpoint As String = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
1371
                Dim sPipeUid As String = oPipeRow(0)(_XML_LINE_UID).ToString()
1372

    
1373
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
1374
                dStart_x = dOriginalStart_x
1375
                dStart_y = dOriginalStart_y
1376

    
1377
                If ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y) Then
1378
                    dEnd_x = dOriginalEnd_x
1379
                    dEnd_y = dOriginalEnd_y
1380

    
1381
                    '   라인보정(oLine_Dt, sPipeUid, dStart_x, dStart_y, dEnd_x, dEnd_y)
1382
                    '//Overlap 보정
1383
                    'If FindOverlapLine(oLine_Dt, sPipeUid, dStart_x, dStart_y, dEnd_x, dEnd_y) = False Then
1384
                    '    '//떨어진 라인 보정
1385
                    '    Dim dSeperate_start_x As Double = dStart_x
1386
                    '    Dim dSeperate_start_y As Double = dStart_y
1387
                    '    Dim dSeperate_end_x As Double = dEnd_x
1388
                    '    Dim dSeperate_end_y As Double = dEnd_y
1389
                    '    CalcSperateLine(dSeperate_start_x, dSeperate_start_y, dSeperate_end_x, dSeperate_end_y)
1390
                    '    If (FindOverlapLine(oLine_Dt, sPipeUid, dSeperate_start_x, dSeperate_start_y, dSeperate_end_x, dSeperate_end_y)) Then
1391
                    '        dStart_x = dSeperate_start_x
1392
                    '        dStart_y = dSeperate_start_y
1393
                    '        dEnd_x = dSeperate_end_x
1394
                    '        dEnd_y = dSeperate_end_y
1395
                    '    End If
1396
                    'End If
1397

    
1398
                    ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
1399
                    ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
1400
                    If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
1401

    
1402
                        'Dim iConnType As Integer = ModelingLine(dStart_x, dStart_y, dEnd_x, dEnd_y)
1403
                        'If iConnType = 1 Then
1404
                        '    objInputs.AddLocatedTarget(dStart_x, dStart_y)
1405
                        '    objInputs.AddPoint(dEnd_x, dEnd_y)
1406
                        'ElseIf iConnType = 2 Then
1407
                        '    objInputs.AddLocatedTarget(dEnd_x, dEnd_y)
1408
                        '    objInputs.AddPoint(dStart_x, dStart_y)
1409
                        'ElseIf iConnType = 3 Then
1410
                        '    objInputs.AddLocatedTarget(dEnd_x, dEnd_y)
1411
                        '    objInputs.AddPoint(dStart_x, dStart_y)
1412
                        'ElseIf iConnType = 4 Then
1413
                        '    objInputs.AddLocatedTarget(dStart_x, dStart_y)
1414
                        '    objInputs.AddPoint(dEnd_x, dEnd_y)
1415
                        'Else
1416
                        '    objInputs.AddPoint(dStart_x, dStart_y)
1417
                        '    objInputs.AddPoint(dEnd_x, dEnd_y)
1418
                        'End If
1419
                        objInputs.AddPoint(dStart_x, dStart_y)
1420
                        objInputs.AddPoint(dEnd_x, dEnd_y)
1421
                        AddModelingLine(dStart_x, dStart_y, dEnd_x, dEnd_y)
1422
                        objItem = _Placement.PIDCreateItem(sSystempath)
1423
                        _iPipecnt = _iPipecnt + 1
1424
                        SetListBoxItems(ListBox_Result, "Place PipeLine..(" & dOriginalStart_x & "," & dOriginalStart_y & ") - (" & dOriginalEnd_x & "," & dOriginalEnd_y & ").." & _iPipecnt & " count ")
1425
                        objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
1426
                        oPipeRun = oDatasource.GetPipeRun(objConnector.ModelItemID)
1427
                        oPipeRun.Attributes("FlowDirection").Value = "End 1 is upstream (Inlet)"
1428
                        If oAttributeRow.Length > 0 Then
1429
                            For Each oAttribute In oAttributeRow
1430
                                Try
1431
                                    Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1432
                                    Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1433
                                    Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1434
                                    oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
1435
                                Catch ex As Exception
1436

    
1437
                                End Try
1438

    
1439

    
1440
                            Next
1441
                            oPipeRun.Commit()
1442
                        End If
1443
                        'Flow Direction 
1444
                        'Dim sFlowDirectionPath As String = GetDataFromMappingDB(_XML_CATEGORY_FLOWDIRECITON, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
1445
                        'Dim dFlowDirectionAngle As Double = 0.0
1446
                        'If dStart_y <> dEnd_y Then
1447
                        '    If dStart_y > dEnd_y Then
1448
                        '        dFlowDirectionAngle = -1.57
1449
                        '    Else
1450
                        '        dFlowDirectionAngle = 1.57
1451
                        '    End If
1452
                        'End If
1453
                        'If dStart_x <> dEnd_x Then
1454
                        '    If dStart_x > dEnd_x Then
1455
                        '        dFlowDirectionAngle = 3.14
1456
                        '    Else
1457
                        '        dFlowDirectionAngle = 0
1458
                        '    End If
1459
                        'End If
1460

    
1461
                        '_Placement.PIDPlaceSymbol(sFlowDirectionPath, dEnd_x, dEnd_y, , dFlowDirectionAngle)
1462
                    End If
1463
                End If
1464

    
1465

    
1466
            End If
1467
            Return oPipeRun
1468
        Catch ex As Exception
1469
            Return Nothing
1470
        End Try
1471
    End Function
1472

    
1473
    Private Sub AddModelingLine(ByVal dStart_x As Double, ByVal dStart_y As Double, ByVal dEnd_x As Double, ByVal dEnd_y As Double)
1474
        Dim oAddRow = _DrawLine_Dt.NewRow()
1475
        oAddRow(_XML_LINE_STARTPOINT_X) = dStart_x
1476
        oAddRow(_XML_LINE_STARTPOINT_Y) = dStart_y
1477
        oAddRow(_XML_LINE_ENDPOINT_X) = dEnd_x
1478
        oAddRow(_XML_LINE_ENDPOINT_Y) = dEnd_y
1479
        _DrawLine_Dt.Rows.Add(oAddRow)
1480
    End Sub
1481

    
1482

    
1483
    Private Function ModelingLine(ByVal dStart_x As Double, ByVal dStart_y As Double, ByVal dEnd_x As Double, ByVal dEnd_y As Double) As Integer
1484
        Dim oFindRows_1 As DataRow() = _DrawLine_Dt.Select("start_x = '" & dStart_x & "' and start_y = '" & dStart_y & "'")
1485

    
1486
        Dim oFindRows_2 As DataRow() = _DrawLine_Dt.Select("end_x = '" & dEnd_x & "' and end_y = '" & dEnd_y & "'")
1487

    
1488
        Dim oFindRows_3 As DataRow() = _DrawLine_Dt.Select("start_x = '" & dEnd_x & "' and start_y = '" & dEnd_y & "'")
1489

    
1490
        Dim oFindRows_4 As DataRow() = _DrawLine_Dt.Select("end_x = '" & dStart_x & "' and end_y = '" & dStart_y & "'")
1491

    
1492
        If oFindRows_1.Length > 0 Then
1493
            Return 1
1494
        ElseIf oFindRows_2.Length > 0 Then
1495
            Return 2
1496
        ElseIf oFindRows_3.Length > 0 Then
1497
            Return 3
1498
        ElseIf oFindRows_4.Length > 0 Then
1499
            Return 4
1500
        Else
1501
            Return 0
1502
        End If
1503
    End Function
1504

    
1505
    Private Function FindConnectionPoint(ByVal dX As Double, ByVal dY As Double)
1506

    
1507

    
1508
    End Function
1509

    
1510

    
1511
    Private Function DrawSymbol(ByVal sUid As String, ByVal sLineNoUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable, ByVal oLine_Dt As DataTable) As Boolean
1512
        Try
1513

    
1514
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1515
            Dim oAttributeRow() As DataRow
1516
            If oAttribute_Dt.Rows.Count > 0 Then
1517
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1518
            End If
1519

    
1520
            If oSymbolRow.Length > 0 Then
1521
                Dim oDatasource As Object = _Placement.PIDDataSource
1522
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1523
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1524
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1525
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1526
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1527
                Dim dAngle As Double = 0.0
1528
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1529
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1530
                End If
1531

    
1532
                Dim objSymbol As LMSymbol
1533
                Dim dLocationX As Double = 0.0
1534
                Dim dLocationY As Double = 0.0
1535
                Dim dX As Double = 0.0
1536
                Dim dY As Double = 0.0
1537

    
1538
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1539
                    dX = dLocationX
1540
                    dY = dLocationY
1541
                    If sSymbolCompType = "" Or sSymbolCompType = "Piping OPC's" Then
1542
                        FindConnectionLine(oLine_Dt, dX, dY)
1543
                    End If
1544

    
1545
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1546
                        Dim oInstrument As LMInstrument
1547
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
1548
                        _iInstrumentcnt = _iInstrumentcnt + 1
1549
                        objSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1550
                        SetListBoxItems(ListBox_Result, "Place Instrument..(" & dLocationX & "," & dLocationY & ")..." & _iInstrumentcnt & " count ")
1551
                        oInstrument = oDatasource.GetInstrument(objSymbol.ModelItemID)
1552
                        Try
1553
                            If oAttributeRow.Length > 0 Then
1554
                                For Each oAttribute In oAttributeRow
1555
                                    Try
1556
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1557
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1558
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1559
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
1560
                                    Catch ex As Exception
1561

    
1562
                                    End Try
1563

    
1564
                                Next
1565
                                oInstrument.Commit()
1566
                            End If
1567
                        Catch ex As Exception
1568
                        End Try
1569
                    ElseIf sSymbolCompType.ToUpper() = _DB_FITTINGS.ToUpper() Then
1570
                        _iValvecnt = _iValvecnt + 1
1571
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1572
                        SetListBoxItems(ListBox_Result, "Place Valve..(" & dLocationX & "," & dLocationY & ")..." & _iValvecnt & " count ")
1573

    
1574
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_FITTINGS.ToUpper() Then
1575
                        _iFittingcnt = _iFittingcnt + 1
1576
                        If sSystemPath.Contains(",") Then
1577

    
1578
                            Dim sDuplicatePath As String() = sSystemPath.Split(",")
1579
                            Dim sMainSymbol As String = ""
1580
                            Dim sSubSymbol As String = ""
1581
                            For Each sPath In sDuplicatePath
1582
                                If sMainSymbol = "" Then
1583
                                    sMainSymbol = sPath.Replace(vbLf, "")
1584
                                Else
1585
                                    sSubSymbol = sPath.Replace(vbLf, "")
1586
                                End If
1587
                            Next
1588
                            Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1589
                            Dim dConnpos_x As Double = 0.0
1590
                            Dim dConnpos_y As Double = 0.0
1591
                            _Placement.PIDConnectPointLocation(oSymbolObj, 2, dConnpos_x, dConnpos_y)
1592
                            '   _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y, dAngle, TargetItem:=oSymbolObj.AsLMRepresentation)
1593
                            _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y,, dAngle)
1594

    
1595
                        Else
1596
                            _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1597
                        End If
1598

    
1599

    
1600
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1601
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() And sClass.ToUpper() = _SYMBOL_ACTUATORS.ToUpper() Then
1602
                        _iFittingcnt = _iFittingcnt + 1
1603
                        Dim sDuplicatePath As String() = sSystemPath.Split(",")
1604
                        Dim sMainSymbol As String = ""
1605
                        Dim sSubSymbol As String = ""
1606
                        For Each sPath In sDuplicatePath
1607
                            If sMainSymbol = "" Then
1608
                                sMainSymbol = sPath.Replace(vbLf, "")
1609
                            Else
1610
                                sSubSymbol = sPath.Replace(vbLf, "")
1611
                            End If
1612
                        Next
1613
                        Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1614
                        Dim dSymbolpos_x As Double = oSymbolObj.XCoordinate
1615
                        Dim dSymbolpos_y As Double = oSymbolObj.YCoordinate
1616
                        _Placement.PIDPlaceSymbol(sSubSymbol, dSymbolpos_x, dSymbolpos_y, , dAngle, TargetItem:=oSymbolObj.AsLMAItem)
1617

    
1618
                    Else
1619
                        _iFittingcnt = _iFittingcnt + 1
1620
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1621
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1622
                        End If
1623

    
1624
                    End If
1625

    
1626
                End If
1627

    
1628
        Catch ex As Exception
1629
            Return False
1630
        End Try
1631
    End Function
1632

    
1633

    
1634
    Private Sub FindConnectionLine(ByVal oLine_Dt As DataTable, ByRef dx As Double, ByRef dy As Double)
1635

    
1636
        Try
1637
            For Each oRow In oLine_Dt.Rows
1638
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1639
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1640
                Dim d기준s_x As Double = 0
1641
                Dim d기준s_y As Double = 0
1642
                Dim d기준e_x As Double = 0
1643
                Dim d기준e_y As Double = 0
1644
                ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1645
                ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1646
                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
1647
                    dx = d기준s_x
1648
                    dy = d기준s_y
1649
                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
1650
                    dx = d기준e_x
1651
                    dy = d기준e_y
1652
                End If
1653
            Next
1654
        Catch ex As Exception
1655
        End Try
1656
    End Sub
1657

    
1658

    
1659
    Dim _라인보정기준값 As Integer = 10
1660

    
1661
    Private Function 라인보정(ByRef oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1662
                                      ByRef dex As Double, ByRef dey As Double)
1663
        Try
1664
            Dim bCheck라인 As Boolean = False
1665
            '일치하는 Line 찾기
1666
            For Each oRow In oLine_Dt.Rows
1667
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1668
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1669
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1670
                If sBUid <> sUid Then
1671
                    Dim d기준s_x As Double = 0
1672
                    Dim d기준s_y As Double = 0
1673
                    Dim d기준e_x As Double = 0
1674
                    Dim d기준e_y As Double = 0
1675
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1676
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1677

    
1678
                    If (dsx = d기준s_x And dsy = d기준s_y) Or (dsx = d기준e_x And dsy = d기준e_y) Or
1679
                       (dex = d기준s_x And dey = d기준s_y) Or (dex = d기준e_x And dey = d기준e_y) Then
1680
                        bCheck라인 = True
1681
                    End If
1682
                End If
1683
            Next
1684

    
1685
            If bCheck라인 = False Then
1686
                For Each oRow In oLine_Dt.Rows
1687
                    Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1688
                    Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1689
                    Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1690
                    If sBUid <> sUid Then
1691
                        Dim d기준s_x As Double = 0
1692
                        Dim d기준s_y As Double = 0
1693
                        Dim d기준e_x As Double = 0
1694
                        Dim d기준e_y As Double = 0
1695
                        ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1696
                        ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1697
                        If ((dsx - _라인보정기준값 <= d기준s_x And dsx + _라인보정기준값 >= d기준s_x) And (dsy - _라인보정기준값 <= d기준s_y And dsy + _라인보정기준값 >= d기준s_y)) Then
1698
                            oRow(_XML_LINE_STARTPOINT) = dsx & "," & dsy
1699
                            bCheck라인 = True
1700
                            Exit For
1701
                        ElseIf ((dsx - _라인보정기준값 <= d기준e_x And dsx + _라인보정기준값 >= d기준e_x) And (dsy - _라인보정기준값 <= d기준e_y And dsy + _라인보정기준값 >= d기준e_y)) Then
1702
                            oRow(_XML_LINE_ENDPOINT) = dsx & "," & dsy
1703
                            bCheck라인 = True
1704
                            Exit For
1705
                        ElseIf ((dex - _라인보정기준값 <= d기준s_x And dex + _라인보정기준값 >= d기준s_x) And (dey - _라인보정기준값 <= d기준s_y And dey + _라인보정기준값 >= d기준s_y)) Then
1706
                            oRow(_XML_LINE_STARTPOINT) = dex & "," & dey
1707
                            bCheck라인 = True
1708
                            Exit For
1709
                        ElseIf ((dex - _라인보정기준값 <= d기준e_x And dex + _라인보정기준값 >= d기준e_x) And (dey - _라인보정기준값 <= d기준e_y And dey + _라인보정기준값 >= d기준e_y)) Then
1710
                            oRow(_XML_LINE_ENDPOINT) = dex & "," & dey
1711
                            bCheck라인 = True
1712
                            Exit For
1713
                        End If
1714

    
1715
                    End If
1716
                Next
1717
            End If
1718

    
1719
            Return bCheck라인
1720
        Catch ex As Exception
1721
            Return False
1722
        End Try
1723

    
1724

    
1725
    End Function
1726

    
1727
    Private Function FindOverlapLine(ByVal oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1728
                                      ByRef dex As Double, ByRef dey As Double)
1729
        Try
1730
            Dim bCheckOverlap As Boolean = False
1731
            For Each oRow In oLine_Dt.Rows
1732
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1733
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1734
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1735
                If sBUid <> sUid Then
1736
                    Dim d기준s_x As Double = 0
1737
                    Dim d기준s_y As Double = 0
1738
                    Dim d기준e_x As Double = 0
1739
                    Dim d기준e_y As Double = 0
1740
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1741
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1742
                    If (d기준s_x <= dsx And d기준e_x >= dex And
1743
                        d기준s_y <= dsy And d기준e_y >= dey) Then
1744
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1745
                        If dsy - d기준s_y > d기준e_y - dey Then
1746
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1747
                            If dResultCalc < 10 Then
1748
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1749
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1750
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1751
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1752
                                If dCalcStartY = 0 Then
1753
                                    dey = d기준e_y
1754
                                Else
1755
                                    dey = dCalcStartY
1756
                                End If
1757
                            End If
1758
                        Else
1759
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1760
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1761
                            If dResultCalc < 10 Then
1762
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1763
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1764
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1765
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1766
                                If dCalcStartY = 0 Then
1767
                                    dsy = d기준s_y
1768
                                Else
1769
                                    dsy = dCalcStartY
1770
                                End If
1771
                            End If
1772
                        End If
1773
                        bCheckOverlap = True
1774
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1775
                            d기준s_y <= dey And d기준e_y >= dsy Then
1776
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1777
                        If dey - d기준s_y > d기준e_y - dsy Then
1778
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1779
                            If dResultCalc < 10 Then
1780
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1781
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1782
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1783
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1784
                                If dCalcStartY = 0 Then
1785
                                    dsy = d기준e_y
1786
                                Else
1787
                                    dsy = dCalcStartY
1788
                                End If
1789

    
1790
                            End If
1791
                            '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1792
                        Else
1793
                            '  Dim dResultCalc As Double = (Math.Abs((dsy - d기준s_y)) / Math.Abs((d기준e_y - dey))) * 100
1794
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1795
                            If dResultCalc < 10 Then
1796
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1797
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1798
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1799
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1800
                                If dCalcStartY = 0 Then
1801
                                    dey = d기준e_y
1802
                                Else
1803
                                    dey = dCalcStartY
1804
                                End If
1805
                            End If
1806
                        End If
1807
                        bCheckOverlap = True
1808
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1809
                            d기준s_y <= dey And d기준e_y >= dsy Then
1810

    
1811
                        If dsx - d기준s_x > d기준e_x - dex Then
1812
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1813
                            If dResultCalc < 10 Then
1814
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1815
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1816
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1817
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1818
                                If dCalcStartX = 0 Then
1819
                                    dex = d기준e_x
1820
                                Else
1821
                                    dex = dCalcStartX
1822
                                End If
1823
                            End If
1824
                        Else
1825
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1826
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1827
                            If dResultCalc < 10 Then
1828
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1829
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1830
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1831
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1832
                                If dCalcStartX = 0 Then
1833
                                    dsx = d기준s_x
1834
                                Else
1835
                                    dsx = dCalcStartX
1836
                                End If
1837
                            End If
1838
                        End If
1839
                        bCheckOverlap = True
1840
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1841
                            d기준s_y <= dey And d기준e_y >= dsy Then
1842

    
1843
                        If dex - d기준s_x > d기준e_x - dsx Then
1844
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1845
                            If dResultCalc < 10 Then
1846
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1847
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1848
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1849
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1850
                                If dCalcStartX = 0 Then
1851
                                    dsx = d기준e_x
1852
                                Else
1853
                                    dsx = dCalcStartX
1854
                                End If
1855
                            End If
1856
                        Else
1857
                            ' Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1858
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1859
                            If dResultCalc < 10 Then
1860
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1861
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1862
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1863
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1864
                                If dCalcStartX = 0 Then
1865
                                    dex = d기준s_x
1866
                                Else
1867
                                    dex = dCalcStartX
1868
                                End If
1869
                            End If
1870

    
1871
                        End If
1872
                        bCheckOverlap = True
1873
                    End If
1874
                End If
1875
            Next
1876
            Return bCheckOverlap
1877
        Catch ex As Exception
1878
            Return False
1879
        End Try
1880
    End Function
1881

    
1882
    Private Sub CalcSperateLine(ByRef dStartX As Double, ByRef dStartY As Double,
1883
                                      ByRef dEndX As Double, ByRef dEndY As Double)
1884
        Try
1885
            Dim dRange As Double = 1 'Line 전체 길이의 10%씩 늘이기
1886
            If Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
1887
                Dim dCalc_x As Double = Math.Abs(dStartX - dEndX) * 0.1
1888
                If dStartX > dEndX Then
1889
                    dStartX = dStartX + dCalc_x
1890
                    dEndX = dEndX - dCalc_x
1891
                Else
1892
                    dEndX = dEndX + dCalc_x
1893
                    dStartX = dStartX - dCalc_x
1894
                End If
1895
            Else
1896
                Dim dCalc_y As Double = Math.Abs(dStartY - dEndY) * 0.1
1897
                If dStartY > dEndY Then
1898
                    dStartY = dStartY + dCalc_y
1899
                    dEndY = dEndY - dCalc_y
1900
                Else
1901
                    dEndY = dEndY + dCalc_y
1902
                    dStartY = dStartY - dCalc_y
1903
                End If
1904
            End If
1905

    
1906

    
1907

    
1908
        Catch ex As Exception
1909

    
1910
        End Try
1911

    
1912

    
1913
    End Sub
1914

    
1915
    Private Function DrawLineNo(ByVal oPiperun As LMPipeRun, ByVal CLine_No As Line_no) As Boolean
1916
        Try
1917
            Dim oDatasource As Object = _Placement.PIDDataSource
1918
            Dim sLocation = CLine_No.Location
1919
            Dim dLocationx As Double = 0.0
1920
            Dim dLocationy As Double = 0.0
1921

    
1922
            Dim dX As Double = 0.0
1923
            Dim dY As Double = 0.0
1924
            If ConvertPointBystring(sLocation, dLocationx, dLocationy) Then
1925
                dX = dLocationx
1926
                dY = dLocationy
1927
                ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1928
                Dim dLineNoLocation(2) As Double
1929
                dLineNoLocation(1) = dX
1930
                dLineNoLocation(2) = dY
1931
                'Label
1932
                Dim sSystemPath As String = CLine_No.SystemPath
1933
                Dim dAngle As Double = CLine_No.Angle
1934
                Dim labelpersist As LMLabelPersist
1935

    
1936
                For Each representation In oPiperun.Representations
1937
                    If representation.RepresentationType = "Connector" Then
1938
                        labelpersist = _Placement.PIDPlaceLabel(sSystemPath,
1939
                        dLineNoLocation,, dAngle, LabeledItem:=representation)
1940
                        _iPipeLineNocnt = _iPipeLineNocnt + 1
1941
                        SetListBoxItems(ListBox_Result, "Place PipeLineNo Label..(" & dLocationx & "," & dLocationy & ")..." & _iPipeLineNocnt & " count ")
1942
                    End If
1943
                Next
1944
                Return True
1945
            Else
1946
                Return False
1947
            End If
1948

    
1949
        Catch ex As Exception
1950
            Return False
1951
        End Try
1952
    End Function
1953

    
1954

    
1955
    Private Sub InitItemCount()
1956
        _iPipeLineNocnt = 0
1957
        _iPipecnt = 0
1958
        _iFittingcnt = 0
1959
        _iValvecnt = 0
1960
        _iInstrumentcnt = 0
1961
        _iEquipmentcnt = 0
1962
        _iNozzlecnt = 0
1963
    End Sub
1964

    
1965

    
1966

    
1967
    Private Function AutoModeling() As Boolean
1968
        Try
1969
            _CompleteConvert = False
1970
            SetListBoxItems(ListBox_Result, " Auto converting 시작....")
1971
            Dim oDwg_Dt As DataTable = LoadAllDrawing()
1972
            For Each oDrwing As TreeNode In Tree_Result.Nodes
1973
                For Each oDwgNode As TreeNode In oDrwing.Nodes
1974
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
1975
                    Dim CDrawing As Drawing = GetDrawing(sDwgName)
1976
                    If CDrawing IsNot Nothing Then
1977
                        If OpenSPPID(oDwg_Dt, oDwgNode.Text) Then
1978
                            InitItemCount()
1979
                            Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
1980
                            Dim iLineNoCount As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
1981
                            SetListBoxItems(ListBox_Result, "Place " & CDrawing.DwgName & "....")
1982
                            For Each oNode As TreeNode In oDwgNode.Nodes
1983
                                Dim iItemcnt As Integer = 0
1984
                                Dim sNodeUid As String = oNode.Name
1985
                                If sNodeUid <> "PipeLineNo" Then
1986
                                    Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
1987
                                    If CLineNo IsNot Nothing Then
1988
                                        Dim oPipeRun As LMPipeRun = Nothing
1989
                                        Dim oLine_Dt As DataTable = CLineNo.Dt_Line
1990
                                        Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
1991
                                        Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
1992
                                        Dim oDrawLinenoLabel As Boolean = False
1993
                                        For Each oLineNode As TreeNode In oNode.Nodes
1994
                                            iItemcnt = iItemcnt + 1
1995
                                            Dim sLineUid As String = oLineNode.Name
1996
                                            If oLineNode.Checked Then
1997
                                                Dim sUid As String = oLineNode.Name
1998
                                                If oLine_Dt.Select("[" & _XML_LINE_UID & "]= '" & sUid & "'").Length = 1 Then
1999
                                                    oPipeRun = DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt)
2000
                                                End If
2001
                                                If oDrawLinenoLabel = False Then
2002
                                                    DrawLineNo(oPipeRun, CLineNo)
2003
                                                End If
2004
                                                oDrawLinenoLabel = True
2005
                                            End If
2006
                                            'If oNode.Nodes.Count - 1 = iItemcnt And oDrawLinenoLabel Then
2007
                                            '    DrawLineNo(oPipeRun, CLineNo)
2008
                                            'End If
2009
                                        Next
2010
                                        For Each oSymbolNode As TreeNode In oNode.Nodes
2011
                                            If oSymbolNode.Checked Then
2012
                                                Dim sUid As String = oSymbolNode.Name
2013
                                                If oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sUid & "'").Length = 1 Then
2014
                                                    DrawSymbol(sUid, sNodeUid, oSymbol_Dt, oAttribute_Dt, CLineNo.Dt_Line)
2015
                                                End If
2016
                                            End If
2017
                                        Next
2018
                                        iLineNoCount = iLineNoCount + 1
2019
                                    End If
2020
                                    Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
2021
                                    If CEqpNo IsNot Nothing Then
2022
                                        Dim oSymbol_Dt As DataTable = CEqpNo.Dt_Equipment
2023
                                        Dim oAttribute_Dt As DataTable = CEqpNo.Dt_Attribute
2024
                                        For Each oSymbolNode As TreeNode In oNode.Nodes
2025
                                            If oSymbolNode.Checked Then
2026
                                                Dim sUid As String = oSymbolNode.Name
2027
                                                DrawSymbol(sUid, sNodeUid, oSymbol_Dt, oAttribute_Dt, CLineNo.Dt_Line)
2028
                                            End If
2029
                                        Next
2030
                                    End If
2031
                                Else
2032
                                    Dim oDrawLinenoLabel As Boolean = False
2033
                                    For Each oLineNode As TreeNode In oNode.Nodes
2034
                                        Dim CLineNo As Line_no = GetOnlyPipeLineNo(CDrawing, oLineNode.Name)
2035
                                        Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2036
                                        Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2037
                                        Dim sLineUid As String = oLineNode.Name
2038
                                        If oLineNode.Checked Then
2039
                                            Dim sUid As String = oLineNode.Name
2040
                                            DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt)
2041
                                        End If
2042
                                    Next
2043
                                End If
2044
                            Next
2045
                        End If
2046
                    End If
2047
                Next
2048
            Next
2049
            SetProgressbar(ProgressBar_Status, 100)
2050
            SetListBoxItems(ListBox_Result, " Auto converting 완료")
2051
            _CompleteConvert = True
2052
            Return True
2053
        Catch ex As Exception
2054
            Return False
2055
        End Try
2056
    End Function
2057

    
2058

    
2059

    
2060
    Private Sub ThreadConvert()
2061
        If _DrawingsList IsNot Nothing Then
2062
            If _DrawingsList.Count > 0 Then
2063
                AutoModeling()
2064
            End If
2065
        End If
2066
    End Sub
2067

    
2068
    Private Sub ThreadOPCRemove()
2069
        While _CompleteConvert = False
2070
            Dim oFindOPC As New FindOpc
2071
            oFindOPC.RemoveOPCDlg()
2072
        End While
2073

    
2074
    End Sub
2075

    
2076

    
2077
    Private Function OpenDrawing(ByVal oDt As DataTable, ByVal sDwgName As String) As String
2078
        Dim oRows As DataRow() = oDt.Select("[Name] = '" & sDwgName & "'")
2079
        Dim oPath As String = ""
2080
        If oRows.Length > 0 Then
2081
            oPath = oRows(0).Item("Path").ToString()
2082
        End If
2083
        Return oPath
2084
    End Function
2085

    
2086
    Private Sub LoadXmlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LoadXmlToolStripMenuItem.Click
2087
        If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
2088
            LoadDB()
2089
            LoadXmlItem(FolderBrowserDialog1.SelectedPath)
2090
        End If
2091
    End Sub
2092
    Private Sub LoadXmlItem(ByVal sFolderPath As String)
2093
        _DrawingsList = New List(Of Drawing)
2094
        Dim sfileEntries As String() = Directory.GetFiles(sFolderPath)
2095
        If Tree_Result.Nodes.Count > 0 Then
2096
            Tree_Result.Nodes(0).Nodes.Clear()
2097
            For Each sfileName In sfileEntries
2098
                Dim sExtension As String = Path.GetExtension(sfileName)
2099
                If sExtension = ".xml" Then
2100
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(sfileName)
2101
                    Dim sDwgPath As String = sfileName
2102
                    Dim oNode As TreeNode = Tree_Result.Nodes(0).Nodes.Add(sDwgPath, sDwgName, 15)
2103
                    Dim oDwg As Drawing = AddSymbolItem(sDwgPath, oNode)
2104
                    _DrawingsList.Add(oDwg)
2105
                End If
2106
            Next
2107
            Tree_Result.Nodes(0).Expand()
2108
        End If
2109
    End Sub
2110

    
2111

    
2112
    ''' <summary>
2113
    '''  XML Tree 구조 생성 
2114
    ''' </summary>
2115
    ''' <param name="sDwgPath"></param>
2116
    Private Function AddSymbolItem(ByVal sDwgPath As String, ByVal oParentNode As TreeNode) As Drawing
2117
        Dim oDwg_Ds As Drawing = LoadSymbolInXml(sDwgPath)
2118
        If oDwg_Ds IsNot Nothing Then
2119
            Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
2120

    
2121
            Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
2122
            Dim oPipe As Boolean = False
2123
            Dim oFitting As Boolean = False
2124
            Dim oOnlyPipesNode As TreeNode
2125
            Dim oOnlyFittingsNode As TreeNode
2126
            'PipeLine 구분
2127

    
2128
            For Each oLinelist In oLineLists
2129
                Dim sLineNoUid As String = oLinelist.Uid
2130
                Dim sLineNo As String = oLinelist.Text
2131
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
2132
                For Each oLineRow In oLinelist.Dt_Line.Rows
2133
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
2134
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
2135
                    oPipeNode.Tag = sLineNoUid
2136
                Next
2137
                For Each oSymbolRow In oLinelist.Dt_Symbol.Rows
2138
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2139
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2140
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
2141
                    oSymbolNode.Tag = sLineNoUid
2142
                Next
2143
                'If sLineNo <> "PipeLineNo" Then
2144

    
2145
                'Else
2146
                '    'If oPipe = False Then
2147
                '    '    oOnlyPipesNode = oParentNode.Nodes.Add("PipeLineNo", "PipeLineNo")
2148
                '    '    oPipe = True
2149
                '    'End If
2150
                '    'For Each oLineRow In oLinelist.Dt_Line.Rows
2151
                '    '    Dim sLineUid As String = oLineRow(_XML_SYMBOL_UID)
2152
                '    '    Dim oPipeNode As TreeNode = oOnlyPipesNode.Nodes.Add(sLineUid, "Pipe")
2153
                '    '    oPipeNode.Tag = sLineNoUid
2154
                '    'Next
2155

    
2156

    
2157

    
2158

    
2159
                'End If
2160
            Next
2161
            'For Each oSymbolRow In _TempSymbolDt.Rows
2162
            '    If oFitting = False Then
2163
            '        oOnlyFittingsNode = oParentNode.Nodes.Add("Symbols", "Symbols")
2164
            '        oFitting = True
2165
            '    End If
2166
            '    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2167
            '    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2168
            '    Dim oSymbolNode As TreeNode = oOnlyFittingsNode.Nodes.Add(sSymbolUid, sSymbolName)
2169
            '    oSymbolNode.Tag = sSymbolUid
2170
            'Next
2171
            For Each oEqplist In oEqpLists
2172
                Dim sEqpUid As String = oEqplist.Uid
2173
                Dim sEqpNo As String = "EQUIPMENT"
2174
                Dim oEqpNode As TreeNode = oParentNode.Nodes.Add(sEqpUid, sEqpNo)
2175

    
2176

    
2177
                For Each oSymbolRow In oEqplist.Dt_Equipment.Rows
2178
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2179
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2180
                    Dim oSymbolNode As TreeNode = oEqpNode.Nodes.Add(sSymbolUid, sSymbolName)
2181
                    oSymbolNode.Tag = sEqpUid
2182
                Next
2183
            Next
2184
        End If
2185

    
2186
        Return oDwg_Ds
2187
    End Function
2188
    Private Sub Tree_Result_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles Tree_Result.AfterCheck
2189
        If e.Node.Checked = True Then
2190
            For Each oNode As TreeNode In e.Node.Nodes
2191
                oNode.Checked = True
2192
            Next
2193
        Else
2194
            For Each oNode As TreeNode In e.Node.Nodes
2195
                oNode.Checked = False
2196
            Next
2197
        End If
2198
    End Sub
2199

    
2200
    Private Sub Btn_Setting_Click(sender As Object, e As EventArgs) Handles Btn_Setting.Click
2201
        Dim oSettings As Settings = New Settings()
2202
        oSettings.ShowDialog()
2203
    End Sub
2204

    
2205
    Private Sub Btn_TestNozzle_Click(sender As Object, e As EventArgs) Handles Btn_TestNozzle.Click
2206

    
2207
        Dim sVessel_ID As String = "841D5E640AE5421B9A017DDC2E87FF11"
2208
        Dim objVessel As LMVessel
2209
        objVessel = _Placement.PIDDataSource.GetVessel(sVessel_ID)
2210
        Dim oVesselLocation As LMLocations = objVessel.Locations
2211
        Dim symVessel As LMSymbol = _Placement.PIDDataSource.GetSymbol(objVessel.Representations.Nth(1).Id)
2212
        Dim XCoordinate As String = symVessel.Attributes("XCoordinate").Value
2213
        Dim YCoordinate As String = symVessel.Attributes("YCoordinate").Value
2214
        symVessel.Attributes("XCoordinate").Value = XCoordinate + 0.01
2215
        symVessel.Attributes("YCoordinate").Value = YCoordinate + 0.01
2216
        symVessel.Commit()
2217
        Dim sValve_ID As String = "DB7B0CA8A2664A6BA7A9615764BA62B0"
2218
        Dim objValve As LMSymbol
2219
        Dim objValves As LMPipingComp = _Placement.PIDDataSource.GetPipingComp(sValve_ID)
2220

    
2221
        objValve = _Placement.PIDDataSource.GetSymbol(objValves.Representations.Nth(1).Id)
2222
        objValve.Commit()
2223
        Dim dVesselX As Double = XCoordinate
2224
        Dim dVesselY As Double = YCoordinate
2225
        Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
2226

    
2227
        _Placement.PIDConnectPointLocation(objValve, 1, X1, Y1)
2228

    
2229
        _Placement.PIDConnectPointLocation(objValve, 2, X2, Y2)
2230

    
2231
        Dim nozzlename As String = "\Equipment Components\Nozzles\Flanged Nozzle.sym"
2232
        Dim dCalc_x As Double = 0
2233
        Dim dCalc_y As Double = 0
2234

    
2235
        If dVesselX - X2 > 0 Then
2236
            dCalc_x = dVesselX - (dVesselX - X2)
2237
        Else
2238
            dCalc_x = dVesselX + (X2 - dVesselX)
2239
        End If
2240
        If dVesselY - Y2 > 0 Then
2241
            dCalc_y = dVesselY - (dVesselY - Y2)
2242
        Else
2243
            dCalc_y = dVesselY + (Y2 - dVesselY)
2244
        End If
2245

    
2246
        Dim objNozzle As LMSymbol = _Placement.PIDPlaceSymbol(nozzlename, dCalc_x, dCalc_y,
2247
            TargetItem:=symVessel.AsLMRepresentation)
2248

    
2249
        Dim blnSuccess As Boolean = _Placement.PIDConnectPointLocation(objNozzle, 1, X1, Y1)
2250
        blnSuccess = _Placement.PIDConnectPointLocation(objNozzle, 2, X1, Y1)
2251

    
2252
        objValve = _Placement.PIDPlaceSymbol(objValve.FileName, X1, Y1, ExistingItem:=objValve.AsLMAItem,
2253
          TargetItem:=objNozzle.AsLMRepresentation)
2254

    
2255

    
2256

    
2257
    End Sub
2258

    
2259
    Private Sub Btn_SymbolLibrary_Click(sender As Object, e As EventArgs) Handles Btn_SymbolLibrary.Click
2260
        Dim oMapping As New Mapping(_PIDSymbol_DB)
2261
        oMapping.Show()
2262
    End Sub
2263
End Class
2264

    
2265

    
2266
Public Class DrawingInfo
2267
    Public mDrawingName As String
2268
    Public mSpID As String
2269
    Public mPath As String
2270
End Class
2271

    
2272

    
2273

    
2274

    
2275

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