프로젝트

일반

사용자정보

개정판 1dbb865c

ID1dbb865c2823f9ed52e2d2181b15ede7e96b3881
상위 01ca0061
하위 c7613906

gaqhf 이(가) 6년 이상 전에 추가함

dev issue #563: 라인 연계 로직 수정

차이점 보기:

DTI_PID/DTI_PID/ItemTreeWidget.py
466 466
        return None
467 467

  
468 468
    '''
469
        @brief  Init LineNoItems child
470
        @author kyouho
471
        @date   2018.09.17
472
    '''
473
    def InitLineNoItems(self):
474
        
475
        removeLineItem = []
476
        for lineIndex in range(self.LineNoTreeItem.childCount()):
477
            ## LineNoItem, TrimLine Item
478
            lineItem = self.LineNoTreeItem.child(lineIndex)
479

  
480
            removeRunItem = []
481
            for runIndex in range(lineItem.childCount()):
482
                ## RUN Item
483
                runItem = lineItem.child(runIndex)
484
                for symbolIndex in range(runItem.childCount()):
485
                    symbolItem = runItem.child(0)
486
                    symbol = symbolItem.data(0, self.TREE_DATA_ROLE)
487

  
488
                    symbolItem.parent().removeChild(symbolItem)
489

  
490
                    if AppDocData.instance().isEquipmentType(symbol.type):
491
                        symbolsRootItem = self.findItems('EQUIPMENTS', Qt.MatchExactly|Qt.MatchRecursive, 0)
492
                        symbolsRootItem = symbolsRootItem[0]
493
                        symbolsRootItem.addChild(symbolItem)
494
                    else:
495
                        symbolsRootItem = self.findItems('SYMBOLS', Qt.MatchExactly|Qt.MatchRecursive, 0)
496
                        symbolsRootItem = symbolsRootItem[0]
497
                        symbolsRootItem.addChild(symbolItem)
498
                ## 지울 Item 모음
499
                removeRunItem.append(runItem)
500
            ## Run Item들 삭제
501
            for removeItem in removeRunItem:
502
                lineItem.removeChild(removeItem)
503
            ## 지울 Trim Line 모음
504
            if lineItem.text(0) == 'Trim Line':
505
                removeLineItem.append(lineItem)
506
        ## Trim Line들 삭제
507
        for removeItem in removeLineItem:
508
            self.LineNoTreeItem.removeChild(removeItem)
509

  
510
    '''
469 511
        @brief      Find QTreeWidgetItem by SymbolSvgItem object
470 512
        @author     Jeongwoo
471 513
        @date       18.04.11
DTI_PID/DTI_PID/LineNoTracer.py
45 45

  
46 46
        connectedItems = []
47 47
        if 1 == len(lineno.conns):
48
            for index in range(len(lineno._attrs)):
49
                if type(lineno._attrs[index]) is tuple and lineno._attrs[index][0] == 'CONN':
50
                    lineno._attrs[index] = ('CONN', lineno.conns[0].uid)
51
                    break
52 48
            connectedItems = self.findConnectedObjects(lineno.conns[0], toler=10)
53 49
            for item in connectedItems: item.owner = lineno # set item's owner
54 50
            
......
118 114
                configs = docData.getConfigs('Line No', 'Configuration')
119 115

  
120 116
                docData.lineNos.clear()
121
                for lineNo in self._lineNos: lineNo.conns.clear()
117
                
118
                ## 기존에 찾은 것 유지
119
                #for lineNo in self._lineNos:
120
                #    lineNo.conns.clear()
121

  
122 122
                docData.lineNos = self._lineNos
123 123
                for lineno in docData.lineNos:
124
                    ## CONN은 유지
125
                    if lineno.conns:
126
                        continue
127

  
124 128
                    minDist = None
125 129
                    startLine = None
126 130
                    for line in self._lines:
......
269 273
    @author     humkyung
270 274
    @date       2018.06.17
271 275
    @history    humkyung 2018.06.21 paste connect attributes codes from recognizeLine function
276
                kyouho  2018.09.14  clear Item's owner 
272 277
'''
273 278
def connectAttrImpl(worker):
274 279
    from LineNoTracer import LineNoTracer
