프로젝트

일반

사용자정보

개정판 dc379815

IDdc379815cd7137761978ac2f4a2039f3dc376675
상위 0d987bb7
하위 e93a1840

함의성이(가) 4년 이상 전에 추가함

issue #563: inst tracer on going

Change-Id: Ia21e7f09d20f3d443cbc2b9627a515136eec7dba

차이점 보기:

DTI_PID/DTI_PID/LineNoTracer.py
1523 1523
        worker.display_message.emit(message)
1524 1524

  
1525 1525
async def connectAttrImpl_inst(worker, update_line_type, update_flow_mark, update_spec):
1526
    pass
1526
    from App import App
1527
    import uuid
1528
    from LineNoTracer import LineNoTracer
1529
    from AppDocData import AppDocData
1530
    from EngineeringAbstractItem import QEngineeringAbstractItem
1531
    from EngineeringSpecBreakItem import QEngineeringSpecBreakItem
1532
    from EngineeringInstrumentItem import QEngineeringInstrumentItem
1533
    from EngineeringReducerItem import QEngineeringReducerItem
1534
    from EngineeringEquipmentItem import QEngineeringEquipmentItem
1535
    from QEngineeringOPCItem import QEngineeringOPCItem
1536
    from EngineeringSpecBreakItem import QEngineeringSpecBreakItem
1537
    from EngineeringVendorItem import QEngineeringVendorItem
1538
    from EngineeringEndBreakItem import QEngineeringEndBreakItem
1539
    from EngineeringFlowMarkItem import QEngineeringFlowMarkItem
1540
    from EngineeringReservedWordTextItem import QEngineeringReservedWordTextItem
1541
    from QEngineeringSizeTextItem import QEngineeringSizeTextItem
1542
    from EngineeringValveOperCodeTextItem import QEngineeringValveOperCodeTextItem
1543
    from QEngineeringTrimLineNoTextItem import QEngineeringTrimLineNoTextItem
1544
    from QEngineeringTagNoTextItem import QEngineeringTagNoTextItem
1545
    from EngineeringErrorItem import QEngineeringErrorItem
1546
    from EngineeringTextItem import QEngineeringTextItem
1547
    from SpecialItemTypesDialog import SpecialItemTracer
1548

  
1549
    try:
1550
        docdata = AppDocData.instance()
1551
        worker.display_message.emit('Initializing...')
1552

  
1553
        ALL_ITEM = [item for item in worker.scene.items() if issubclass(type(item), QEngineeringAbstractItem)]
1554
        for item in ALL_ITEM:
1555
            item.setVisible(False)
1556
        QApplication.processEvents()
1557

  
1558
        symbols = []
1559
        lines = [item for item in worker.scene.items() if type(item) is QEngineeringLineItem]
1560
        lineNos = []
1561
        equip_packages = []
1562
        end_breaks = []
1563

  
1564
        for error_item in [item for item in worker.scene.items() if type(item) is QEngineeringErrorItem]:
1565
            error_item.transfer.onRemoved.emit(error_item)
1566

  
1567
        for end_break in [item for item in worker.scene.items() if type(item) is QEngineeringEndBreakItem]:
1568
            if not end_break.prop('Freeze'):
1569
                end_break.transfer.onRemoved.emit(end_break)
1570
            else:
1571
                end_breaks.append(end_break)
1572

  
1573
        QApplication.processEvents()
1574

  
1575
        for item in worker.scene.items():
1576
            if issubclass(type(item), SymbolSvgItem) and not (type(item) is QEngineeringErrorItem) and not (
1577
                    type(item) is QEngineeringUnknownItem) and item.type != 'Notes' and not (
1578
                    type(item) is QEngineeringEndBreakItem):
1579
                symbols.append(item)
1580
            elif type(item) is QEngineeringLineNoTextItem:
1581
                lineNos.append(item)
1582
            elif issubclass(type(item), QEngineeringTextItem):
1583
                item.owner = None
1584

  
1585
        QApplication.processEvents()
1586

  
1587
        # trace connected items
1588
        docdata._connected_items_lists.clear()
1589
        connected_items_lists = docdata._connected_items_lists
1590

  
1591
        items = symbols + lines
1592

  
1593
        while items:
1594
            connected_items_list = [items[0]]
1595
            connected_items_count = 0
1596
            while True:
1597
                if connected_items_count == len(connected_items_list):
1598
                    break
1599
                else:
1600
                    connected_items_count = len(connected_items_list)
1601

  
1602
                for item in items:
1603
                    if item in connected_items_list:
1604
                        continue
1605
                    else:
1606
                        matches = [conn for conn in item.connectors if conn.connectedItem and conn.connectedItem in connected_items_list]
