프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

hytos / DTI_PID / SPPIDConverter / Main.vb @ 37fe970d

이력 | 보기 | 이력해설 | 다운로드 (110 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.89 '0.695 '1 '
19
    Dim _DWG_Y = 0.61 '0.585 '0.8 '
20
    'Dim _DWG_X = 0.842 '0.695 '1 '
21
    'Dim _DWG_Y = 0.614 '0.585 '0.8 '
22
    Dim _IMG_X = 0
23
    Dim _IMG_Y = 0
24

    
25
    Dim _Unit As String
26

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

    
32
    Private _Main_trd As Thread
33
    Private _Opc_trd As Thread
34

    
35
    Private _CompleteConvert As Boolean = False
36

    
37
    Private _DrawingsList As List(Of Drawing)
38

    
39

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

    
48
    Dim _Gembox As New CGembox()
49

    
50

    
51
    Private _allItem As Integer
52
    Private _Itemcnt As Integer
53
    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
54
        LoadDB()
55
    End Sub
56

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

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

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

    
88
    'Public Sub New()
89

    
90
    '    '  mDataSource.ProjectNumber = m_Information.InfoSite.SiteName
91
    '    '   mDataSource.SiteNode = m_Information.InfoProject.ProjectINI
92
    '    'm_Information = SPPIDClass.Information.GetInstance()
93

    
94
    '    'If m_Information.InfoProject.ProjectVersion = SPPIDClass.InfoProject.SPPID_43 Then
95
    '    '    'SPPID4.3용
96
    '    '    mDataSource.ProjectNumber = m_Information.InfoSite.SiteName
97
    '    'Else
98
    '    '    'SPPID2007, SPPID2009용
99
    '    '    mDataSource.ProjectNumber = m_Information.InfoSite.SiteName & "!" & m_Information.InfoSite.SiteName
100
    '    'End If
101

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

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

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

    
158

    
159
    Public Function GetDrawingName(ByVal itemType As String, ByVal itemName As String) As DrawingInfo
160

    
161
        Dim objFilter As Object
162
        objFilter = CreateObject("Llama.LMAFilter", "")
163

    
164
        Dim drawingInfo As DrawingInfo
165
        drawingInfo = New DrawingInfo
166

    
167
        objFilter.Criteria.AddNew("FirstOne")
168
        objFilter.Criteria.Item("FirstOne").SourceAttributeName = "SP_ID"
169
        objFilter.Critedkria.Item("FirstOne").ValueAttribute = itemName
170

    
171
        objFilter.Criteria.Item("FirstOne").Operator = "="
172
        objFilter.Criteria.AddNew("SecondOne")
173
        objFilter.Criteria.Item("SecondOne").SourceAttributeName = "ItemStatus"
174
        objFilter.Criteria.Item("SecondOne").ValueAttribute = 1
175
        objFilter.Criteria.Item("SecondOne").Operator = "="
176
        objFilter.Criteria.Item("SecondOne").Conjunctive = -1
177
        objFilter.ItemType = itemType
178

    
179
        Dim PlantItems As Object
180
        PlantItems = CreateObject("Llama.LMPlantItems", "")
181
        PlantItems.Collect(mDataSource, Filter:=objFilter)
182

    
183
        If PlantItems.Count = 0 Then
184
            drawingInfo.mSpID = "PlantStockpile"
185
        End If
186

    
187
        For Each PlantItem In PlantItems
188

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

    
197
            End Try
198

    
199
            'End If
200

    
201
        Next
202

    
203
        Return drawingInfo
204

    
205
    End Function
206

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

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

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

    
279
            For Each objDrawing In objDrawings
280
                If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
281
                    objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(sPath)
282
                    If Not objPIDADrawing Is Nothing Then
283
                        objPIDADrawing.CloseDrawing
284
                    End If
285
                End If
286
            Next
287

    
288
            Dim extension As String = Path.GetExtension(oDwgName)
289
            oDwgName = oDwgName.Replace(extension, "")
290

    
291
            objPIDAutoApp = CreateObject("PIDAutomation.Application")
292

    
293
            'For Each objDrawing In objPIDAutoApp.Drawings
294
            '    objDrawing.CloseDrawing(True)
295
            'Next
296

    
297
            objPIDAutoApp.Drawings.OpenDrawing(oDwgName + ".pid")
298

    
299
            objPIDAutoApp.ActiveWindow.Fit()
300

    
301
            Return True
302
        Catch ex As Exception
303
            If objPIDADrawing IsNot Nothing Then
304
                objPIDADrawing.CloseDrawing
305
            End If
306
            If objPIDAutoApp IsNot Nothing Then
307
                objPIDAutoApp.Quit
308
            End If
309
            datasource = Nothing
310
            objPIDAutoApp = Nothing
311
            objPIDADrawing = Nothing
312
            Return False
313
        End Try
314
        If objPIDADrawing IsNot Nothing Then
315
            objPIDADrawing.CloseDrawing
316
        End If
317

    
318
    End Function
319

    
320

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

    
339
                End If
340
            End If
341
        Next
342

    
343
        Return sValue
344
    End Function
345

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

    
357
    '  Dim _TempSymbolDt As DataTable = Symbol_Dt()
358

    
359

    
360
    Private Function LoadSymbolInXml(ByVal sXmlPath As String) As Drawing
361
        Try
362
            ''  _TempSymbolDt = Symbol_Dt()
363
            Dim CDrawing As Drawing = New Drawing()
364
            Dim oDt As DataTable = LoadSymbol_DT()
365
            Dim oElement As XElement = XElement.Load(sXmlPath)
366

    
367
            If oElement IsNot Nothing Then
368
                CDrawing.DwgName = oElement.Element(_XML_DWGNAME).Value
369
                CDrawing.Size = oElement.Element(_XML_DWGSIZE).Value
370
                SplitLocation(CDrawing.Size, _IMG_X, _IMG_Y)
371
                CDrawing.Unit = oElement.Element(_XML_UNIT).Value
372

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

    
417
                        End Try
418
                    Next
419
                    For Each oAtrribute As Object In oEqpNo.Elements(_XML_CATEGORY_ATTRIBUTE)
420
                        Try
421
                            Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
422
                            Dim oEleObj As XElement
423
                            Dim sAttUid As String
424
                            Dim sName As String
425
                            Dim sValue As String
426
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
427
                            sAttUid = oEleObj.Value
428
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
429
                            sName = oEleObj.Value
430
                            oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
431
                            sValue = oEleObj.Value
432
                            oAddrow(_XML_ATTRIBUTE_UID) = sAttUid
433
                            oAddrow(_XML_ATTRIBUTE_NAME) = sName
434
                            oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
435
                            oAttribute_Dt.Rows.Add(oAddrow)
436
                        Catch ex As Exception
437
                        End Try
438
                    Next
439
                    CEqp_no.Uid = sUid
440
                    CEqp_no.Dt_Equipment = oSymbol_Dt
441
                    CEqp_no.Dt_Attribute = oAttribute_Dt
442
                    oEqp_list.Add(CEqp_no)
443
                Next
444
                oTrim_Lineno_list = LoadLineNo(oElement, _XML_CATEGORY_TRIM_LINENO)
445
                CDrawing.Line_nos = oLineno_list
446
                CDrawing.Eqp_nos = oEqp_list
447
                CDrawing.TrimLine_nos = oTrim_Lineno_list
448

    
449
            End If
450
            Return CDrawing
451
        Catch ex As Exception
452
            Return Nothing
453
        End Try
454

    
455
    End Function
456

    
457

    
458
    Private Function LoadLineNo(ByVal oElement As XElement, ByVal sLineType As String) As List(Of Line_no)
459

    
460
        Dim oLineno_list As New List(Of Line_no)
461

    
462
        For Each oLineNo As Object In oElement.Elements(sLineType)
463

    
464
            Dim CLineNo As Line_no = New Line_no()
465
            Try
466
                CLineNo.Uid = oLineNo.Element(_XML_LINENO_UID).Value
467
                CLineNo.Text = oLineNo.Element(_XML_LINENO_TEXT).Value
468
                CLineNo.Location = oLineNo.Element(_XML_LINENO_LOCATION).Value
469
                CLineNo.Angle = oLineNo.Element(_XML_LINENO_ANGLE).Value
470
                CLineNo.SystemPath = "\Piping\Labels - Piping Segments\Kemya Line Number.sym" 'GetDataFromMappingDB(_XML_CATEGORY_LINENO, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
471
            Catch ex As Exception
472
                'CLineNo.Text = "PipeLineNo"
473
                'CLineNo.Uid = "PipeLineNo"
474
            End Try
475

    
476

    
477
            Dim oLine_Dt As DataTable = Line_Dt()
478
            Dim oSymbol_Dt As DataTable = Symbol_Dt()
479
            Dim oAttribute_Dt As DataTable = Attribute_Dt()
480

    
481
            For Each oRun As Object In oLineNo.Elements(_XML_CATEGORY_RUN)
482
                For Each oLine As Object In oRun.Elements(_XML_CATEGORY_LINE)
483
                    Try
484
                        Dim oAddrow As DataRow = oLine_Dt.NewRow()
485
                        Dim oEleObj As XElement
486
                        Dim sUid As String
487
                        Dim sStartpoint As String
488
                        Dim sEndpoint As String
489
                        Dim sType As String
490
                        oEleObj = oLine.Element(_XML_LINE_UID)
491
                        sUid = oEleObj.Value
492
                        oEleObj = oLine.Element(_XML_LINE_STARTPOINT)
493
                        sStartpoint = oEleObj.Value
494
                        oEleObj = oLine.Element(_XML_LINE_ENDPOINT)
495
                        sEndpoint = oEleObj.Value
496
                        oEleObj = oLine.Element(_XML_LINE_TYPE)
497
                        sType = oEleObj.Value
498
                        oAddrow(_XML_LINE_UID) = sUid
499
                        oAddrow(_XML_LINE_STARTPOINT) = sStartpoint
500
                        oAddrow(_XML_LINE_ENDPOINT) = sEndpoint
501
                        oAddrow(_XML_LINE_SYSTEMPATH) = GetDataFromMappingDB(_XML_CATEGORY_LINE, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
502
                        oAddrow(_XML_LINE_DRAWING) = "FALSE"
503
                        oAddrow(_XML_LINE_TYPE) = sType
504
                        oLine_Dt.Rows.Add(oAddrow)
505
                    Catch ex As Exception
506

    
507
                    End Try
508

    
509
                Next
510

    
511
                For Each oSymbol As Object In oRun.Elements(_XML_CATEGORY_SYMBOL)
512
                    Try
513
                        Dim oAddrow As DataRow = oSymbol_Dt.NewRow()
514
                        Dim oEleObj As XElement
515
                        Dim sUid As String
516
                        Dim sName As String
517
                        Dim sLocation As String
518
                        Dim sSize As String
519
                        Dim sAngle As String
520
                        Dim sOriginalPoint As String = ""
521
                        oEleObj = oSymbol.Element(_XML_SYMBOL_UID)
522
                        sUid = oEleObj.Value
523
                        oEleObj = oSymbol.Element(_XML_SYMBOL_PARENT)
524
                        sName = oEleObj.Value
525
                        oEleObj = oSymbol.Element(_XML_SYMBOL_LOCATION)
526
                        sLocation = oEleObj.Value
527
                        oEleObj = oSymbol.Element(_XML_SYMBOL_SIZE)
528
                        sSize = oEleObj.Value
529
                        oEleObj = oSymbol.Element(_XML_SYMBOL_ANGLE)
530
                        sAngle = oEleObj.Value
531
                        Try
532
                            oEleObj = oSymbol.Element(_XML_SYMBOL_ORIGINALPOINT)
533
                            sOriginalPoint = oEleObj.Value
534
                        Catch ex As Exception
535

    
536
                        End Try
537

    
538
                        oAddrow(_XML_SYMBOL_UID) = sUid
539
                        oAddrow(_XML_SYMBOL_NAME) = IO.Path.GetFileNameWithoutExtension(GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYMBOLNAME))
540
                        oAddrow(_XML_SYMBOL_LOCATION) = sLocation
541
                        oAddrow(_XML_SYMBOL_SIZE) = sSize
542
                        oAddrow(_XML_SYMBOL_ANGLE) = sAngle
543
                        oAddrow(_XML_SYMBOL_SYSTEMPATH) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
544
                        oAddrow(_XML_SYMBOL_TYPE) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_COMPTPYE)
