개정판 dc379815
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