1607
                        if matches:
1608
                            connected_items_list.append(item)
1609
                            break
1610

  
1611
            for item in connected_items_list:
1612
                items.remove(item)
1613
            
1614
            connected_items_lists.append(connected_items_list)
1615
        # up to here
1616

  
1617
        # connect attribute
1618
        worker.display_message.emit('Connecting Attribute...')
1619
        QApplication.processEvents()
1620
        texts = [item for item in worker.scene.items() if issubclass(type(item), QEngineeringTextItem)]
1621
        for symbol in symbols:
1622
            try:
1623
                symbol.connectAttribute(texts)
1624
            except Exception as ex:
1625
                message = 'error occurred({}) in {}:{}'.format(repr(ex), sys.exc_info()[-1].tb_frame.f_code.co_filename,
1626
                                                               sys.exc_info()[-1].tb_lineno)
1627
                worker.display_message.emit(message)
1628

  
1629
        """ try to connect label to valve """
1630
        labels = [symbol for symbol in symbols if symbol.iType == 19]  # Labels - Symbol => Instrument
1631
        valves = [symbol for symbol in symbols if
1632
                  symbol.iType == 34 or symbol.iType == 17 or symbol.iType == 22]  # Specialty Components, In-Line, Relief Devices
1633
        for label in labels:
1634
            label.connectAttribute(valves, clear=False)
1635

  
1636
        # for slope, etc.., symbol to line
1637
        labels = [symbol for symbol in symbols if symbol.iType == 30]  # Labels - Line => Piping
1638
        for label in labels:
1639
            label.connectAttribute(lines, clear=False)
1640

  
1641
        QApplication.processEvents()
1642
        for symbol in symbols:
1643
            for assoc in symbol.associations():
1644
                if assoc.owner is None:
1645
                    assoc.owner = symbol
1646

  
1647
        """ try to find text item's owner """
1648
        texts = [item for item in worker.scene.items() if type(item) is QEngineeringReservedWordTextItem]
1649
        for text in texts:
1650
            text.findOwner(lines)
1651

  
1652
        QApplication.processEvents()
1653
        # restore and save manual edited attr's text item
1654
        texts = [item for item in worker.scene.items() if issubclass(type(item), QEngineeringTextItem)]
1655
        targetText = []
1656
        for text in texts:
1657
            found = False
1658
            for symbol in symbols + lines:
1659
                for attr in list(symbol.attrs.keys()):
1660
                    # skip freezed attr or already consumed by symbol
1661
                    if attr.AssocItem == text:
1662
                        text.owner = symbol
1663
                        found = True
1664
                        break
1665
                    # restore missing attr
1666
                    elif type(attr.AssocItem) is str or type(attr.AssocItem) is uuid.UUID:
1667
                        if str(attr.AssocItem) == str(text.uid):
1668
                            symbol.add_assoc_item(text)
1669
                            attr.AssocItem = text
1670
                            text.owner = symbol
1671
                            found = True
1672
                        break
1673
                if found: break
1674
            if not found and (
1675
                    type(text) is QEngineeringSizeTextItem or type(text) is QEngineeringValveOperCodeTextItem or \
1676
                    type(text) is QEngineeringTagNoTextItem or type(text) is QEngineeringTextItem):
1677
                targetText.append(text)
1678

  
1679
        worker.need_update_texts = []
1680
        targetText = sorted(targetText, key=lambda param: len(param.text()), reverse=True)
1681
        for symbol in symbols + equip_packages:
1682
            symbol._skip = False
1683
        for text in targetText:
1684
            ret = text.findOwner(symbols) if type(text) is not QEngineeringTagNoTextItem else text.findOwner(
1685
                symbols + equip_packages)
1686
            if ret:
1687
                worker.need_update_texts.append([text, ret])
1688

  
1689
        QApplication.processEvents()
1690

  
1691
        worker.updateProgress.emit(tracer.maxValue)
1692

  
1693
        ALL_ITEM = [item for item in worker.scene.items() if issubclass(type(item), QEngineeringAbstractItem)]
1694
        for item in ALL_ITEM:
1695
            item.setVisible(True)
1696

  
1697
    except Exception as ex:
1698
        message = 'error occurred({}) in {}:{}'.format(repr(ex), sys.exc_info()[-1].tb_frame.f_code.co_filename,
1699
                                                       sys.exc_info()[-1].tb_lineno)
1700
        worker.display_message.emit(message)
1701
    except:
1702
        (type1, value, traceback) = sys.exc_info()
1703
        sys.excepthook(type1, value, traceback)

내보내기 Unified diff

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