545
                        oAddrow(_XML_SYMBOL_CLASS) = GetDataFromMappingDB(sName, _DB_COLUMN_MAPPING_SPPID_CLASS)
546
                        oAddrow(_XML_SYMBOL_ORIGINALPOINT) = sOriginalPoint
547

    
548
                        oSymbol_Dt.Rows.Add(oAddrow)
549
                    Catch ex As Exception
550

    
551
                    End Try
552

    
553
                Next
554

    
555
                For Each oAtrribute As Object In oRun.Elements(_XML_CATEGORY_ATTRIBUTE)
556
                    Try
557
                        Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
558
                        Dim oEleObj As XElement
559
                        Dim sUid As String
560
                        Dim sName As String
561
                        Dim sValue As String
562

    
563
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
564
                        sUid = oEleObj.Value
565
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
566
                        sName = oEleObj.Value
567
                        oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
568
                        sValue = oEleObj.Value
569

    
570
                        oAddrow(_XML_ATTRIBUTE_UID) = sUid
571
                        oAddrow(_XML_ATTRIBUTE_NAME) = sName
572
                        oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
573
                        oAttribute_Dt.Rows.Add(oAddrow)
574
                    Catch ex As Exception
575

    
576
                    End Try
577

    
578
                Next
579

    
580
            Next
581
            'Line No Attribute
582
            For Each oAtrribute As Object In oLineNo.Elements(_XML_CATEGORY_ATTRIBUTE)
583
                Try
584
                    Dim oAddrow As DataRow = oAttribute_Dt.NewRow()
585
                    Dim oEleObj As XElement
586
                    Dim sUid As String = ""
587
                    Dim sName As String
588
                    Dim sValue As String
589

    
590
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_UID)
591
                    sUid = oEleObj.Value
592
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_NAME)
593
                    sName = oEleObj.Value
594
                    oEleObj = oAtrribute.Element(_XML_ATTRIBUTE_VALUE)
595
                    sValue = oEleObj.Value
596
                    oAddrow(_XML_ATTRIBUTE_UID) = sUid
597
                    oAddrow(_XML_ATTRIBUTE_NAME) = sName
598
                    oAddrow(_XML_ATTRIBUTE_VALUE) = sValue
599
                    oAttribute_Dt.Rows.Add(oAddrow)
600
                Catch ex As Exception
601
                End Try
602
            Next
603
            CLineNo.Dt_Line = oLine_Dt
604
            CLineNo.Dt_Symbol = oSymbol_Dt
605
            CLineNo.Dt_Attribute = oAttribute_Dt
606
            oLineno_list.Add(CLineNo)
607
        Next
608
        Return oLineno_list
609
    End Function
610

    
611

    
612
    'Private Function LoadPipeInXml(ByVal sXmlPath As String) As DataTable
613
    '    Try
614
    '        Dim oDt As DataTable = LoadPipe_DT()
615
    '        Dim oElement As XElement = XElement.Load(sXmlPath)
616
    '        If oElement IsNot Nothing Then
617
    '            Dim DWGElement As XElement = oElement.Element("DWGNAME")
618
    '            Dim DWGNAME = DWGElement.Value
619
    '            Dim sXY As XElement = oElement.Element("SIZE")
620
    '            Dim sSize = sXY.Value
621
    '            Dim oSplitDWGPos As String() = sSize.Split(", ")
622

    
623
    '            If IsNumeric(oSplitDWGPos(0)) Then
624
    '                _IMG_X = Double.Parse(oSplitDWGPos(0))
625
    '            End If
626
    '            If IsNumeric(oSplitDWGPos(1)) Then
627
    '                _IMG_Y = Double.Parse(oSplitDWGPos(1))
628
    '            End If
629

    
630
    '            For Each pipes As Object In oElement.Elements("IMGLINES")
631
    '                For Each pipe As Object In pipes.Elements("IMGLINE")
632
    '                    Dim oAddrow As DataRow = oDt.NewRow()
633
    '                    Dim oObj As XElement = pipe.Element("ITEM")
634
    '                    Dim oItem = oObj.Value
635
    '                    ' Dim oSymbolPath As String = "\" + oSymbol + "\" + oClass + "\" + oType + "\" + oItem + ".sym"
636
    '                    Dim oSymbolPath As String = GetSystemPathFromMappingDB(oItem)
637
    '                    oObj = pipe.Element("START")
638
    '                    Dim oStartPoint = oObj.Value
639
    '                    Dim oSplitPos As String() = oStartPoint.Split(", ")
640
    '                    Dim oStartpos_X As Double = 0.0
641
    '                    Dim oStartpos_Y As Double = 0.0
642
    '                    If IsNumeric(oSplitPos(0)) Then
643
    '                        oStartpos_X = Double.Parse(oSplitPos(0))
644
    '                    End If
645
    '                    If IsNumeric(oSplitPos(1)) Then
646
    '                        oStartpos_Y = Double.Parse(oSplitPos(1))
647
    '                    End If
648

    
649
    '                    ConvertPoint(oStartpos_X, oStartpos_Y, _DWG_X, _DWG_Y)
650
    '                    oObj = pipe.Element("End")
651
    '                    Dim oEndPoint = oObj.Value
652
    '                    oSplitPos = oEndPoint.Split(", ")
653
    '                    Dim oEndpos_X As Double = 0.0
654
    '                    Dim oEndpos_Y As Double = 0.0
655
    '                    If IsNumeric(oSplitPos(0)) Then
656
    '                        oEndpos_X = Double.Parse(oSplitPos(0))
657
    '                    End If
658
    '                    If IsNumeric(oSplitPos(1)) Then
659
    '                        oEndpos_Y = Double.Parse(oSplitPos(1))
660
    '                    End If
661
    '                    ConvertPoint(oEndpos_X, oEndpos_Y, _DWG_X, _DWG_Y)
662

    
663
    '                    oAddrow("start_x") = oStartpos_X '+ 0.05
664
    '                    oAddrow("start_y") = oStartpos_Y
665
    '                    oAddrow("end_x") = oEndpos_X
666
    '                    oAddrow("end_y") = oEndpos_Y
667
    '                    oAddrow("SystemPath") = oSymbolPath
668
    '                    oDt.Rows.Add(oAddrow)
669
    '                Next
670
    '            Next
671

    
672
    '        End If
673

    
674

    
675
    '        Return oDt
676
    '    Catch ex As Exception
677
    '        Return Nothing
678
    '    End Try
679
    'End Function
680

    
681

    
682
    Private Sub ConvertPointByImage(ByRef dX As Double, ByRef dY As Double, ByVal dDwgX As Double, ByVal dDwgY As Double)
683

    
684
        Dim calcx As Double = 0
685
        Dim calcy As Double = 0
686
        calcx = (dX * _DWG_X) / dDwgX 'Math.Round((dX * _DWG_X) / dDwgX, 2)
687
        calcy = _DWG_Y - ((dY * _DWG_Y) / dDwgY) '_DWG_Y - Math.Round((dY * _DWG_Y) / dDwgY, 2)
688
        dX = calcx
689
        dY = calcy
690
    End Sub
691

    
692

    
693
    '@brief Convert To SPPID
694
    '@author : Gyusu Park
695
    '@date : 2018-04-10
696
    '@history:
697

    
698
    Private Sub SplitLocation(ByVal sLocation As String, ByRef dX As Double, ByRef dY As Double)
699

    
700
        Dim opointstr As String() = Split(sLocation, ",")
701
        If (opointstr.Length > 1) Then
702
            If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
703
                dX = opointstr(0)
704
                dY = opointstr(1)
705
            End If
706
        End If
707

    
708
    End Sub
709

    
710

    
711

    
712

    
713

    
714

    
715
    Private Function AutoConverting(ByVal oPipe_Dt As DataTable, ByVal oSymbol_Dt As DataTable, ByVal oTreeNode As TreeNode) As Boolean
716
        Dim iTotalCount As Double = oPipe_Dt.Rows.Count + oSymbol_Dt.Rows.Count
717
        Dim iSymbolcount As Double = 0
718

    
719
        Dim lobjDatasource As Object = _Placement.PIDDataSource
720

    
721
        ' lobjDatasource.BeginTransaction()
722
        '  datasource = objPlacement.PIDDataSource
723
        'Dim iPipecnt As Integer = 0
724
        SetListBoxItems(ListBox_Result, " Auto converting 시작....")
725

    
726
        Dim iPipeCnt As Integer = 0
727
        If oPipe_Dt IsNot Nothing Then
728
            For Each oRow As DataRow In oPipe_Dt.Rows
729
                Dim oposition As String = oRow("position").ToString()
730
                Dim oSymbol As String = oRow("SystemPath").ToString()
731

    
732
                Dim objConnector As LMConnector
733
                Dim objInputs As PlaceRunInputs
734
                objInputs = New PlaceRunInputs
735
                Dim oSplitStr As String() = Split(oposition, " ")
736
                For Each sposition As String In oSplitStr
737
                    Dim opointstr As String() = Split(sposition, ", ")
738

    
739
                    If (opointstr.Length > 1) Then
740
                        If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
741
                            Dim ox As Double = opointstr(0)
742
                            Dim oy As Double = opointstr(1)
743
                            ConvertPointByImage(ox, oy, _IMG_X, _IMG_Y)
744
                            objInputs.AddPoint(ox, oy)
745
                        End If
746
                    End If
747
                Next
748
                Dim objItem As LMAItem
749
                objItem = _Placement.PIDCreateItem(oSymbol)
750
                objConnector = _Placement.PIDPlaceRun(objItem, objInputs)
751
                SetListBoxItems(ListBox_Result, " Place PipeLine...." & "(" & (iPipeCnt + 1) & "/" & oPipe_Dt.Rows.Count)
752
                'Dim objPipeRun As LMPipeRun = datasource.GetPipeRun(objConnector.ModelItemID)
753
                'objPipeRun.Attributes("OperFluidCode").Value = "AFS"
754
                'objPipeRun.Commit()
755
                iSymbolcount = iSymbolcount + 1
756
                iPipeCnt = iPipeCnt + 1
757
            Next
758
        End If
759

    
760
        SetListBoxItems(ListBox_Result, " Place PipeLine....완료")
761

    
762
        Dim iAllInstrumentCnt As Integer = oSymbol_Dt.Select("Name = 'INSTRUMENTATION'").Length
763
                    Dim iValveCnt As Integer = oSymbol_Dt.Select("Class = 'VALVES'").Length
764
        Dim iInstrumentCnt As Integer = 1
765
        Dim iFittingsCnt As Integer = 1
766

    
767
        Dim oInsNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Instruments", True)(0)
768
        Dim oValveNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Valves", True)(0)
769
        Dim oFittingsNode As TreeNode = oTreeNode.Nodes.Find(oTreeNode.Name & "\Fittings", True)(0)
770
        For Each oRow As DataRow In oSymbol_Dt.Rows
771

    
772
            Try
773

    
774
                Dim sSystemPath As String = oRow("SystemPath").ToString()
775
                Dim sName As String = oRow("Name").ToString()
776
                Dim sType As String = oRow("Type").ToString()
777
                Dim sText As String = oRow("Text").ToString()
778
                Dim sClass As String = oRow("Class").ToString()
779
                Dim sItem As String = oRow("Item").ToString()
780

    
781
                Dim oX As Double = 0.0
782
                Dim oY As Double = 0.0
783
                If IsNumeric(oRow("x").ToString()) Then
784
                    oX = Double.Parse(oRow("x").ToString())
785
                End If
786
                If IsNumeric(oRow("y").ToString()) Then