......
284 289
            if type(item) is QEngineeringSpecBreakItem:
285 290
                specBreak.append(item)
286 291
            elif issubclass(type(item), SymbolSvgItem):
292
                item.owner = None
287 293
                symbols.append(item)
288 294
            elif type(item) is QEngineeringLineNoTextItem:
295
                item.owner = None
296
                item.runs.clear()
289 297
                lineNos.append(item)
290 298
            elif type(item) is QEngineeringLineItem:
299
                item.owner = None
291 300
                lines.append(item)
292 301

  
293 302
        # trace line no
DTI_PID/DTI_PID/MainWindow.py
360 360
                connCell = self.resultPropertyTableWidget.item(row, 0)
361 361
                if connCell.text() == 'CONN':
362 362
                    ## Line No Text Item의 CONN 속성 초기화
363
                    for index in range(len(items[0]._attrs)):
364
                        if type(items[0]._attrs[index]) is tuple and items[0]._attrs[index][0] == 'CONN':
365
                            items[0]._attrs[index] = (('CONN',''))
363
                    items[0].conns.clear()
366 364

  
367 365
                    self.graphicsView.command = SelectAttributeCommand.SelectAttributeCommand(self.graphicsView)
368 366
                    self.graphicsView.command.setType('Line Item')
......
1032 1030
            self.dlgConnectAttr = QConnectAttrDialog(self, self.graphicsView)
1033 1031
            self.dlgConnectAttr.exec_()
1034 1032

  
1033
            self.resultTreeWidget.InitLineNoItems()
1034

  
1035 1035
            # construct line no item
1036 1036
            docData = AppDocData.instance()
1037 1037
            for lineno in docData.lineNos:
1038 1038
                item = self.resultTreeWidget.addTreeItem(self.resultTreeWidget.root, lineno)
1039 1039
                connectedItems = lineno.getConnectedItems()
1040 1040
                for connectedItem in connectedItems:
1041
                    if issubclass(type(connectedItem), SymbolSvgItem): self.resultTreeWidget.addTreeItem(item, connectedItem)
1041
                    if issubclass(type(connectedItem), SymbolSvgItem): 
1042
                        self.resultTreeWidget.addTreeItem(item, connectedItem)
1042 1043
            # up to here
1043 1044
        except Exception as ex:
1044 1045
            message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)
......
1433 1434
                    for attr in lineNo.iter('ATTRIBUTE'):
1434 1435
                        item._attrs.append((attr.find('NAME').text, attr.find('VALUE').text))
1435 1436

  
1437
                connLine = lineNo.find('CONNLINE')
1438
                if connLine is not None:
1439
                    lineUID = connLine.text
1440
                    connLine = self.graphicsView.findItemByUid(lineUID)
1441
                    if connLine is not None:
1442
                        item.conns.append(connLine)
1443

  
1436 1444
                run = lineNo.find('RUN')
1437 1445
                if run is not None:
1438 1446
                    lineRunItem = QEngineeringRunItem()
DTI_PID/DTI_PID/QtImageViewer.py
333 333
                        items = self.scene.selectedItems()
334 334
                        if self.command.resultItem is not None and items is not None and len(items) == 1 and self.command.getType() == 'Line Item':
335 335
                            items = self.scene.selectedItems()
336
                            for index in range(len(items[0]._attrs)):
337
                                if type(items[0]._attrs[index]) is tuple and items[0]._attrs[index][0] == 'CONN':
338
                                    items[0]._attrs[index] = ('CONN', self.command.resultItem.uid)
339
                                    break
336
                            items[0].conns.clear()
337
                            items[0].conns.append(self.command.resultItem)
338
                            
340 339
                            self.mainWindow.refreshResultPropertyTableWidget()
341 340
                        elif self.command.resultItem is not None and items is not None and len(items) == 1:
342 341
                            attrItem = self.command.resultItem
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py
466 466
                for i in range(len(obj.connectors)):
467 467
                    pt = obj.connectors[i].sceneConnectPoint
468 468

  
469
                    if (self.connectors[0].connectedItem is None) and (Point(startPt[0], startPt[1]).distance(Point(pt[0], pt[1])) < toler):
