개정판 69f7734b
issue #663: detect and insert flange testing
Change-Id: Icdca8da303a038b89d2daab2233f5007ca87533e
DTI_PID/DTI_PID/ConfigurationDialog.py | ||
---|---|---|
197 | 197 |
self.ui.radioButtonBackTextYes.setChecked(True) |
198 | 198 |
self.ui.radioButtonBackTextNo.setChecked(False) |
199 | 199 | |
200 |
configs = docData.getConfigs('Default', 'Flange') |
|
201 |
self.ui.lineEditFlange.setText(configs[0].value) if 1 == len(configs) else \ |
|
202 |
self.ui.lineEditFlange.setText('flange') |
|
203 | ||
200 | 204 |
properties = docData.getLineProperties() |
201 | 205 |
if properties: |
202 | 206 |
for prop in properties: |
... | ... | |
997 | 1001 |
configs.append(Config('Text Recognition', 'White Character List', self.ui.lineEditWhiteCharList.text())) |
998 | 1002 |
configs.append(Config('Text Recognition', 'White Single Text', self.ui.lineEditSingleText.text())) |
999 | 1003 |
configs.append(Config('Text Recognition', 'Allowable Pair', self.ui.lineEditAllowablePair.text())) |
1004 |
configs.append(Config('Default', 'Flange', self.ui.lineEditFlange.text())) |
|
1000 | 1005 |
configs.append(Config('Text Recognition', 'Page Segmentation Modes', |
1001 | 1006 |
str(self.ui.comboBoxPageSegmentationModes.currentIndex()))) |
1002 | 1007 |
# Add Line Color Option - 2018.07.06 by kyouho |
DTI_PID/DTI_PID/QtImageViewer.py | ||
---|---|---|
586 | 586 |
app_doc_data = AppDocData.instance() |
587 | 587 | |
588 | 588 |
symbol = app_doc_data.getSymbolByQuery('Name', name) |
589 |
svg_file_name = symbol.sName |
|
590 |
svgFilePath = os.path.join(app_doc_data.getCurrentProject().getSvgFilePath(), symbol.getType(), |
|
591 |
svg_file_name + '.svg') |
|
592 |
svg = SymbolSvgItem.createItem(symbol.getType(), None, svgFilePath) |
|
593 |
connPts = None |
|
594 |
strConnPts = symbol.getConnectionPoint() |
|
595 |
if strConnPts is not None and strConnPts != '': |
|
596 |
connPts = [(float(x.split(',')[0]), float(x.split(',')[1])) if len(x.split(',')) == 2 else ( |
|
597 |
x.split(',')[0], float(x.split(',')[1]), float(x.split(',')[2])) \ |
|
598 |
for x in strConnPts.split('/')] |
|
599 | ||
600 |
svg.buildItem(svg_file_name, symbol.getType(), 0, None, None, None, connPts, symbol.getBaseSymbol(), |
|
601 |
symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel()) |
|
602 | ||
603 |
return svg |
|
589 |
if symbol: |
|
590 |
svg_file_name = symbol.sName |
|
591 |
svgFilePath = os.path.join(app_doc_data.getCurrentProject().getSvgFilePath(), symbol.getType(), |
|
592 |
svg_file_name + '.svg') |
|
593 |
svg = SymbolSvgItem.createItem(symbol.getType(), None, svgFilePath) |
|
594 |
connPts = None |
|
595 |
strConnPts = symbol.getConnectionPoint() |
|
596 |
if strConnPts is not None and strConnPts != '': |
|
597 |
connPts = [(float(x.split(',')[0]), float(x.split(',')[1])) if len(x.split(',')) == 2 else ( |
|
598 |
x.split(',')[0], float(x.split(',')[1]), float(x.split(',')[2])) \ |
|
599 |
for x in strConnPts.split('/')] |
|
600 | ||
601 |
svg.buildItem(svg_file_name, symbol.getType(), 0, None, None, None, connPts, symbol.getBaseSymbol(), |
|
602 |
symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel()) |
|
603 | ||
604 |
return svg |
|
605 |
else: |
|
606 |
return None |
|
604 | 607 | |
605 | 608 |
''' |
606 | 609 |
@brief match symbol to line |
... | ... | |
609 | 612 |
@history humkyung 2018.08.23 change scenePos to connector's center when symbol is placed on connector |
610 | 613 |
''' |
611 | 614 |
@staticmethod |
612 |
def matchSymbolToLine(scene, svg, scenePos, angle=None, flip=None): |
|
615 |
def matchSymbolToLine(scene, svg, scenePos, angle=None, flip=None, strict=False):
|
|
613 | 616 |
from EngineeringConnectorItem import QEngineeringConnectorItem |
614 | 617 |
from EngineeringLineItem import QEngineeringLineItem |
615 | 618 |
from SymbolSvgItem import SymbolSvgItem |
... | ... | |
662 | 665 |
connectors[0].sceneBoundingRect().center().y() + dy |
663 | 666 |
svg.loc = [x - svg.symbolOrigin[0], y - svg.symbolOrigin[1]] |
664 | 667 |
svg.origin = [x, y] |
665 |
svg.addSvgItemToScene(scene, True) |
|
668 |
svg.addSvgItemToScene(scene, True if not strict else False)
|
|
666 | 669 | |
667 | 670 |
items = [item for item in scene.items(scenePos) if |
668 | 671 |
type(item) is not QGraphicsPixmapItem and type(item) is not QGraphicsTextItem] |
... | ... | |
689 | 692 |
break |
690 | 693 |
connectors[0].connect(svg) |
691 | 694 |
#connectors[0].highlight(False) |
692 |
else:
|
|
695 |
elif not strict:
|
|
693 | 696 |
svg.angle = angle if angle else 0.0 |
694 | 697 |
svg.flip = flip if flip else 0 |
695 | 698 |
svg.loc = [round(scenePos.x() - svg.symbolOrigin[0], 1), round(scenePos.y() - svg.symbolOrigin[1], 1)] |
... | ... | |
712 | 715 |
connectors[0].connect(svg) |
713 | 716 |
#items[0].highlight(False) |
714 | 717 | |
715 |
svg.addSvgItemToScene(scene, True) |
|
718 |
svg.addSvgItemToScene(scene, True if not strict else False)
|
|
716 | 719 | |
717 | 720 |
# svg.reSettingConnetors() |
718 | 721 | |
719 |
scene.clearFocus() |
|
720 |
for item in scene.selectedItems(): |
|
721 |
item.setSelected(False) |
|
722 |
if not strict: |
|
723 |
scene.clearFocus() |
|
724 |
for item in scene.selectedItems(): |
|
725 |
item.setSelected(False) |
|
722 | 726 | |
723 |
#self.setFocus() |
|
724 |
svg.setSelected(True) |
|
725 |
scene.setFocusItem(svg) |
|
727 |
#self.setFocus()
|
|
728 |
svg.setSelected(True)
|
|
729 |
scene.setFocusItem(svg)
|
|
726 | 730 |
except Exception as ex: |
727 | 731 |
from App import App |
728 | 732 |
from AppDocData import MessageType |
DTI_PID/DTI_PID/RecognitionDialog.py | ||
---|---|---|
29 | 29 |
from LineDetector import LineDetector |
30 | 30 |
from symbol import Symbol |
31 | 31 |
from Drawing import Drawing |
32 |
from QtImageViewer import QtImageViewer |
|
32 | 33 | |
33 | 34 |
from MainWindow import MainWindow |
34 | 35 | |
... | ... | |
71 | 72 |
from PyQt5.QtCore import QThread |
72 | 73 |
from PyQt5.QtCore import QTranslator |
73 | 74 |
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QGridLayout, QListWidget |
74 |
from QtImageViewer import QtImageViewer |
|
75 | 75 |
import sys |
76 | 76 | |
77 | 77 |
''' |
... | ... | |
86 | 86 |
updateProgress = pyqtSignal(int, str) |
87 | 87 |
updateBatchProgress = pyqtSignal(int, int) |
88 | 88 |
displayLog = pyqtSignal(MessageType, str) |
89 |
add_detected_items_to_scene = pyqtSignal(QGraphicsScene) |
|
89 |
add_detected_items_to_scene = pyqtSignal(QGraphicsScene, list)
|
|
90 | 90 |
add_predata_to_scene = pyqtSignal(Drawing, QGraphicsScene, bool, bool, bool, bool, bool) |
91 | 91 |
clear_scene = pyqtSignal(QGraphicsScene, QGraphicsScene, QGraphicsScene) |
92 | 92 | |
... | ... | |
1281 | 1281 |
worker.displayLog.emit(MessageType.Error, message) |
1282 | 1282 |
# up to here |
1283 | 1283 | |
1284 | ||
1285 | ||
1286 | 1284 |
# remove line has not connected item |
1287 | 1285 |
try: |
1288 | 1286 |
count = 1 |
... | ... | |
1304 | 1302 |
# up to here |
1305 | 1303 | |
1306 | 1304 |
worker.create_unknown_items(mainRes) |
1307 |
worker.add_detected_items_to_scene.emit(worker.scene) |
|
1305 |
worker.add_detected_items_to_scene.emit(worker.scene, flange_list)
|
|
1308 | 1306 |
worker.cond.wait(worker.mutex) |
1309 | 1307 | |
1310 | 1308 |
worker.scene._end = False |
... | ... | |
3098 | 3096 |
finally: |
3099 | 3097 |
self.cond.wakeAll() |
3100 | 3098 | |
3101 |
def add_detected_items_to_scene(self, scene) -> None: |
|
3099 |
def add_detected_items_to_scene(self, scene, flanges) -> None:
|
|
3102 | 3100 |
"""add detected items to scene""" |
3103 | 3101 |
from SaveWorkCommand import SaveWorkCommand |
3104 | 3102 |
from EngineeringVendorItem import QEngineeringVendorItem |
... | ... | |
3141 | 3139 |
for conn in line.connectors: |
3142 | 3140 |
conn.transfer.onPosChanged.connect(line.onConnectorPosChaned) |
3143 | 3141 | |
3142 |
configs = app_doc_data.getConfigs('Default', 'Flange') |
|
3143 |
flange_name = configs[0].value if 1 == len(configs) else 'flange' |
|
3144 |
for flange in flanges: |
|
3145 |
svg = QtImageViewer.createSymbolObject(flange_name) |
|
3146 |
if svg: |
|
3147 |
QtImageViewer.matchSymbolToLine(scene, svg, QPointF(flange[0], flange[1]), strict=True) |
|
3148 | ||
3144 | 3149 |
for unknown in app_doc_data.unknowns + app_doc_data.lineIndicators: |
3145 | 3150 |
scene.addItem(unknown) |
3146 | 3151 |
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py | ||
---|---|---|
1984 | 1984 |
self.setToolTip(self.tooltip) |
1985 | 1985 |
self.update_arrow() |
1986 | 1986 | |
1987 |
self.scene().contents_changed.emit() |
|
1987 |
if hasattr(self.scene(), 'contents_changed'): |
|
1988 |
self.scene().contents_changed.emit() |
|
1988 | 1989 | |
1989 | 1990 |
# register resize command |
1990 | 1991 |
pt_start = self.connectors[0].pressed_position if self.connectors[0].pressed_position else None |
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py | ||
---|---|---|
521 | 521 |
scene_origin = self.mapToScene(self.transformOriginPoint()) |
522 | 522 |
self.origin = [round(scene_origin.x(), 1), round(scene_origin.y(), 1)] |
523 | 523 | |
524 |
self.scene().contents_changed.emit() |
|
524 |
if hasattr(self.scene(), 'contents_changed'): |
|
525 |
self.scene().contents_changed.emit() |
|
525 | 526 | |
526 | 527 |
return value |
527 | 528 |
내보내기 Unified diff