787
                    oY = Double.Parse(oRow("y").ToString())
788
                End If
789
                Dim oAngle As Double = 0.0
790
                If IsNumeric(oRow("Angle").ToString()) Then
791
                    oAngle = Double.Parse(oRow("Angle").ToString())
792
                End If
793
                '   oSymbol = "\INSTRUMENTation\SYSTEM FUNCTIONS\D C S\DCS FUNC ACCESS IN PRIME LOC.sym"
794
                If sSystemPath <> "" Then
795
                    If sName = _TYPE_Instumentation Then
796

    
797
                        Dim sTagsuffix As String = ""
798
                        Dim sTagSequenceNo As String = ""
799
                        Dim sMeasuredVariableCode As String = ""
800
                        Dim sInstrumentTypeModifier As String = ""
801

    
802
                        If sText <> "" Then
803
                            If sText.Contains(",") Then
804
                                Dim splitstr() As String = sText.Split(",")
805
                                For i = 0 To splitstr.Count - 1
806
                                    If i = 0 Then
807
                                        sMeasuredVariableCode = Mid(splitstr(i), 1, 1)
808
                                        sTagSequenceNo = Mid(splitstr(i), 2, Len(splitstr(i)))
809
                                    Else
810
                                        If Len(splitstr(i)) = 1 Then
811
                                            sInstrumentTypeModifier = splitstr(i)
812
                                        ElseIf Len(splitstr(i)) = 0 Then
813

    
814
                                        ElseIf Len(splitstr(i)) > 1 Then
815
                                            sInstrumentTypeModifier = Mid(splitstr(i), 1, 1)
816
                                            sTagsuffix = Mid(splitstr(i), 2, Len(splitstr(i)))
817
                                        End If
818
                                    End If
819
                                Next
820
                            Else
821
                                sMeasuredVariableCode = Mid(sText, 1, 1)
822
                                sTagSequenceNo = Mid(sText, 2, Len(sText))
823
                            End If
824

    
825
                        End If
826

    
827
                        Dim objInstrSym As LMSymbol
828
                        objInstrSym = _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
829
                        SetListBoxItems(ListBox_Result, " Place Instrument...." & "(" & (iInstrumentCnt + 1) & "/" & iAllInstrumentCnt & ")")
830

    
831
                        ' SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sTagSequenceNo)
832
                        Dim action As Action = Sub()
833
                                                   oInsNode.Nodes.Add(sClass & "-" & iInstrumentCnt)
834
                                                   oInsNode.ExpandAll()
835
                                               End Sub
836
                        oInsNode.TreeView.Invoke(action)
837

    
838

    
839
                        Dim objInstr As LMInstrument
840
                        objInstr = lobjDatasource.GetInstrument(objInstrSym.ModelItemID)
841

    
842
                        Dim objItem As LMAItem
843
                        objItem = _Placement.PIDCreateItem(sSystemPath)
844

    
845

    
846
                        objInstr.Attributes("MeasuredVariableCode").Value = sMeasuredVariableCode
847
                        objInstr.Attributes("InstrumentTypeModifier").Value = sInstrumentTypeModifier
848
                        objInstr.Attributes("TagSuffix").Value = sTagsuffix
849
                        objInstr.Attributes("TagSequenceNo").Value = sTagSequenceNo
850
                        objInstr.Commit()
851
                        iInstrumentCnt = iInstrumentCnt + 1
852
                    ElseIf sName = "GATE VALVE WITH PLUG" Then
853

    
854
                    ElseIf sName = "MEDIUM 1D 1TO1" Then
855

    
856
                    ElseIf sClass = "VALVES" Then
857
                        Dim action As Action = Sub()
858
                                                   oValveNode.ExpandAll()
859
                                                   oValveNode.Nodes.Add(sClass & "-" & iValveCnt)
860
                                               End Sub
861
                        oValveNode.TreeView.Invoke(action)
862

    
863
                        _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
864

    
865
                        iValveCnt = iValveCnt + 1
866
                    Else
867
                        Dim action As Action = Sub()
868
                                                   oFittingsNode.ExpandAll()
869
                                                   oFittingsNode.Nodes.Add(sClass & "-" & iFittingsCnt)
870
                                               End Sub
871
                        oFittingsNode.TreeView.Invoke(action)
872
                        _Placement.PIDPlaceSymbol(sSystemPath, oX, oY, , oAngle)
873

    
874
                        iFittingsCnt = iFittingsCnt + 1
875

    
876
                    End If
877
                    iSymbolcount = iSymbolcount + 1
878
                Else
879
                End If
880
            Catch ex As Exception
881

    
882
            End Try
883
            Dim dCalcProgressValue As Double = (iSymbolcount / iTotalCount) * 100
884
            SetProgressbar(ProgressBar_Status, dCalcProgressValue)
885
            '     ProgressBar_Status.Value = (iSymbolcount / iTotalCount) * 100
886

    
887
        Next
888

    
889
        MsgBox("Complete AutoConverting")
890
        SetListBoxItems(ListBox_Result, "Place Instrument....변환완료")
891
        SetListBoxItems(ListBox_Result, "총 symbol:  " & iSymbolcount & "개 변환완료")
892
        SetProgressbar(ProgressBar_Status, 100)
893

    
894
        ' MsgBox("symbol: " & iSymbolcount & "개, pipe : " & iPipecnt & "개 변환완료")
895
    End Function
896

    
897

    
898
    Private Sub Tree_XMLFiles_AfterCheck(sender As Object, e As TreeViewEventArgs)
899
        If e.Node.Checked = True Then
900
            For Each oNode As TreeNode In e.Node.Nodes
901
                oNode.Checked = True
902
            Next
903
        Else
904
            For Each oNode As TreeNode In e.Node.Nodes
905
                oNode.Checked = False
906
            Next
907
        End If
908
    End Sub
909

    
910
    Private Function Load_DB(ByVal sDBPath As String, ByVal sTableName As String) As DataTable
911

    
912
        Try
913
            Dim oDt As New DataTable
914
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
915
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
916
            conn.Open()
917
            Dim sQuery As String = "Select * from " & sTableName
918
            Dim cmd As SQLiteCommand = conn.CreateCommand()
919
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
920
            Dim oDataSet As DataSet = New DataSet()
921
            adapter.Fill(oDataSet)
922
            oDt = oDataSet.Tables(0)
923
            Return oDt
924
        Catch ex As Exception
925
            Return Nothing
926
        End Try
927

    
928

    
929
    End Function
930

    
931
    Private Sub Load_AttributeDB(ByVal sDBPath As String)
932

    
933
        Try
934
            Dim sConnectionstring As String = "Data Source=" & sDBPath & ";Version=3;Synchronous=Off;UTF8Encoding=True;"
935
            Dim conn As SQLiteConnection = New SQLiteConnection(sConnectionstring)
936
            conn.Open()
937
            Dim sQuery As String = "Select * from Attribute"
938
            Dim cmd As SQLiteCommand = conn.CreateCommand()
939
            Dim adapter As SQLiteDataAdapter = New SQLiteDataAdapter(sQuery, conn)
940
            Dim oDataSet As DataSet = New DataSet()
941
            adapter.Fill(oDataSet)
942
            _Attribute_DB = oDataSet.Tables(0)
943
        Catch ex As Exception
944

    
945
        End Try
946

    
947

    
948
    End Sub
949

    
950
    'Private Sub Tree_XMLFiles_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles Tree_XMLFiles.AfterSelect
951
    '    If first_start = False Then Exit Sub
952
    '    Dim pa = e.Node.FullPath.ToString
953

    
954
    '    printfilesfolders_here(pa, e.Node)
955

    
956
    '    displayfiles(pa)
957

    
958
    '    Dim coco As String = ""
959
    '    coco = pa.ToString
960
    '    coco = coco.Replace("\\", "\")
961
    '    Me.Text = coco
962
    '    folders_path = coco
963
    'End Sub
964

    
965
    Sub printfilesfolders_here(ByVal path As String, ByRef itree As TreeNode)
966

    
967
        Dim foldername As String
968
        Dim filename As String
969
        itree.Nodes.Clear()
970
        On Error GoTo eee
971
        For Each foldername In Directory.GetDirectories(path)
972
            On Error GoTo eee