470
                        self.connectors[0].connectedItem = obj 
471
                        obj.connectors[i].connectedItem = self
469
                    if (Point(startPt[0], startPt[1]).distance(Point(pt[0], pt[1])) < toler):
470
                        if self.connectors[0].connectedItem is None:
471
                            self.connectors[0].connectedItem = obj 
472
                        if obj.connectors[i].connectedItem is None:
473
                            obj.connectors[i].connectedItem = self
474

  
472 475
                        res.append(obj)
473
                    if (self.connectors[1].connectedItem is None) and (Point(endPt[0], endPt[1]).distance(Point(pt[0], pt[1])) < toler):
474
                        self.connectors[1].connectedItem = obj
475
                        obj.connectors[i].connectedItem = self
476
                    if (Point(endPt[0], endPt[1]).distance(Point(pt[0], pt[1])) < toler):
477
                        if self.connectors[1].connectedItem is None:
478
                            self.connectors[1].connectedItem = obj
479
                        if obj.connectors[i].connectedItem is None:
480
                            obj.connectors[i].connectedItem = self
481

  
476 482
                        res.append(obj)
477 483
            elif type(obj) is QEngineeringLineItem:
478 484
                _startPt = obj.startPoint()
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py
124 124
            for attr in self._attrs:
125 125
                if type(attr) is UserInputAttribute:
126 126
                    attrs[attr.attribute] = attr.text
127
                elif type(attr) is tuple:
128
                    attrs[attr[0]] = attr[1]
129 127

  
128
            attrs['CONN'] = self.conns[0].uid if self.conns else ''
130 129
        except Exception as ex:
131 130
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
132 131
        
......
202 201
                    node.append(attrNode) 
203 202
                else:
204 203
                    node.append(attr.toXml())
204
           
205
            if self.conns:
206
                connNode = Element('CONNLINE')
207
                connNode.text = self.conns[0].uid
208
                node.append(connNode)
209

  
205 210
        except Exception as ex:
206 211
            return str(self.uid)
207 212
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py
224 224
            startPt = obj.startPoint()
225 225
            endPt = obj.endPoint()
226 226
            for i in range(len(self.connectors)):
227
                if (self.connectors[i].connectedItem is None) and (Point(startPt[0], startPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler):
228
                    self.connectors[i].connectedItem = obj 
229
                    obj.connectors[0].connectedItem = self
227
                if (Point(startPt[0], startPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler):
228
                    if self.connectors[i].connectedItem is None:
229
                        self.connectors[i].connectedItem = obj
230
                    if obj.connectors[0].connectedItem is None:
231
                        obj.connectors[0].connectedItem = self
232
                    
230 233
                    res.append(obj)
231
                if (self.connectors[i].connectedItem is None) and (Point(endPt[0], endPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler):
232
                    self.connectors[i].connectedItem = obj
233
                    obj.connectors[1].connectedItem = self
234
                if (Point(endPt[0], endPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler):
235
                    if self.connectors[i].connectedItem is None:
236
                        self.connectors[i].connectedItem = obj
237
                    if obj.connectors[1].connectedItem is None:
238
                        obj.connectors[1].connectedItem = self
239
                    
234 240
                    res.append(obj)
235 241
        elif issubclass(type(obj), SymbolSvgItem):
236 242
            for i in range(len(self.connectors)):
237 243
                for j in range(len(obj.connectors)):
238 244
                    _pt = Point(obj.connectors[j].sceneConnectPoint[0], obj.connectors[j].sceneConnectPoint[1])
239
                    if (self.connectors[i].connectedItem is None) and (_pt.distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler):
240
                        self.connectors[i].connectedItem = obj 
241
                        obj.connectors[j].connectedItem = self
245
                    if (_pt.distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler):
246
                        if self.connectors[i].connectedItem is None:
247
                            self.connectors[i].connectedItem = obj
248
                        if obj.connectors[j].connectedItem is none :
249
                            obj.connectors[j].connectedItem = self
250

  
242 251
                        res.append(obj)
243 252

  
244 253
        return res

내보내기 Unified diff