프로젝트

일반

사용자정보

개정판 423d6366

ID423d63665e03b55cc8cc3b01580782a6b5ba5f55
상위 e215fb87
하위 67ee040a, 21ae137d

함의성이(가) 약 6년 전에 추가함

issue #538: add end break creation conditions

Change-Id: I1ad4012130701c34449c7f9e808d7f1857eb9a33

차이점 보기:

DTI_PID/DTI_PID/LineNoTracer.py
406 406
                kyouho  2018.09.14  clear Item's owner 
407 407
'''
408 408
def connectAttrImpl(worker, update_line_type):
409
    import os
410
    from App import App
409 411
    from LineNoTracer import LineNoTracer
410 412
    from AppDocData import AppDocData
411 413
    from EngineeringSpecBreakItem import QEngineeringSpecBreakItem
......
477 479
            for line in lines: line.update_line_type()
478 480

  
479 481
        """make end break"""
480
        end_breaks = []
481
        for lineNo in lineNos:
482
            for end_break in lineNo.end_break():
483
                end_breaks.append(end_break)
484
        
485
            for end_break in end_breaks:
486
                end_break.addSvgItemToScene(worker.graphicsView.scene)
482
        docdata = AppDocData.instance()
487 483

  
488
        if end_breaks:
484
        end_break_names = docdata.getSymbolListByType('type', 'End Break')
485
        if len(end_break_names) is not 0:
486
                
487
            svgFileName = end_break_names[0].sName
488
            symbol = AppDocData.instance().getSymbolByQuery('name', svgFileName)
489
            svgFilePath = os.path.join(AppDocData.instance().getCurrentProject().getSvgFilePath(), symbol.getType(), svgFileName+'.svg')
490

  
491
            end_breaks = []
492
            lineNo_froms = []
493
            lineNo_tos = []
494

  
495
            for lineNo in lineNos:
496
                lineNo_froms.append(lineNo.prop('From'))
497
                lineNo_tos.append(lineNo.prop('To'))
498
                end_breaks.extend(lineNo.end_break())
499
            
500
            for lineNo_from in lineNo_froms + lineNo_tos:
501
                for connector in lineNo_from.connectors:
502
                    for lineNo_to in lineNo_tos + lineNo_froms:
503
                        if lineNo_from is lineNo_to: continue
504
                        if connector.connectedItem is lineNo_to:
505
                            end_break = SymbolSvgItem.createItem(symbol.getType(), svgFilePath)
506
                            pt = [connector.center()[0] - float(symbol.getOriginalPoint().split(',')[0]), connector.center()[1] - float(symbol.getOriginalPoint().split(',')[1])]
507
                            origin = [0,0]
508
                            if 2 == len(symbol.getOriginalPoint().split(',')):
509
                                tokens = symbol.getOriginalPoint().split(',')
510
                                origin = [pt[0] + float(tokens[0]), pt[1] + float(tokens[1])]
511
                            end_break.buildItem(svgFileName, symbol.getType(), 5.7, pt, [end_break.boundingRect().width(), end_break.boundingRect().height()], origin, [], symbol.getBaseSymbol(), symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel())
512
            
513
                            end_break.set_property('Connected Item', lineNo_to)
514
                            end_break.setToolTip('owner : ' + str(lineNo_from))
515
                            end_break.area = 'Drawing'
516
                            end_break.owner = lineNo_from
517
                            end_breaks.append(end_break)
518
            
519
            if end_breaks:
489 520
            # check dulplication
490
            dupl = set()
491
            for i in range(len(end_breaks)):
492
                for j in range(len(end_breaks)):
493
                    if i == j:
494
                        continue
495
                    else:
496
                        setI = set([end_breaks[i].owner, end_breaks[i].prop('Connected Item')])
497
                        setJ = set([end_breaks[j].owner, end_breaks[j].prop('Connected Item')])
498
                        if not (setI - setJ):
499
                            index = [i, j]
500
                            index.sort()
501
                            index = tuple(index)
502
                            dupl.add(index)
503

  
504
            dupl = [indexSet[1] for indexSet in list(dupl)]
505
            dupl.sort(reverse=True)
506
            for index in dupl:
507
                end_breaks.pop(index)
521
                dupl = set()
522
                for i in range(len(end_breaks)):
523
                    for j in range(len(end_breaks)):
524
                        if i == j: continue
525
                        else:
526
                            setI = set([end_breaks[i].owner, end_breaks[i].prop('Connected Item')])
527
                            setJ = set([end_breaks[j].owner, end_breaks[j].prop('Connected Item')])
528
                            if not (setI - setJ):
529
                                index = [i, j]
530
                                index.sort()
531
                                index = tuple(index)
532
                                dupl.add(index)
533
                #print(dupl)
534
                dupl = list(set([indexSet[1] for indexSet in list(dupl)]))
535
                dupl.sort(reverse=True)
536
                #print(dupl)
537
                for index in dupl:
538
                    end_breaks.pop(index)
539

  
540
                for end_break in end_breaks:
541
                    end_break.transfer.onRemoved.connect(App.mainWnd().itemRemoved)
542
                    end_break.addSvgItemToScene(worker.graphicsView.scene)
508 543

  
509 544
    except Exception as ex:
510 545
        from App import App 
......
512 547
        App.mainWnd().addMessage.emit(MessageType.Error, message)
513 548
    finally:
514 549
        worker.finished.emit()
550

  
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py
369 369
            @brief  end break check
370 370
            @author euisung
371 371
            @date   2019.05.07
372
            @history    2019.05.19  euisung    can cover only line to line, line to symbol and symbol to symbol will be checked in linenotracer
372 373
        '''