973
            Dim jj = foldername.LastIndexOf("\")
974
            Dim jj1 = foldername.Length - jj
975
            Dim foldr = foldername.Substring((jj + 1), (jj1 - 1))
976
            itree.Nodes.Add(foldr, foldr)
977
        Next ' if you put this next at the end of procedure recursive will be done on first folder only
978
        Exit Sub
979
eee:
980
    End Sub
981

    
982

    
983

    
984
    '    Private Sub Tree_XMLFiles_MouseMove(sender As Object, e As MouseEventArgs) Handles Tree_XMLFiles.MouseMove
985
    '        first_start = True
986
    '    End Sub
987

    
988
    '    Private Sub ListView_File_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView_File.SelectedIndexChanged
989
    '        Dim indexes As ListView.SelectedIndexCollection =
990
    '                         Me.ListView_File.SelectedIndices
991
    '        Dim index As Integer
992

    
993
    '        For Each index In indexes
994
    '            'On Error Resume Next
995
    '            If folders_path.EndsWith("\") = True Then
996
    '                Me.Status_Main.Items(0).Text = folders_path + (Me.ListView_File.Items(index).Text)
997
    '                'On Error Resume Next
998
    '            Else
999
    '                Me.Status_Main.Items(0).Text = folders_path + "\" + (Me.ListView_File.Items(index).Text)
1000
    '            End If
1001

    
1002
    '            Dim infoReader As System.IO.FileInfo
1003
    '            infoReader = My.Computer.FileSystem.GetFileInfo(Me.Status_Main.Items(0).Text)
1004
    '            Me.Status_Main.Items(1).Text = " Created : " + infoReader.CreationTime.ToString + " " + infoReader.Attributes.ToString
1005
    '        Next
1006
    '    End Sub
1007

    
1008
    '    Private Sub Procees()
1009
    '        Dim indexes As ListView.SelectedIndexCollection =
1010
    '                            Me.ListView_File.SelectedIndices
1011
    '        Dim index As Integer
1012

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

    
1025
    '            Dim infoReader As System.IO.FileInfo
1026
    '            infoReader = My.Computer.FileSystem.GetFileInfo(Me.Status_Main.Items(0).Text)
1027
    '            Me.Status_Main.Items(1).Text = " Created : " + infoReader.CreationTime.ToString + " " + infoReader.Attributes.ToString
1028
    '            On Error GoTo out
1029
    '            MsgBox(Me.Status_Main.Items(0).Text + " is processed")
1030
    '            On Error GoTo out
1031
    '        Next
1032
    '        Exit Sub
1033
    'out:
1034
    '        MsgBox(Err.Description)
1035
    'End Sub
1036

    
1037
    Private Function LoadAllDrawing() As DataTable
1038

    
1039

    
1040
        SetListBoxItems(ListBox_Result, "도면정보 로드중....")
1041

    
1042
        Dim oDt As DataTable = Drawing_Dt()
1043
        Dim sHierarchy As String = My.Settings.Plant_Hierarchy
1044

    
1045

    
1046
        Dim files() As String
1047
        files = Directory.GetFiles(sHierarchy, "*.pid", SearchOption.AllDirectories)
1048
        For Each FileName As String In files
1049
            Dim sName As String = FileName
1050
            Dim oAddRow As DataRow = oDt.NewRow()
1051
            oAddRow("Name") = Path.GetFileNameWithoutExtension(sName)
1052
            oAddRow("Path") = FileName
1053
            oDt.Rows.Add(oAddRow)
1054
        Next
1055
        Return oDt
1056
    End Function
1057

    
1058
    Private Function LoadAllDrawing2() As DataTable
1059
        Dim datasource As LMADataSource
1060
        Dim objPIDAutoApp As Object
1061
        Dim objPIDADrawing As Object
1062
        Dim objDrawing As Object 'Drawing
1063
        'Dim objDrawing As LMDrawing
1064
        'Dim objDrawings As LMDrawings
1065

    
1066
        datasource = New LMADataSource
1067

    
1068
        '    objDrawings = New LMDrawings
1069
        'objDrawings.Collect(datasource)
1070
        objPIDAutoApp = CreateObject("PIDAutomation.Application")
1071

    
1072
        For Each objDrawing In objPIDAutoApp.Drawings
1073
            objDrawing.CloseDrawing(True)
1074
        Next
1075
        Try
1076
            objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("UY1-K-2000_P1_300dpi_0321_TEST_1")
1077
        Catch ex As Exception
1078
            Process.Start("\\desktop-9vlq0dp\Test02Site\P188943_SPPID_Plant\Plant_Hierarchy\8121\8121-1\UY1-K-2000_P1_300dpi_0321_TEST_1.pid")
1079
        End Try
1080

    
1081

    
1082

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

    
1087
        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("1")
1088

    
1089
        For Each objDrawing In objPIDAutoApp.Drawings
1090
            If objDrawing.Attributes("ItemStatus").Index = 1 Then '1 stands for Active
1091
                Try
1092

    
1093
                    Dim sName As String = objDrawing.Attributes("Name").Value
1094

    
1095
                    iCount = iCount + 1
1096
                    If sName = "UY1-K-2000_P1_300dpi_0321_TEST_1" Then
1097
                        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing(objDrawing.Attributes("Name"))
1098
                        objPIDADrawing = objPIDAutoApp.Drawings.OpenDrawing("\8121\8121-1\UY1-K-2000_P1_300dpi_0321_TEST_1.pid")
1099
                        If Not objPIDADrawing Is Nothing Then
1100
                            objPIDADrawing.CloseDrawing()
1101
                        End If
1102
                    End If
1103

    
1104

    
1105
                Catch ex As Exception
1106

    
1107
                End Try
1108

    
1109
            End If
1110
        Next
1111
        objPIDAutoApp.Quit
1112
        objPIDAutoApp = Nothing
1113
        objPIDADrawing = Nothing
1114
        objDrawing = Nothing
1115
        '   objDrawings = Nothing
1116
    End Function
1117

    
1118
    Dim _XMLList As ListView = New ListView()
1119

    
1120

    
1121

    
1122

    
1123

    
1124

    
1125
    Private Function CheckOpenDrawing() As Boolean
1126
        Try
1127

    
1128
            Dim lobjDatasource As Object
1129
            _Placement = CreateObject("Plaice.Placement", "")
1130
            lobjDatasource = _Placement.PIDDataSource
1131
            Return True
1132
        Catch ex As Exception
1133
            Return False
1134
        End Try
1135

    
1136
    End Function
1137

    
1138

    
1139
    Private Sub Btn_Convert_Click(sender As Object, e As EventArgs) Handles Btn_Convert.Click
1140

    
1141
        Main_Tab.SelectedIndex = 1
1142
        ListBox_Result.Items.Clear()
1143
        ' DataGrid_Result.DataSource = New DataTable()
1144
        Me.ProgressBar_Status.Visible = True
1145
        ProgressBar_Status.Maximum = 100
1146
        ProgressBar_Status.Value = 0
1147
        ' _selectFolderPath = Tree_XMLFiles.SelectedNode.FullPath.Replace("\\", "\")
1148
        _Main_trd = New Thread(AddressOf ThreadConvert)
1149
        _Main_trd.IsBackground = True
1150
        _Main_trd.Start()
1151
        FineOPCForm()
1152
    End Sub
1153

    
1154
    Private Sub FineOPCForm()
1155
        _Opc_trd = New Thread(AddressOf ThreadOPCRemove)
1156
        _Opc_trd.IsBackground = True
1157
        _Opc_trd.Start()
1158
    End Sub
1159

    
1160
    'Private Sub ThreadTask()
1161

    
1162

    
1163
    '    If _XMLList.Items.Count > 0 Then
1164

    
1165
    '        Dim oDwg_Dt As DataTable = LoadAllDrawing()
1166
    '        Dim iDwgCnt As Integer = 0
1167
    '        Dim objPIDAutoApp As Object
1168
    '        objPIDAutoApp = CreateObject("PIDAutomation.Application")
1169

    
1170

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

    
1174
    '            Dim sDwgName As String = Path.GetFileNameWithoutExtension(myList(i))
1175
    '            Txt_Status.Text = sDwgName & "..(" & i + 1 & "/" & myList.Count & ")"
1176
    '            SetListBoxItems(ListBox_Result, Txt_Status.Text & " 처리중....")
1177
    '            Dim sDwgNo As String = myList(i)
1178
    '            Dim oDwgPath As String = ""
1179
    '            oDwgPath = _selectFolderPath + "\" + sDwgNo
1180

    
1181
    '            Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
1182
    '            If sPath <> "" Then
1183

    
1184
    '                Process.Start(sPath)
1185

    
1186
    '                Dim bCheckOpenDrawing As Boolean = False
1187
    '                While (True)
1188
    '                    bCheckOpenDrawing = CheckOpenDrawing()
1189
    '                    If bCheckOpenDrawing = True Then
1190
    '                        Exit While
1191
    '                    Else
1192
    '                        Thread.Sleep(2000)
1193
    '                    End If
1194
    '                End While
1195

    
1196
    '                If bCheckOpenDrawing Then
1197
    '                    SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
1198
    '                    Dim oPipe_Dt As DataTable = New DataTable() 'LoadPipeInXml(oDwgPath)
1199

    
1200
    '                    Dim oSymbol_Dt As DataTable = LoadSymbolInXml(oDwgPath)
1201
    '                    Dim oTreeNode As New TreeNode  'SetTreeViewItems(Tree_Result, Tree_Result.Nodes, sDwgName, sDwgName)
1202
    '                    'oTreeNode = Tree_Result.Nodes.Find(sDwgName, True)(0)
1203
    '                    Dim action As Action = Sub()
1204
    '                                               oTreeNode = Tree_Result.Nodes.Add(sDwgName, sDwgName)
1205
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Instruments", "Instuments")
1206
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Pipes", "Pipes")
1207
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Valves", "Valves")
1208
    '                                               SetTreeViewItems(Tree_Result, oTreeNode.Nodes, sDwgName & "\Fittings", "Fittings")
1209
    '                                               oTreeNode.ExpandAll()
1210
    '                                           End Sub
1211
    '                    Tree_Result.Invoke(action)
1212

    
1213

    
1214
    '                    '    oTreeNode.Expand()
1215
    '                    SetListBoxItems(ListBox_Result, sDwgName & " Auto converting 대기....")
1216
    '                    AutoConverting(oPipe_Dt, oSymbol_Dt, oTreeNode)
1217

    
1218
    '                End If
1219

    
1220
    '            End If
1221
    '            ''도면 생성
1222
    '            'If CreateDwg(sDwgName) Then
1223
    '            '    'AutoConverting
1224

    
1225
    '            'End If
1226

    
1227
    '        Next
1228
    '    End If
1229
    'End Sub
1230

    
1231
    Dim _objPIDAutoApp As Object
1232

    
1233
    Private Function OpenSPPID(ByVal oDwg_Dt As DataTable, ByVal sDwgName As String) As Boolean
1234
        Dim bCheckOpen As Boolean = False
1235
        '   Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgPath)
1236
        SetListBoxItems(ListBox_Result, sDwgName & " 도면 Open....")
1237
        _objPIDAutoApp = CreateObject("PIDAutomation.Application")
1238

    
1239
        Dim sPath As String = OpenDrawing(oDwg_Dt, sDwgName)
1240
        If sPath <> "" Then
1241
            Process.Start(sPath)
1242
        Else
1243
            Return bCheckOpen
1244
        End If
1245

    
1246
            Dim bCheckOpenDrawing As Boolean = False
1247
            While (True)
1248
                bCheckOpenDrawing = CheckOpenDrawing()
1249
                If bCheckOpenDrawing = True Then
1250
                    bCheckOpen = True
1251
                    Exit While
1252
                Else
1253
                    Thread.Sleep(2000)
1254
                End If
1255
            End While
1256

    
1257

    
1258
            Return bCheckOpen
1259
    End Function
1260

    
1261
    Private Function GetDrawing(ByVal sDwgName As String) As Drawing
1262
        For Each CDrawing In _DrawingsList
1263
            If CDrawing.DwgName.ToUpper() = sDwgName.ToUpper() Then
1264
                Return CDrawing
1265
            End If
1266
        Next
1267
        Return Nothing
1268
    End Function
1269

    
1270
    Private Function GetLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
1271
        For Each CLineNo In CDrawing.Line_nos
1272
            If CLineNo.Uid = sLineNoUid Then
1273
                Return CLineNo
1274
            End If
1275
        Next
1276
        Return Nothing
1277
    End Function
1278

    
1279
    Private Function GetTrimLineNo(ByVal CDrawing As Drawing, ByVal sLineNoUid As String) As Line_no
1280
        For Each CLineNo In CDrawing.TrimLine_nos
1281
            If CLineNo.Uid = sLineNoUid Then
1282
                Return CLineNo
1283
            End If
1284
        Next
1285
        Return Nothing
1286
    End Function
1287

    
1288

    
1289
    Private Function GetOnlyPipeLineNo(ByVal CDrawing As Drawing, ByVal sPipeUid As String) As Line_no
1290
        For Each CLineNo In CDrawing.Line_nos
1291
            Dim odt As DataTable = CLineNo.Dt_Line
1292
            If odt.Rows.Count > 0 Then
1293
                If odt.Rows(0)(_XML_LINE_UID).ToString = sPipeUid Then
1294
                    Return CLineNo
1295
                End If
1296
            End If
1297
        Next
1298
        Return Nothing
1299
    End Function
1300

    
1301

    
1302
    Private Function GetEqpNo(ByVal CDrawing As Drawing, ByVal sEqpUid As String) As Eqp_no
1303
        For Each CEqpNo In CDrawing.Eqp_nos
1304
            If CEqpNo.Uid = sEqpUid Then
1305
                Return CEqpNo
1306
            End If
1307
        Next
1308
        Return Nothing
1309
    End Function
1310
    Private Function ConvertPointBystring(ByVal sPoint As String, ByRef dX As Double, ByRef dY As Double) As Boolean
1311
        Try
1312
            Dim opointstr As String() = Split(sPoint, ",")
1313
            If (opointstr.Length > 1) Then
1314
                If IsNumeric(opointstr(0)) And IsNumeric(opointstr(1)) Then
1315
                    dX = opointstr(0)
1316
                    dY = opointstr(1)
1317

    
1318
                Else
1319
                    dX = 0
1320
                    dY = 0
1321
                    Return False
1322
                End If
1323
            End If
1324
            Return True
1325
        Catch ex As Exception
1326
            Return False
1327
        End Try
1328
    End Function
1329

    
1330

    
1331
    Dim _DrawLine_Dt As DataTable = DrawLind_Dt()
1332

    
1333
    Private Function DrawLine(ByVal sUid As String, ByVal sLineNoUid As String, ByVal oLine_Dt As DataTable,
1334
                              ByVal oAttribute_Dt As DataTable, ByRef oPiperun_Dt As DataTable) As LMPipeRun
1335
        Try
1336
            Dim oPipeRun As LMPipeRun = Nothing
1337
            Dim oPipeRow() As DataRow = oLine_Dt.Select(_XML_LINE_UID & " = '" + sUid + "'")
1338
            Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'")
1339

    
1340
            If oPipeRow.Length > 0 Then
1341
                Dim oDatasource As Object = _Placement.PIDDataSource
1342
                Dim objItem As LMAItem
1343
                Dim objConnector As LMConnector
1344
                Dim objInputs As PlaceRunInputs
1345
                objInputs = New PlaceRunInputs
1346
                Dim dOriginalStart_x As Double = 0.0
1347
                Dim dOriginalStart_y As Double = 0.0
1348
                Dim dOriginalEnd_x As Double = 0.0
1349
                Dim dOriginalEnd_y As Double = 0.0
1350
                Dim dStart_x As Double = 0.0
1351
                Dim dStart_y As Double = 0.0
1352
                Dim dEnd_x As Double = 0.0
1353
                Dim dEnd_y As Double = 0.0
1354

    
1355
                Dim sType As String = oPipeRow(0)(_XML_LINE_TYPE).ToString()
1356

    
1357
                Dim sSystempath As String = "\Piping\Routing\Process Lines\Primary Piping.sym" ' oPipeRow(0)(_XML_LINE_SYSTEMPATH).ToString()
1358
                If sType.ToUpper() = "ELECTRIC" Then
1359
                    sSystempath = "\Instrumentation\Signal Line\Electric.sym"
1360
                ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then
1361
                    sSystempath = "\Instrumentation\Signal Line\Connect to Process.sym"
1362
                Else
1363
                End If
1364
                Dim sStartpoint As String = oPipeRow(0)(_XML_LINE_STARTPOINT).ToString()
1365
                Dim sEndpoint As String = oPipeRow(0)(_XML_LINE_ENDPOINT).ToString()
1366
                Dim sPipeUid As String = oPipeRow(0)(_XML_LINE_UID).ToString()
1367

    
1368
                Dim oAddPiperunRow As DataRow = oPiperun_Dt.NewRow()
1369
                ConvertPointBystring(sStartpoint, dOriginalStart_x, dOriginalStart_y)
1370
                dStart_x = dOriginalStart_x
1371
                dStart_y = dOriginalStart_y
1372

    
1373
                If ConvertPointBystring(sEndpoint, dOriginalEnd_x, dOriginalEnd_y) Then
1374
                    dEnd_x = dOriginalEnd_x
1375
                    dEnd_y = dOriginalEnd_y
1376

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

    
1394
                    ConvertPointByImage(dStart_x, dStart_y, _IMG_X, _IMG_Y)
1395
                    ConvertPointByImage(dEnd_x, dEnd_y, _IMG_X, _IMG_Y)
1396
                    If dStart_x <> 0 And dStart_y <> 0 And dEnd_x <> 0 And dEnd_y <> 0 Then
1397

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

    
1433
                                End Try
1434

    
1435

    
1436
                            Next
1437
                            oPipeRun.Commit()
1438
                        End If
1439
                        'Flow Direction 
1440
                        Dim sFlowDirectionPath As String = "\Piping\Labels - Piping Segments\Flow Direction.sym" 'GetDataFromMappingDB(_XML_CATEGORY_FLOWDIRECITON, _DB_COLUMN_MAPPING_SPPID_SYSTEMPATH)
1441
                        Dim dFlowDirectionAngle As Double = 0.0
1442
                        If dStart_y <> dEnd_y Then
1443
                            If dStart_y > dEnd_y Then
1444
                                dFlowDirectionAngle = -1.57
1445
                            Else
1446
                                dFlowDirectionAngle = 1.57
1447
                            End If
1448
                        End If
1449
                        If dStart_x <> dEnd_x Then
1450
                            If dStart_x > dEnd_x Then
1451
                                dFlowDirectionAngle = 3.14
1452
                            Else
1453
                                dFlowDirectionAngle = 0
1454
                            End If
1455
                        End If
1456

    
1457
                        _Placement.PIDPlaceSymbol(sFlowDirectionPath, dEnd_x, dEnd_y, , dFlowDirectionAngle)
1458
                    End If
1459
                End If
1460
                _Itemcnt = _Itemcnt + 1
1461
                Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1462
                SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1463
                Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1464

    
1465
                oAddPiperunRow("Piperun") = oPipeRun
1466
                oAddPiperunRow("startx") = dOriginalStart_x
1467
                oAddPiperunRow("starty") = dOriginalStart_y
1468
                oAddPiperunRow("endx") = dOriginalEnd_x
1469
                oAddPiperunRow("endy") = dOriginalEnd_y
1470
                oPiperun_Dt.Rows.Add(oAddPiperunRow)
1471

    
1472
            End If
1473
            Return oPipeRun
1474
        Catch ex As Exception
1475
            Return Nothing
1476
        End Try
1477
    End Function
1478

    
1479
    Private Sub AddModelingLine(ByVal dStart_x As Double, ByVal dStart_y As Double, ByVal dEnd_x As Double, ByVal dEnd_y As Double, ByVal sUid As String)
1480
        Dim oAddRow = _DrawLine_Dt.NewRow()
1481
        oAddRow(_XML_LINE_UID) = sUid
1482
        oAddRow(_XML_LINE_STARTPOINT_X) = dStart_x
1483
        oAddRow(_XML_LINE_STARTPOINT_Y) = dStart_y
1484
        oAddRow(_XML_LINE_ENDPOINT_X) = dEnd_x
1485
        oAddRow(_XML_LINE_ENDPOINT_Y) = dEnd_y
1486
        _DrawLine_Dt.Rows.Add(oAddRow)
1487
    End Sub
1488

    
1489

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

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

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

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

    
1499
        'If oFindRows_1.Length > 0 Then
1500
        '    Return 1
1501
        'ElseIf oFindRows_2.Length > 0 Then
1502
        '    Return 2
1503
        'ElseIf oFindRows_3.Length > 0 Then
1504
        '    Return 3
1505
        'ElseIf oFindRows_4.Length > 0 Then
1506
        '    Return 4
1507
        'Else
1508
        '    Return 0
1509
        'End If
1510
        Return 0
1511
    End Function
1512

    
1513
    Private Function FindConnectionPoint(ByVal dX As Double, ByVal dY As Double)
1514

    
1515

    
1516
    End Function
1517

    
1518
    Private Sub PlaceEquipment(ByVal sUid As String, ByVal oSymbol_Dt As DataTable, ByVal oAttribute_Dt As DataTable)
1519
        Try
1520
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1521
            Dim oAttributeRow() As DataRow
1522
            If oAttribute_Dt.Rows.Count > 0 Then
1523
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1524
            End If
1525
            If oSymbolRow.Length > 0 Then
1526
                Dim oDatasource As Object = _Placement.PIDDataSource
1527
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1528
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1529
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1530
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1531
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1532
                Dim dAngle As Double = 0.0
1533
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1534
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1535
                End If
1536
                Dim dLocationX As Double = 0.0
1537
                Dim dLocationY As Double = 0.0
1538
                Dim dX As Double = 0.0
1539
                Dim dY As Double = 0.0
1540

    
1541
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1542
                    dX = dLocationX
1543
                    dY = dLocationY
1544
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1545
                    _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1546
                    SetListBoxItems(ListBox_Result, "Place Equipment..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1547
                End If
1548
            End If
1549
        Catch ex As Exception
1550

    
1551
        End Try
1552

    
1553

    
1554
    End Sub
1555

    
1556
    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
1557
        Try
1558

    
1559
            Dim oSymbolRow() As DataRow = oSymbol_Dt.Select(_XML_SYMBOL_UID & " = '" + sUid + "'")
1560
            Dim oAttributeRow() As DataRow
1561
            If oAttribute_Dt.Rows.Count > 0 Then
1562
                oAttributeRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sUid + "'")
1563
            End If
1564

    
1565
            If oSymbolRow.Length > 0 Then
1566
                Dim oDatasource As Object = _Placement.PIDDataSource
1567
                Dim sSymbolCompType As String = oSymbolRow(0)(_XML_SYMBOL_TYPE).ToString()
1568
                Dim sSystemPath As String = oSymbolRow(0)(_XML_SYMBOL_SYSTEMPATH).ToString()
1569
                Dim sClass As String = oSymbolRow(0)(_XML_SYMBOL_CLASS).ToString()
1570
                Dim sLocation As String = oSymbolRow(0)(_XML_SYMBOL_LOCATION).ToString()
1571
                Dim sOriginalPoint As String = oSymbolRow(0)(_XML_SYMBOL_ORIGINALPOINT).ToString()
1572
                Dim dAngle As Double = 0.0
1573
                If IsNumeric(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString()) Then
1574
                    dAngle = Double.Parse(oSymbolRow(0)(_XML_SYMBOL_ANGLE).ToString())
1575
                End If
1576

    
1577
                Dim objSymbol As LMSymbol
1578
                Dim dLocationX As Double = 0.0
1579
                Dim dLocationY As Double = 0.0
1580
                Dim dX As Double = 0.0
1581
                Dim dY As Double = 0.0
1582

    
1583
                If ConvertPointBystring(sOriginalPoint, dLocationX, dLocationY) Then
1584
                    dX = dLocationX
1585
                    dY = dLocationY
1586
                    If sSymbolCompType = "" Or sSymbolCompType = "Piping OPC's" Then
1587
                        FindConnectionLine(oLine_Dt, dX, dY)
1588
                    End If
1589

    
1590
                    ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
1591
                        Dim oInstrument As LMInstrument
1592
                    If sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() Then
1593
                        _iInstrumentcnt = _iInstrumentcnt + 1
1594
                        objSymbol = _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1595
                        SetListBoxItems(ListBox_Result, "Place Instrument..(" & dLocationX & "," & dLocationY & ")..." & _iInstrumentcnt & " count ")
1596
                        oInstrument = oDatasource.GetInstrument(objSymbol.ModelItemID)
1597
                        Try
1598
                            If oAttributeRow.Length > 0 Then
1599
                                For Each oAttribute In oAttributeRow
1600
                                    Try
1601
                                        Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
1602
                                        Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
1603
                                        Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
1604
                                        oInstrument.Attributes(sSPPIDAttribute).Value = sPIDValue
1605
                                    Catch ex As Exception
1606

    
1607
                                    End Try
1608

    
1609
                                Next
1610
                                oInstrument.Commit()
1611
                            End If
1612
                        Catch ex As Exception
1613
                        End Try
1614
                    ElseIf sSymbolCompType.ToUpper() = _DB_FITTINGS.ToUpper() Then
1615
                        _iValvecnt = _iValvecnt + 1
1616
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1617
                        SetListBoxItems(ListBox_Result, "Place Valve..(" & dLocationX & "," & dLocationY & ")..." & _iValvecnt & " count ")
1618

    
1619
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_FITTINGS.ToUpper() Then
1620
                        _iFittingcnt = _iFittingcnt + 1
1621
                        If sSystemPath.Contains(",") Then
1622

    
1623
                            Dim sDuplicatePath As String() = sSystemPath.Split(",")
1624
                            Dim sMainSymbol As String = ""
1625
                            Dim sSubSymbol As String = ""
1626
                            For Each sPath In sDuplicatePath
1627
                                If sMainSymbol = "" Then
1628
                                    sMainSymbol = sPath.Replace(vbLf, "")
1629
                                Else
1630
                                    sSubSymbol = sPath.Replace(vbLf, "")
1631
                                End If
1632
                            Next
1633
                            Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1634
                            Dim dConnpos_x As Double = 0.0
1635
                            Dim dConnpos_y As Double = 0.0
1636
                            _Placement.PIDConnectPointLocation(oSymbolObj, 2, dConnpos_x, dConnpos_y)
1637
                            '   _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y, dAngle, TargetItem:=oSymbolObj.AsLMRepresentation)
1638
                            _Placement.PIDPlaceSymbol(sSubSymbol, dConnpos_x, dConnpos_y,, dAngle)
1639

    
1640
                        Else
1641
                            _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1642
                        End If
1643

    
1644

    
1645
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1646
                    ElseIf sSymbolCompType.ToUpper() = _SYMBOL_INSTUMENT.ToUpper() And sClass.ToUpper() = _SYMBOL_ACTUATORS.ToUpper() Then
1647
                        _iFittingcnt = _iFittingcnt + 1
1648
                        Dim sDuplicatePath As String() = sSystemPath.Split(",")
1649
                        Dim sMainSymbol As String = ""
1650
                        Dim sSubSymbol As String = ""
1651
                        For Each sPath In sDuplicatePath
1652
                            If sMainSymbol = "" Then
1653
                                sMainSymbol = sPath.Replace(vbLf, "")
1654
                            Else
1655
                                sSubSymbol = sPath.Replace(vbLf, "")
1656
                            End If
1657
                        Next
1658
                        Dim oSymbolObj As LMSymbol = _Placement.PIDPlaceSymbol(sMainSymbol, dX, dY, , dAngle)
1659
                        Dim dSymbolpos_x As Double = oSymbolObj.XCoordinate
1660
                        Dim dSymbolpos_y As Double = oSymbolObj.YCoordinate
1661
                        _Placement.PIDPlaceSymbol(sSubSymbol, dSymbolpos_x, dSymbolpos_y, , dAngle, TargetItem:=oSymbolObj.AsLMAItem)
1662

    
1663
                    Else
1664
                        _iFittingcnt = _iFittingcnt + 1
1665
                        _Placement.PIDPlaceSymbol(sSystemPath, dX, dY, , dAngle)
1666
                        SetListBoxItems(ListBox_Result, "Place Fitting..(" & dLocationX & "," & dLocationY & ")..." & _iFittingcnt & " count ")
1667
                        End If
1668

    
1669
                    End If
1670
                _Itemcnt = _Itemcnt + 1
1671
                Dim dCalcProgressValue As Double = (_Itemcnt / _allItem) * 100
1672
                SetProgressbar(ProgressBar_Status, dCalcProgressValue)
1673
                Label_Progress.Text = Math.Round(dCalcProgressValue, 0) & "%"
1674
            End If
1675

    
1676
        Catch ex As Exception
1677
            Return False
1678
        End Try
1679
    End Function
1680

    
1681

    
1682
    Private Sub FindConnectionLine(ByVal oLine_Dt As DataTable, ByRef dx As Double, ByRef dy As Double)
1683

    
1684
        Try
1685
            For Each oRow In oLine_Dt.Rows
1686
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1687
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1688
                Dim d기준s_x As Double = 0
1689
                Dim d기준s_y As Double = 0
1690
                Dim d기준e_x As Double = 0
1691
                Dim d기준e_y As Double = 0
1692
                ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1693
                ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1694
                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
1695
                    dx = d기준s_x
1696
                    dy = d기준s_y
1697
                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
1698
                    dx = d기준e_x
1699
                    dy = d기준e_y
1700
                End If
1701
            Next
1702
        Catch ex As Exception
1703
        End Try
1704
    End Sub
1705

    
1706

    
1707
    Dim _라인보정기준값 As Integer = 10
1708

    
1709
    Private Function 라인보정(ByRef oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1710
                                      ByRef dex As Double, ByRef dey As Double)
1711
        Try
1712
            Dim bCheck라인 As Boolean = False
1713
            '일치하는 Line 찾기
1714
            For Each oRow In oLine_Dt.Rows
1715
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1716
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1717
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1718
                If sBUid <> sUid Then
1719
                    Dim d기준s_x As Double = 0
1720
                    Dim d기준s_y As Double = 0
1721
                    Dim d기준e_x As Double = 0
1722
                    Dim d기준e_y As Double = 0
1723
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1724
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1725

    
1726
                    If (dsx = d기준s_x And dsy = d기준s_y) Or (dsx = d기준e_x And dsy = d기준e_y) Or
1727
                       (dex = d기준s_x And dey = d기준s_y) Or (dex = d기준e_x And dey = d기준e_y) Then
1728
                        bCheck라인 = True
1729
                    End If
1730
                End If
1731
            Next
1732

    
1733
            If bCheck라인 = False Then
1734
                For Each oRow In oLine_Dt.Rows
1735
                    Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1736
                    Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1737
                    Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1738
                    If sBUid <> sUid Then
1739
                        Dim d기준s_x As Double = 0
1740
                        Dim d기준s_y As Double = 0
1741
                        Dim d기준e_x As Double = 0
1742
                        Dim d기준e_y As Double = 0
1743
                        ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1744
                        ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1745
                        If ((dsx - _라인보정기준값 <= d기준s_x And dsx + _라인보정기준값 >= d기준s_x) And (dsy - _라인보정기준값 <= d기준s_y And dsy + _라인보정기준값 >= d기준s_y)) Then
1746
                            oRow(_XML_LINE_STARTPOINT) = dsx & "," & dsy
1747
                            bCheck라인 = True
1748
                            Exit For
1749
                        ElseIf ((dsx - _라인보정기준값 <= d기준e_x And dsx + _라인보정기준값 >= d기준e_x) And (dsy - _라인보정기준값 <= d기준e_y And dsy + _라인보정기준값 >= d기준e_y)) Then
1750
                            oRow(_XML_LINE_ENDPOINT) = dsx & "," & dsy
1751
                            bCheck라인 = True
1752
                            Exit For
1753
                        ElseIf ((dex - _라인보정기준값 <= d기준s_x And dex + _라인보정기준값 >= d기준s_x) And (dey - _라인보정기준값 <= d기준s_y And dey + _라인보정기준값 >= d기준s_y)) Then
1754
                            oRow(_XML_LINE_STARTPOINT) = dex & "," & dey
1755
                            bCheck라인 = True
1756
                            Exit For
1757
                        ElseIf ((dex - _라인보정기준값 <= d기준e_x And dex + _라인보정기준값 >= d기준e_x) And (dey - _라인보정기준값 <= d기준e_y And dey + _라인보정기준값 >= d기준e_y)) Then
1758
                            oRow(_XML_LINE_ENDPOINT) = dex & "," & dey
1759
                            bCheck라인 = True
1760
                            Exit For
1761
                        End If
1762

    
1763
                    End If
1764
                Next
1765
            End If
1766

    
1767
            Return bCheck라인
1768
        Catch ex As Exception
1769
            Return False
1770
        End Try
1771

    
1772

    
1773
    End Function
1774

    
1775
    Private Function FindOverlapLine(ByVal oLine_Dt As DataTable, ByVal sUid As String, ByRef dsx As Double, ByRef dsy As Double,
1776
                                      ByRef dex As Double, ByRef dey As Double)
1777
        Try
1778
            Dim bCheckOverlap As Boolean = False
1779
            For Each oRow In oLine_Dt.Rows
1780
                Dim sStartpoint As String = oRow(_XML_LINE_STARTPOINT).ToString()
1781
                Dim sEndpoint As String = oRow(_XML_LINE_ENDPOINT).ToString()
1782
                Dim sBUid As String = oRow(_XML_LINE_UID).ToString()
1783
                If sBUid <> sUid Then
1784
                    Dim d기준s_x As Double = 0
1785
                    Dim d기준s_y As Double = 0
1786
                    Dim d기준e_x As Double = 0
1787
                    Dim d기준e_y As Double = 0
1788
                    ConvertPointBystring(sStartpoint, d기준s_x, d기준s_y)
1789
                    ConvertPointBystring(sEndpoint, d기준e_x, d기준e_y)
1790
                    If (d기준s_x <= dsx And d기준e_x >= dex And
1791
                        d기준s_y <= dsy And d기준e_y >= dey) Then
1792
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1793
                        If dsy - d기준s_y > d기준e_y - dey Then
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기준s_y - d기준e_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
                        Else
1807
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1808
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1809
                            If dResultCalc < 10 Then
1810
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1811
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1812
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1813
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1814
                                If dCalcStartY = 0 Then
1815
                                    dsy = d기준s_y
1816
                                Else
1817
                                    dsy = dCalcStartY
1818
                                End If
1819
                            End If
1820
                        End If
1821
                        bCheckOverlap = True
1822
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1823
                            d기준s_y <= dey And d기준e_y >= dsy Then
1824
                        '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1825
                        If dey - d기준s_y > d기준e_y - dsy Then
1826
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 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기준s_y - d기준e_y)
1830
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1831
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1832
                                If dCalcStartY = 0 Then
1833
                                    dsy = d기준e_y
1834
                                Else
1835
                                    dsy = dCalcStartY
1836
                                End If
1837

    
1838
                            End If
1839
                            '겹쳐서 오버되는 길이가 오버되지 않는 길이의 10%미만일때 겹치는 y축좌표를 겹치는점까지 설정
1840
                        Else
1841
                            '  Dim dResultCalc As Double = (Math.Abs((dsy - d기준s_y)) / Math.Abs((d기준e_y - dey))) * 100
1842
                            Dim dResultCalc As Double = ((d기준e_y - dey) / (dsy - d기준s_y)) * 100
1843
                            If dResultCalc < 10 Then
1844
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1845
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1846
                                Dim dCalcStartX As Double = Math.Abs(dsx - d기준s_x)
1847
                                Dim dCalcStartY As Double = (dCalcY * dCalcStartX) / dCalcX
1848
                                If dCalcStartY = 0 Then
1849
                                    dey = d기준e_y
1850
                                Else
1851
                                    dey = dCalcStartY
1852
                                End If
1853
                            End If
1854
                        End If
1855
                        bCheckOverlap = True
1856
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1857
                            d기준s_y <= dey And d기준e_y >= dsy Then
1858

    
1859
                        If dsx - d기준s_x > d기준e_x - dex Then