373 374
        from EngineeringLineItem import QEngineeringLineItem
374 375
        from SymbolSvgItem import SymbolSvgItem
......
377 378

  
378 379
        try:
379 380
            docdata = AppDocData.instance()
380
            dataPath = docdata.getErrorItemSvgPath()
381
            origin = [int(pt) for pt in docdata.getAppConfigs('app', 'error origin point')[0].value.split(',')]
382 381

  
383 382
            line_from = self.prop('From')
384 383
            line_to = self.prop('To')
......
391 390
            symbol = AppDocData.instance().getSymbolByQuery('name', svgFileName)
392 391
            svgFilePath = os.path.join(AppDocData.instance().getCurrentProject().getSvgFilePath(), symbol.getType(), svgFileName+'.svg')
393 392

  
394
            if (type(line_from) is QEngineeringLineItem or issubclass(type(line_from), SymbolSvgItem)) and line_from.connectors[0].connectedItem is not None and (type(line_from.connectors[0].connectedItem) is QEngineeringLineItem or issubclass(type(line_from.connectors[0].connectedItem), SymbolSvgItem)):
393
            
394
            if type(line_from) is QEngineeringLineItem and line_from.connectors[0].connectedItem is not None and type(line_from.connectors[0].connectedItem) is QEngineeringLineItem:
395 395
                end_break = SymbolSvgItem.createItem(symbol.getType(), svgFilePath)
396 396
                pt = [line_from.connectors[0].center()[0] - float(symbol.getOriginalPoint().split(',')[0]), line_from.connectors[0].center()[1] - float(symbol.getOriginalPoint().split(',')[1])]
397 397
                origin = [0,0]
......
400 400
                    origin = [pt[0] + float(tokens[0]), pt[1] + float(tokens[1])]
401 401
                end_break.buildItem(svgFileName, symbol.getType(), 5.7, pt, [end_break.boundingRect().width(), end_break.boundingRect().height()], origin, [], symbol.getBaseSymbol(), symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel())
402 402
                #end_break.connected_lines = [line_from.uid, line_from.connectors[0].connectedItem.uid]
403
                attrs = end_break.getAttributes()
403
                #attrs = end_break.getAttributes()
404 404
                #for attr in attrs.keys():
405 405
                #    if attr.Attribute == 'Connected Line':
406 406
                #        attrs[attr] = str(line_from.connectors[0].connectedItem.uid)
......
412 412
                end_break.owner = line_from
413 413
                end_breaks.append(end_break)
414 414

  
415
            if (type(line_to) is QEngineeringLineItem or issubclass(type(line_to), SymbolSvgItem)) and line_to.connectors[1].connectedItem is not None and (type(line_from.connectors[1].connectedItem) is QEngineeringLineItem or issubclass(type(line_from.connectors[1].connectedItem), SymbolSvgItem)):
415
            if type(line_to) is QEngineeringLineItem and line_to.connectors[1].connectedItem is not None and type(line_from.connectors[1].connectedItem) is QEngineeringLineItem:
416 416
                end_break = SymbolSvgItem.createItem(symbol.getType(), svgFilePath)
417 417
                pt = [line_to.connectors[1].center()[0] - float(symbol.getOriginalPoint().split(',')[0]), line_to.connectors[1].center()[1] - float(symbol.getOriginalPoint().split(',')[1])]
418 418
                origin = [0,0]
......
421 421
                    origin = [pt[0] + float(tokens[0]), pt[1] + float(tokens[1])]
422 422
                end_break.buildItem(svgFileName, symbol.getType(), 5.7, pt, [end_break.boundingRect().width(), end_break.boundingRect().height()], origin, [], symbol.getBaseSymbol(), symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel())
423 423
                #end_break.connected_lines = [line_to.uid, line_to.connectors[1].connectedItem.uid]
424
                attrs = end_break.getAttributes()
424
                #attrs = end_break.getAttributes()
425 425
                #for attr in attrs.keys():
426 426
                #    if attr.Attribute == 'Connected Line':
427 427
                #        attrs[attr] = str(line_to.connectors[1].connectedItem.uid)

내보내기 Unified diff

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