1860
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1861
                            If dResultCalc < 10 Then
1862
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1863
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1864
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1865
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1866
                                If dCalcStartX = 0 Then
1867
                                    dex = d기준e_x
1868
                                Else
1869
                                    dex = dCalcStartX
1870
                                End If
1871
                            End If
1872
                        Else
1873
                            '  Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1874
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1875
                            If dResultCalc < 10 Then
1876
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1877
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1878
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1879
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1880
                                If dCalcStartX = 0 Then
1881
                                    dsx = d기준s_x
1882
                                Else
1883
                                    dsx = dCalcStartX
1884
                                End If
1885
                            End If
1886
                        End If
1887
                        bCheckOverlap = True
1888
                    ElseIf (d기준s_x <= dsx And d기준e_x >= dex) And
1889
                            d기준s_y <= dey And d기준e_y >= dsy Then
1890

    
1891
                        If dex - d기준s_x > d기준e_x - dsx Then
1892
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1893
                            If dResultCalc < 10 Then
1894
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1895
                                Dim dCalcY As Double = Math.Abs(d기준s_y - d기준e_y)
1896
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1897
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1898
                                If dCalcStartX = 0 Then
1899
                                    dsx = d기준e_x
1900
                                Else
1901
                                    dsx = dCalcStartX
1902
                                End If
1903
                            End If
1904
                        Else
1905
                            ' Dim dResultCalc As Double = ((dsy - d기준s_y) / (d기준e_y - dey)) * 100
1906
                            Dim dResultCalc As Double = ((d기준e_x - dex) / (dsx - d기준s_x)) * 100
1907
                            If dResultCalc < 10 Then
1908
                                Dim dCalcX As Double = Math.Abs(d기준e_x - d기준s_x)
1909
                                Dim dCalcY As Double = Math.Abs(d기준e_y - d기준s_y)
1910
                                Dim dCalcStartY As Double = Math.Abs(dsy - d기준s_y)
1911
                                Dim dCalcStartX As Double = (dCalcX * dCalcStartY) / dCalcY
1912
                                If dCalcStartX = 0 Then
1913
                                    dex = d기준s_x
1914
                                Else
1915
                                    dex = dCalcStartX
1916
                                End If
1917
                            End If
1918

    
1919
                        End If
1920
                        bCheckOverlap = True
1921
                    End If
1922
                End If
1923
            Next
1924

    
1925
            Return bCheckOverlap
1926
        Catch ex As Exception
1927
            Return False
1928
        End Try
1929
    End Function
1930

    
1931
    Private Sub CalcSperateLine(ByRef dStartX As Double, ByRef dStartY As Double,
1932
                                      ByRef dEndX As Double, ByRef dEndY As Double)
1933
        Try
1934
            Dim dRange As Double = 1 'Line 전체 길이의 10%씩 늘이기
1935
            If Math.Abs(dStartX - dEndX) > Math.Abs(dStartY - dEndY) Then
1936
                Dim dCalc_x As Double = Math.Abs(dStartX - dEndX) * 0.1
1937
                If dStartX > dEndX Then
1938
                    dStartX = dStartX + dCalc_x
1939
                    dEndX = dEndX - dCalc_x
1940
                Else
1941
                    dEndX = dEndX + dCalc_x
1942
                    dStartX = dStartX - dCalc_x
1943
                End If
1944
            Else
1945
                Dim dCalc_y As Double = Math.Abs(dStartY - dEndY) * 0.1
1946
                If dStartY > dEndY Then
1947
                    dStartY = dStartY + dCalc_y
1948
                    dEndY = dEndY - dCalc_y
1949
                Else
1950
                    dEndY = dEndY + dCalc_y
1951
                    dStartY = dStartY - dCalc_y
1952
                End If
1953
            End If
1954

    
1955

    
1956

    
1957
        Catch ex As Exception
1958

    
1959
        End Try
1960

    
1961

    
1962
    End Sub
1963

    
1964
    Private Function DrawLineNo(ByVal oPipeRun_Dt As DataTable, ByVal CLine_No As Line_no) As Boolean
1965
        Try
1966
            Dim oDatasource As Object = _Placement.PIDDataSource
1967
            Dim sLocation = CLine_No.Location
1968
            Dim dLocationx As Double = 0.0
1969
            Dim dLocationy As Double = 0.0
1970

    
1971
            Dim dX As Double = 0.0
1972
            Dim dY As Double = 0.0
1973
            If ConvertPointBystring(sLocation, dLocationx, dLocationy) Then
1974
                dX = dLocationx
1975
                dY = dLocationy
1976

    
1977
                For Each oRow In oPipeRun_Dt.Rows
1978
                    Dim dStartx As Double = Double.Parse(oRow("startx").ToString())
1979
                    Dim dStarty As Double = Double.Parse(oRow("starty").ToString())
1980
                    Dim dEndx As Double = Double.Parse(oRow("endx").ToString())
1981
                    Dim dEndy As Double = Double.Parse(oRow("endy").ToString())
1982

    
1983
                    Dim dStartSum As Double = Math.Abs(dStartx - dLocationx) + Math.Abs(dStarty - dLocationy)
1984
                    Dim dEndSum As Double = Math.Abs(dEndx - dLocationx) + Math.Abs(dEndy - dLocationy)
1985
                    If dStartSum > dEndSum Then
1986
                        oRow("value") = dEndSum
1987
                    Else
1988
                        oRow("value") = dStartSum
1989
                    End If
1990

    
1991
                Next
1992

    
1993
                Dim dataView As New DataView(oPipeRun_Dt)
1994
                dataView.Sort = " value asc"
1995
                Dim oDt As DataTable = dataView.ToTable()
1996

    
1997
                If oDt.Rows.Count > 0 Then
1998
                    Try
1999
                        Dim oPiperun As LMPipeRun = CType(oDt.Rows(0)("Piperun"), LMPipeRun)
2000
                        ConvertPointByImage(dX, dY, _IMG_X, _IMG_Y)
2001
                        Dim dLineNoLocation(2) As Double
2002
                        dLineNoLocation(1) = dX
2003
                        dLineNoLocation(2) = dY
2004
                        'Label
2005
                        Dim sSystemPath As String = CLine_No.SystemPath
2006
                        Dim dAngle As Double = CLine_No.Angle
2007
                        Dim labelpersist As LMLabelPersist
2008

    
2009
                        For Each representation In oPiperun.Representations
2010
                            If representation.RepresentationType = "Connector" Then
2011
                                labelpersist = _Placement.PIDPlaceLabel(sSystemPath,
2012
                                dLineNoLocation,, dAngle, LabeledItem:=representation)
2013
                                _iPipeLineNocnt = _iPipeLineNocnt + 1
2014
                                SetListBoxItems(ListBox_Result, "Place PipeLineNo Label..(" & dLocationx & "," & dLocationy & ")..." & _iPipeLineNocnt & " count ")
2015
                            End If
2016
                        Next
2017
                    Catch ex As Exception
2018

    
2019
                    End Try
2020

    
2021

    
2022
                End If
2023

    
2024

    
2025

    
2026
                Return True
2027
            Else
2028
                Return False
2029
            End If
2030

    
2031
        Catch ex As Exception
2032
            Return False
2033
        End Try
2034
    End Function
2035

    
2036

    
2037
    Private Sub InitItemCount()
2038
        _iPipeLineNocnt = 0
2039
        _iPipecnt = 0
2040
        _iFittingcnt = 0
2041
        _iValvecnt = 0
2042
        _iInstrumentcnt = 0
2043
        _iEquipmentcnt = 0
2044
        _iNozzlecnt = 1
2045

    
2046
    End Sub
2047

    
2048
    Private Function GetAllCheckNodeCount() As Integer
2049
        _allItem = 0
2050
        For i = 0 To Tree_Result.Nodes.Count - 1
2051
            For j = 0 To Tree_Result.Nodes(i).Nodes.Count - 1
2052
                For k = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes.Count - 1
2053
                    For l = 0 To Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes.Count - 1
2054
                        If Tree_Result.Nodes(i).Nodes(j).Nodes(k).Nodes(l).Checked = True Then
2055
                            _allItem = _allItem + 1
2056
                        End If
2057
                    Next
2058
                Next
2059
            Next
2060
        Next
2061
        Return _allItem
2062
    End Function
2063

    
2064

    
2065
    Private Function AutoModeling() As Boolean
2066
        Try
2067
            _CompleteConvert = False
2068
            Label_Progress.Text = "0%"
2069
            SetListBoxItems(ListBox_Result, " Auto converting 시작....")
2070
            Dim oDwg_Dt As DataTable = LoadAllDrawing()
2071
            _allItem = GetAllCheckNodeCount()
2072
            For Each oDrwing As TreeNode In Tree_Result.Nodes
2073
                For Each oDwgNode As TreeNode In oDrwing.Nodes
2074
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(oDwgNode.Text)
2075
                    Dim CDrawing As Drawing = GetDrawing(sDwgName)
2076
                    If CDrawing IsNot Nothing Then
2077
                        If OpenSPPID(oDwg_Dt, oDwgNode.Text) Then
2078
                            InitItemCount()
2079
                            Dim iAllLineNoCount As Integer = Tree_Result.Nodes.Count ' GetCheckNodeCount(oLinenoNode)
2080
                            Dim iLineNoCount As Integer = 0 ' GetCheckNodeCount(oLinenoNode)
2081
                            SetListBoxItems(ListBox_Result, "Place " & CDrawing.DwgName & "....")
2082
                            For Each oNode As TreeNode In oDwgNode.Nodes
2083
                                Dim iItemcnt As Integer = 0
2084
                                Dim sNodeUid As String = oNode.Name
2085
                                Dim oPipeRun_Dt As DataTable = PipeRun_Dt()
2086

    
2087
                                If sNodeUid <> "PipeLineNo" Then
2088
                                    Dim CLineNo As Line_no = GetLineNo(CDrawing, sNodeUid)
2089
                                    If CLineNo IsNot Nothing Then
2090
                                        Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2091
                                        Dim oSymbol_Dt As DataTable = CLineNo.Dt_Symbol
2092
                                        Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2093
                                        Dim oDrawLinenoLabel As Boolean = False
2094

    
2095
                                        For Each oLineNode As TreeNode In oNode.Nodes
2096
                                            iItemcnt = iItemcnt + 1
2097
                                            Dim sLineUid As String = oLineNode.Name
2098
                                            If oLineNode.Checked Then
2099
                                                Dim sUid As String = oLineNode.Name
2100
                                                If oLine_Dt.Select("[" & _XML_LINE_UID & "]= '" & sUid & "'").Length = 1 Then
2101
                                                    DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt, oPipeRun_Dt)
2102

    
2103
                                                End If
2104
                                                'If oDrawLinenoLabel = False Then
2105
                                                '    DrawLineNo(oPipeRun, CLineNo)
2106
                                                'End If
2107
                                                oDrawLinenoLabel = True
2108
                                            End If
2109
                                            If oNode.Nodes.Count - 1 = iItemcnt And oDrawLinenoLabel Then
2110
                                                Try
2111
                                                    DrawLineNo(oPipeRun_Dt, CLineNo)
2112
                                                Catch ex As Exception
2113

    
2114
                                                End Try
2115

    
2116
                                            End If
2117
                                        Next
2118
                                        For Each oSymbolNode As TreeNode In oNode.Nodes
2119
                                            If oSymbolNode.Checked Then
2120
                                                Dim sUid As String = oSymbolNode.Name
2121
                                                If oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sUid & "'").Length = 1 Then
2122
                                                    DrawSymbol(sUid, sNodeUid, oSymbol_Dt, oAttribute_Dt, CLineNo.Dt_Line)
2123
                                                End If
2124
                                            End If
2125
                                        Next
2126
                                        iLineNoCount = iLineNoCount + 1
2127
                                    End If
2128

    
2129

    
2130
                                    Dim CTrimLineNo As Line_no = GetTrimLineNo(CDrawing, sNodeUid)
2131
                                    If CTrimLineNo IsNot Nothing Then
2132
                                        Dim oLine_Dt As DataTable = CTrimLineNo.Dt_Line
2133
                                        Dim oSymbol_Dt As DataTable = CTrimLineNo.Dt_Symbol
2134
                                        Dim oAttribute_Dt As DataTable = CTrimLineNo.Dt_Attribute
2135
                                        Dim oDrawLinenoLabel As Boolean = False
2136

    
2137
                                        For Each oLineNode As TreeNode In oNode.Nodes
2138
                                            iItemcnt = iItemcnt + 1
2139
                                            Dim sLineUid As String = oLineNode.Name
2140
                                            If oLineNode.Checked Then
2141
                                                Dim sUid As String = oLineNode.Name
2142
                                                If oLine_Dt.Select("[" & _XML_LINE_UID & "]= '" & sUid & "'").Length = 1 Then
2143
                                                    DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt, oPipeRun_Dt)
2144

    
2145
                                                End If
2146
                                                'If oDrawLinenoLabel = False Then
2147
                                                '    DrawLineNo(oPipeRun, CLineNo)
2148
                                                'End If
2149
                                                oDrawLinenoLabel = True
2150
                                            End If
2151
                                        Next
2152
                                        For Each oSymbolNode As TreeNode In oNode.Nodes
2153
                                            If oSymbolNode.Checked Then
2154
                                                Dim sUid As String = oSymbolNode.Name
2155
                                                If oSymbol_Dt.Select("[" & _XML_SYMBOL_UID & "]= '" & sUid & "'").Length = 1 Then
2156
                                                    DrawSymbol(sUid, sNodeUid, oSymbol_Dt, oAttribute_Dt, CTrimLineNo.Dt_Line)
2157
                                                End If
2158
                                            End If
2159
                                        Next
2160
                                        iLineNoCount = iLineNoCount + 1
2161
                                    End If
2162

    
2163
                                    Dim CEqpNo As Eqp_no = GetEqpNo(CDrawing, sNodeUid)
2164
                                    If CEqpNo IsNot Nothing Then
2165
                                        Dim oSymbol_Dt As DataTable = CEqpNo.Dt_Equipment
2166
                                        Dim oAttribute_Dt As DataTable = CEqpNo.Dt_Attribute
2167
                                        For Each oSymbolNode As TreeNode In oNode.Nodes
2168
                                            If oSymbolNode.Checked Then
2169
                                                Dim sUid As String = oSymbolNode.Name
2170
                                                PlaceEquipment(sUid, oSymbol_Dt, oAttribute_Dt)
2171
                                                ' DrawSymbol(sUid, sNodeUid, oSymbol_Dt, oAttribute_Dt, CLineNo.Dt_Line)
2172
                                            End If
2173
                                        Next
2174
                                    End If
2175
                                Else
2176
                                    Dim oDrawLinenoLabel As Boolean = False
2177
                                    For Each oLineNode As TreeNode In oNode.Nodes
2178
                                        Dim CLineNo As Line_no = GetOnlyPipeLineNo(CDrawing, oLineNode.Name)
2179
                                        Dim oAttribute_Dt As DataTable = CLineNo.Dt_Attribute
2180
                                        Dim oLine_Dt As DataTable = CLineNo.Dt_Line
2181
                                        Dim sLineUid As String = oLineNode.Name
2182
                                        If oLineNode.Checked Then
2183
                                            Dim sUid As String = oLineNode.Name
2184
                                            DrawLine(sUid, sNodeUid, oLine_Dt, oAttribute_Dt, oPipeRun_Dt)
2185
                                        End If
2186
                                    Next
2187
                                End If
2188

    
2189

    
2190

    
2191
                            Next
2192
                        End If
2193
                    End If
2194
                Next
2195
            Next
2196
            SetProgressbar(ProgressBar_Status, 100)
2197
            Label_Progress.Text = "100%"
2198
            SetListBoxItems(ListBox_Result, " Auto converting 완료")
2199
            _CompleteConvert = True
2200
            Return True
2201
        Catch ex As Exception
2202
            Return False
2203
        End Try
2204
    End Function
2205

    
2206

    
2207

    
2208
    Private Sub ThreadConvert()
2209
        If _DrawingsList IsNot Nothing Then
2210
            If _DrawingsList.Count > 0 Then
2211
                AutoModeling()
2212
            End If
2213
        End If
2214
    End Sub
2215

    
2216
    Private Sub ThreadOPCRemove()
2217
        While _CompleteConvert = False
2218
            Dim oFindOPC As New FindOpc
2219
            oFindOPC.RemoveOPCDlg()
2220
        End While
2221

    
2222
    End Sub
2223

    
2224

    
2225
    Private Function OpenDrawing(ByVal oDt As DataTable, ByVal sDwgName As String) As String
2226
        Dim oRows As DataRow() = oDt.Select("[Name] = '" & sDwgName & "'")
2227
        Dim oPath As String = ""
2228
        If oRows.Length > 0 Then
2229
            oPath = oRows(0).Item("Path").ToString()
2230
        End If
2231
        Return oPath
2232
    End Function
2233

    
2234
    Private Sub LoadXmlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LoadXmlToolStripMenuItem.Click
2235
        If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
2236
            LoadDB()
2237
            LoadXmlItem(FolderBrowserDialog1.SelectedPath)
2238
        End If
2239
    End Sub
2240
    Private Sub LoadXmlItem(ByVal sFolderPath As String)
2241
        _DrawingsList = New List(Of Drawing)
2242
        Dim sfileEntries As String() = Directory.GetFiles(sFolderPath)
2243
        If Tree_Result.Nodes.Count > 0 Then
2244
            Tree_Result.Nodes(0).Nodes.Clear()
2245
            For Each sfileName In sfileEntries
2246
                Dim sExtension As String = Path.GetExtension(sfileName)
2247
                If sExtension = ".xml" Then
2248
                    Dim sDwgName As String = Path.GetFileNameWithoutExtension(sfileName)
2249
                    Dim sDwgPath As String = sfileName
2250
                    Dim oNode As TreeNode = Tree_Result.Nodes(0).Nodes.Add(sDwgPath, sDwgName, 15)
2251
                    Dim oDwg As Drawing = AddSymbolItem(sDwgPath, oNode)
2252
                    _DrawingsList.Add(oDwg)
2253
                End If
2254
            Next
2255
            Tree_Result.Nodes(0).Expand()
2256
        End If
2257
    End Sub
2258

    
2259

    
2260
    ''' <summary>
2261
    '''  XML Tree 구조 생성 
2262
    ''' </summary>
2263
    ''' <param name="sDwgPath"></param>
2264
    Private Function AddSymbolItem(ByVal sDwgPath As String, ByVal oParentNode As TreeNode) As Drawing
2265
        Dim oDwg_Ds As Drawing = LoadSymbolInXml(sDwgPath)
2266
        If oDwg_Ds IsNot Nothing Then
2267
            Dim oLineLists As List(Of Line_no) = oDwg_Ds.Line_nos
2268

    
2269
            Dim oEqpLists As List(Of Eqp_no) = oDwg_Ds.Eqp_nos
2270

    
2271
            Dim oTrimLineLists As List(Of Line_no) = oDwg_Ds.TrimLine_nos
2272

    
2273
            Dim oPipe As Boolean = False
2274
            Dim oFitting As Boolean = False
2275
            Dim oOnlyPipesNode As TreeNode
2276
            Dim oOnlyFittingsNode As TreeNode
2277
            'PipeLine 구분
2278

    
2279
            For Each oLinelist In oLineLists
2280
                Dim sLineNoUid As String = oLinelist.Uid
2281
                Dim sLineNo As String = oLinelist.Text
2282
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
2283
                For Each oLineRow In oLinelist.Dt_Line.Rows
2284
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
2285
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
2286
                    oPipeNode.Tag = sLineNoUid
2287
                Next
2288
                For Each oSymbolRow In oLinelist.Dt_Symbol.Rows
2289
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2290
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2291
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
2292
                    oSymbolNode.Tag = sLineNoUid
2293
                Next
2294
            Next
2295

    
2296
            For Each oEqplist In oEqpLists
2297
                Dim sEqpUid As String = oEqplist.Uid
2298
                Dim sEqpNo As String = "EQUIPMENT"
2299
                Dim oEqpNode As TreeNode = oParentNode.Nodes.Add(sEqpUid, sEqpNo)
2300

    
2301

    
2302
                For Each oSymbolRow In oEqplist.Dt_Equipment.Rows
2303
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2304
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2305
                    Dim oSymbolNode As TreeNode = oEqpNode.Nodes.Add(sSymbolUid, sSymbolName)
2306
                    oSymbolNode.Tag = sEqpUid
2307
                Next
2308
            Next
2309
            Dim sTrimLine As String = "TrimLineNos"
2310
            Dim iTrimLinecnt As Integer = 1
2311
            For Each oTrimLinelist In oTrimLineLists
2312
                Dim sLineNoUid As String = oTrimLinelist.Uid
2313
                Dim sLineNo As String = sTrimLine & "_" & iTrimLinecnt
2314
                Dim oLineNoNode As TreeNode = oParentNode.Nodes.Add(sLineNoUid, sLineNo)
2315
                For Each oLineRow In oTrimLinelist.Dt_Line.Rows
2316
                    Dim sLineUid As String = oLineRow(_XML_LINE_UID)
2317
                    Dim oPipeNode As TreeNode = oLineNoNode.Nodes.Add(sLineUid, "Pipe")
2318
                    oPipeNode.Tag = sLineNoUid
2319
                Next
2320
                For Each oSymbolRow In oTrimLinelist.Dt_Symbol.Rows
2321
                    Dim sSymbolUid As String = oSymbolRow(_XML_SYMBOL_UID)
2322
                    Dim sSymbolName As String = oSymbolRow(_XML_SYMBOL_NAME)
2323
                    Dim oSymbolNode As TreeNode = oLineNoNode.Nodes.Add(sSymbolUid, sSymbolName)
2324
                    oSymbolNode.Tag = sLineNoUid
2325
                Next
2326
                iTrimLinecnt = iTrimLinecnt + 1
2327
            Next
2328

    
2329
        End If
2330

    
2331
        Return oDwg_Ds
2332
    End Function
2333
    Private Sub Tree_Result_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles Tree_Result.AfterCheck
2334
        If e.Node.Checked = True Then
2335
            For Each oNode As TreeNode In e.Node.Nodes
2336
                oNode.Checked = True
2337
            Next
2338
        Else
2339
            For Each oNode As TreeNode In e.Node.Nodes
2340
                oNode.Checked = False
2341
            Next
2342
        End If
2343
    End Sub
2344

    
2345
    Private Sub Btn_Setting_Click(sender As Object, e As EventArgs) Handles Btn_Setting.Click
2346
        Dim oSettings As Settings = New Settings()
2347
        oSettings.ShowDialog()
2348
    End Sub
2349

    
2350
    Private Sub Btn_TestNozzle_Click(sender As Object, e As EventArgs) Handles Btn_TestNozzle.Click
2351

    
2352
        Dim sVessel_ID As String = "841D5E640AE5421B9A017DDC2E87FF11"
2353
        Dim objVessel As LMVessel
2354
        objVessel = _Placement.PIDDataSource.GetVessel(sVessel_ID)
2355
        Dim oVesselLocation As LMLocations = objVessel.Locations
2356
        Dim symVessel As LMSymbol = _Placement.PIDDataSource.GetSymbol(objVessel.Representations.Nth(1).Id)
2357
        Dim XCoordinate As String = symVessel.Attributes("XCoordinate").Value
2358
        Dim YCoordinate As String = symVessel.Attributes("YCoordinate").Value
2359
        symVessel.Attributes("XCoordinate").Value = XCoordinate + 0.01
2360
        symVessel.Attributes("YCoordinate").Value = YCoordinate + 0.01
2361
        symVessel.Commit()
2362
        Dim sValve_ID As String = "DB7B0CA8A2664A6BA7A9615764BA62B0"
2363
        Dim objValve As LMSymbol
2364
        Dim objValves As LMPipingComp = _Placement.PIDDataSource.GetPipingComp(sValve_ID)
2365

    
2366
        objValve = _Placement.PIDDataSource.GetSymbol(objValves.Representations.Nth(1).Id)
2367
        objValve.Commit()
2368
        Dim dVesselX As Double = XCoordinate
2369
        Dim dVesselY As Double = YCoordinate
2370
        Dim X1 As Double, Y1 As Double, X2 As Double, Y2 As Double
2371

    
2372
        _Placement.PIDConnectPointLocation(objValve, 1, X1, Y1)
2373

    
2374
        _Placement.PIDConnectPointLocation(objValve, 2, X2, Y2)
2375

    
2376
        Dim nozzlename As String = "\Equipment Components\Nozzles\Flanged Nozzle.sym"
2377
        Dim dCalc_x As Double = 0
2378
        Dim dCalc_y As Double = 0
2379

    
2380
        If dVesselX - X2 > 0 Then
2381
            dCalc_x = dVesselX - (dVesselX - X2)
2382
        Else
2383
            dCalc_x = dVesselX + (X2 - dVesselX)
2384
        End If
2385
        If dVesselY - Y2 > 0 Then
2386
            dCalc_y = dVesselY - (dVesselY - Y2)
2387
        Else
2388
            dCalc_y = dVesselY + (Y2 - dVesselY)
2389
        End If
2390

    
2391
        Dim objNozzle As LMSymbol = _Placement.PIDPlaceSymbol(nozzlename, dCalc_x, dCalc_y,
2392
            TargetItem:=symVessel.AsLMRepresentation)
2393

    
2394
        Dim blnSuccess As Boolean = _Placement.PIDConnectPointLocation(objNozzle, 1, X1, Y1)
2395
        blnSuccess = _Placement.PIDConnectPointLocation(objNozzle, 2, X1, Y1)
2396

    
2397
        objValve = _Placement.PIDPlaceSymbol(objValve.FileName, X1, Y1, ExistingItem:=objValve.AsLMAItem,
2398
          TargetItem:=objNozzle.AsLMRepresentation)
2399

    
2400

    
2401

    
2402
    End Sub
2403

    
2404
    Private Sub Btn_SymbolLibrary_Click(sender As Object, e As EventArgs) Handles Btn_SymbolLibrary.Click
2405
        Dim oMapping As New Mapping(_PIDSymbol_DB)
2406
        oMapping.Show()
2407
    End Sub
2408

    
2409
    Private Sub Btn_Stop_Click(sender As Object, e As EventArgs) Handles Btn_Stop.Click
2410
        Try
2411
            SetListBoxItems(ListBox_Result, " Auto converting 중지....")
2412
            _Main_trd.Abort()
2413
            _Opc_trd.Abort()
2414
        Catch ex As Exception
2415

    
2416
        End Try
2417
    End Sub
2418
End Class
2419

    
2420

    
2421
Public Class DrawingInfo
2422
    Public mDrawingName As String
2423
    Public mSpID As String
2424
    Public mPath As String
2425
End Class
2426

    
2427

    
2428

    
2429

    
2430

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