개정판 5a4d5665
issue #567: Line No를 Freeze시킬 수 있다
Change-Id: I0cc1f6cfd751a48d3d0b884df445acbc2c2bedde
DTI_PID/DTI_PID/Commands/DefaultCommand.py | ||
---|---|---|
214 | 214 |
# string to ElementTree |
215 | 215 |
et = fromstring(xmlStr) |
216 | 216 |
item = SymbolSvgItem.fromXml(et) |
217 |
self.symbol = item[0]
|
|
217 |
self.symbol = item |
|
218 | 218 |
for connector in self.symbol.connectors: |
219 | 219 |
connector.connectedItem = None |
220 | 220 |
# uid 새로 할당 |
DTI_PID/DTI_PID/ItemPropertyTableWidget.py | ||
---|---|---|
69 | 69 |
if type(item) is QEngineeringLineItem: |
70 | 70 |
self.initTitleCell(item) |
71 | 71 |
self.setItem(0, 1, QTableWidgetItem(str(item.uid))) |
72 |
owner_item = QTableWidgetItem('{}'.format('None' if item.owner is None else item.owner.uid))
|
|
72 |
owner_item = QTableWidgetItem('{}'.format('None' if item.owner is None else str(item.owner)))
|
|
73 | 73 |
icon = QtGui.QIcon() |
74 | 74 |
icon.addPixmap(QtGui.QPixmap(":/newPrefix/doubleclick.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) |
75 | 75 |
owner_item.setIcon(icon) |
... | ... | |
333 | 333 |
else: |
334 | 334 |
if prop.AttributeType == 'Boolean': |
335 | 335 |
self.freeze_state_cell = QCheckBox() |
336 |
self.freeze_state_cell.setChecked(True if value and value == True else False)
|
|
336 |
self.freeze_state_cell.setChecked(True if value and str(value) == 'True' else False)
|
|
337 | 337 |
self.freeze_state_cell.stateChanged.connect(self.freeze_state_changed) |
338 | 338 |
self.setCellWidget(row, 1, self.freeze_state_cell) |
339 | 339 |
else: |
... | ... | |
424 | 424 |
attr.AttrAt = count |
425 | 425 |
connector_item.setData(Qt.UserRole, attr) |
426 | 426 |
|
427 |
connector_item = QTableWidgetItem('{}'.format('None' if connector.connectedItem is None else str(connector.connectedItem.uid)))
|
|
427 |
connector_item = QTableWidgetItem('{}'.format('None' if connector.connectedItem is None else str(connector.connectedItem))) |
|
428 | 428 |
icon = QtGui.QIcon() |
429 | 429 |
icon.addPixmap(QtGui.QPixmap(":/newPrefix/doubleclick.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) |
430 | 430 |
connector_item.setIcon(icon) |
... | ... | |
455 | 455 |
self.setItem(2, 1, QTableWidgetItem(self._item.type)) |
456 | 456 |
self.setItem(3, 1, QTableWidgetItem(str(round(math.degrees(self._item.angle))))) |
457 | 457 |
self.setItem(4, 1, QTableWidgetItem(str(self._item.origin))) |
458 |
owner_item = QTableWidgetItem('{}'.format('None' if self._item.owner is None else self._item.owner.uid))
|
|
458 |
owner_item = QTableWidgetItem('{}'.format('None' if self._item.owner is None else str(self._item.owner)))
|
|
459 | 459 |
icon = QtGui.QIcon() |
460 | 460 |
icon.addPixmap(QtGui.QPixmap(":/newPrefix/doubleclick.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) |
461 | 461 |
owner_item.setIcon(icon) |
... | ... | |
709 | 709 |
if cell: |
710 | 710 |
data = cell.data(Qt.UserRole) |
711 | 711 |
if data is not None: |
712 |
if self._item: self._item.properties[data] = self.freeze_state_cell.isChecked()
|
|
712 |
if self._item: self._item.set_property(data.Attribute, self.freeze_state_cell.isChecked())
|
|
713 | 713 |
|
714 | 714 |
''' |
715 | 715 |
@brief int cell check |
... | ... | |
722 | 722 |
if cell is not None: |
723 | 723 |
data = cell.data(Qt.UserRole) |
724 | 724 |
if data is not None and not data.is_selectable: |
725 |
if self._item: self._item.properties[data] = self.item(row, column).text()
|
|
725 |
if self._item: self._item.set_property(data.Attribute, self.item(row, column).text())
|
|
726 | 726 |
except Exception as ex: |
727 | 727 |
from App import App |
728 | 728 |
from AppDocData import MessageType |
DTI_PID/DTI_PID/ItemTreeWidget.py | ||
---|---|---|
147 | 147 |
pickColorAction.triggered.connect(lambda : self.pickColorClickEvent(item)) |
148 | 148 |
menu.addAction(pickColorAction) |
149 | 149 |
explode_action = QAction(self.tr("Explode")) |
150 |
freeze = data.get_property('Freeze') |
|
151 |
explode_action.setEnabled(not freeze) |
|
150 | 152 |
explode_action.triggered.connect(lambda : self.explode_line_no(item)) |
151 | 153 |
menu.addAction(explode_action) |
152 | 154 |
reverse_flow_action = QAction(self.tr("Reverse Flow")) |
... | ... | |
159 | 161 |
lineTypeAction = QAction(self.tr("Select Line Type")) |
160 | 162 |
lineTypeAction.triggered.connect(lambda : self.lineTypeClickEvent(item)) |
161 | 163 |
menu.addAction(lineTypeAction) |
164 |
line_no = item.parent().data(0, self.TREE_DATA_ROLE) |
|
165 |
freeze = line_no.get_property('Freeze') |
|
166 |
explode_action.setEnabled(not freeze) |
|
162 | 167 |
explode_action = QAction(self.tr("Explode")) |
163 | 168 |
explode_action.triggered.connect(lambda : self.explode_line_run(item)) |
164 | 169 |
menu.addAction(explode_action) |
... | ... | |
205 | 210 |
|
206 | 211 |
def explode_all_line_nos(self, tree_widget_item): |
207 | 212 |
""" explode all line nos """ |
213 |
from EngineeringLineNoTextItem import QEngineeringLineNoTextItem |
|
208 | 214 |
|
209 | 215 |
try: |
210 | 216 |
for i in reversed(range(self.LineNoTreeItem.childCount())): |
211 | 217 |
self.explode_line_no(self.LineNoTreeItem.child(i)) |
212 | 218 |
finally: |
213 |
for item in [item for item in self.scene.items() if hasattr(item, '_owner')]: |
|
214 |
item.owner = None |
|
219 |
for item in [item for item in self.scene.items() if hasattr(item, '_owner') and item.owner is not None]: |
|
220 |
if type(item.owner) is QEngineeringLineNoTextItem and 'False' == str(item.owner.get_property('Freeze')): |
|
221 |
item.owner = None |
|
215 | 222 |
|
216 | 223 |
def reverse_line_flow(self, lineNoTreeWidgetItem): |
217 | 224 |
""" reverse line flow """ |
... | ... | |
388 | 395 |
item.setFont(0, item.font(0)) |
389 | 396 |
child.treeItem = item |
390 | 397 |
self.LineNoTreeItem.addChild(item) |
398 |
self.LineNoTreeItem.sortChildren(0, Qt.AscendingOrder) # sort line nos |
|
391 | 399 |
elif type(child) is QEngineeringTrimLineNoTextItem: |
392 | 400 |
item = CustomTreeWidgetItem(['Unknown Line']) |
393 | 401 |
item.setFlags(item.flags() | Qt.ItemIsUserCheckable) |
DTI_PID/DTI_PID/LineNoTracer.py | ||
---|---|---|
274 | 274 |
maxValue = len(self._lineNos) + 1 ## line no's count + secondary line |
275 | 275 |
|
276 | 276 |
# find primary lines |
277 |
# sort line no with from,to value |
|
278 |
self._lineNos.sort(key=lambda line_no:(1 if line_no.get_property('From') else 0)+(1 if line_no.get_property('To') else 0),reverse=True) |
|
277 | 279 |
for lineno in self._lineNos: |
278 | 280 |
if displayMessage: displayMessage.emit('{} {}'.format(lineno.text(), 'Topology Construction')) |
279 | 281 |
self.find_primary_lines(lineno) |
DTI_PID/DTI_PID/MainWindow.py | ||
---|---|---|
1641 | 1641 |
self.itemTreeWidget.addTreeItem(item, connectedItem) |
1642 | 1642 |
# up to here |
1643 | 1643 |
|
1644 |
self.graphicsView.scene.update(self.graphicsView.sceneRect())
|
|
1644 |
self.graphicsView.invalidateScene()
|
|
1645 | 1645 |
except Exception as ex: |
1646 | 1646 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
1647 | 1647 |
self.addMessage.emit(MessageType.Error, message) |
... | ... | |
1710 | 1710 |
conn.transfer.onPosChanged.connect(line.onConnectorPosChaned) |
1711 | 1711 |
|
1712 | 1712 |
for unknown in appDocData.unknowns + appDocData.lineIndicators: |
1713 |
self.addUnknownItemToScene(unknown)
|
|
1713 |
self.graphicsView.scene.addItem(unknown)
|
|
1714 | 1714 |
finally: |
1715 | 1715 |
# update scene |
1716 | 1716 |
self.graphicsView.scene.update(self.graphicsView.sceneRect()) |
... | ... | |
2304 | 2304 |
""" parsing all symbols """ |
2305 | 2305 |
for symbol in root.find('SYMBOLS').iter('SYMBOL'): |
2306 | 2306 |
item = SymbolSvgItem.fromXml(symbol) |
2307 |
if item[0] is not None:
|
|
2308 |
item[0].transfer.onRemoved.connect(self.itemRemoved)
|
|
2307 |
if item is not None: |
|
2308 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
2309 | 2309 |
symbols.append(item) |
2310 | 2310 |
else: |
2311 | 2311 |
pt = [float(x) for x in symbol.find('LOCATION').text.split(',')] |
... | ... | |
2321 | 2321 |
|
2322 | 2322 |
QApplication.processEvents() |
2323 | 2323 |
|
2324 |
# set symbol's owner |
|
2325 |
# childItems = [item for item in symbols if item[1] is not None] |
|
2326 |
# for item in childItems: |
|
2327 |
# matches = [param for param in symbols if str(param[0].uid) == str(item[1])] |
|
2328 |
# if len(matches) == 1: |
|
2329 |
# item[0].owner = matches[0][0] |
|
2330 |
# up to here |
|
2331 |
|
|
2332 |
""" add item to scene and tree widget """ |
|
2333 |
for item in symbols: |
|
2334 |
self.addSvgItemToScene(item[0]) |
|
2335 |
docData.symbols.append(item[0]) |
|
2336 |
self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, item[0]) |
|
2337 |
|
|
2338 | 2324 |
# parse texts |
2339 | 2325 |
for text in root.find('TEXTINFOS').iter('ATTRIBUTE'): |
2340 | 2326 |
item = QEngineeringTextItem.fromXml(text) |
... | ... | |
2388 | 2374 |
item.transfer.onRemoved.connect(self.itemRemoved) |
2389 | 2375 |
if item is not None: |
2390 | 2376 |
item.transfer.onRemoved.connect(self.itemRemoved) |
2391 |
self.addUnknownItemToScene(item)
|
|
2377 |
self.graphicsView.scene.addItem(item)
|
|
2392 | 2378 |
|
2393 | 2379 |
self.progress.setValue(self.progress.value() + 1) |
2394 | 2380 |
|
2395 | 2381 |
QApplication.processEvents() |
2396 | 2382 |
|
2383 |
""" add symbol to scene and tree widget """ |
|
2384 |
for item in symbols: |
|
2385 |
self.addSvgItemToScene(item) |
|
2386 |
docData.symbols.append(item) |
|
2387 |
self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, item) |
|
2388 |
|
|
2397 | 2389 |
for line_no_node in root.find('LINENOS').iter('LINE_NO'): |
2398 | 2390 |
line_no = QEngineeringLineNoTextItem.fromXml(line_no_node) |
2399 |
if line_no is not None: |
|
2400 |
line_no.transfer.onRemoved.connect(self.itemRemoved) |
|
2401 |
self.addTextItemToScene(line_no) |
|
2402 |
treeItem = self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, line_no) |
|
2403 |
|
|
2404 |
""" |
|
2405 |
connLine = line_no.find('CONNLINE') |
|
2406 |
if connLine is not None: |
|
2407 |
lineUID = connLine.text |
|
2408 |
connLine = self.graphicsView.findItemByUid(lineUID) |
|
2409 |
if connLine is not None: |
|
2410 |
item.conns.append(connLine) |
|
2411 |
""" |
|
2391 |
if line_no is None: continue |
|
2392 |
|
|
2393 |
line_no.transfer.onRemoved.connect(self.itemRemoved) |
|
2394 |
self.addTextItemToScene(line_no) |
|
2395 |
line_no_tree_item = self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, line_no) |
|
2412 | 2396 |
|
2413 | 2397 |
runs_node = line_no_node.findall('RUN') |
2414 |
if runs_node is not None: |
|
2415 |
for run_node in runs_node: |
|
2416 |
line_run = QEngineeringRunItem() |
|
2417 |
for child_node in run_node: |
|
2418 |
uidElement = child_node.find('UID') |
|
2419 |
if uidElement is not None: |
|
2420 |
uid = uidElement.text |
|
2421 |
run_item = self.graphicsView.findItemByUid(uid) |
|
2422 |
if run_item is not None: |
|
2423 |
run_item._owner = line_no |
|
2424 |
line_run.items.append(run_item) |
|
2425 |
line_run.owner = line_no |
|
2426 |
line_no.runs.append(line_run) |
|
2427 |
|
|
2428 |
for connectedItem in line_run.items: |
|
2429 |
if issubclass(type(connectedItem), SymbolSvgItem): self.itemTreeWidget.addTreeItem(treeItem, connectedItem) |
|
2430 |
|
|
2431 |
docData.tracerLineNos.append(item) |
|
2398 |
if runs_node is None: continue |
|
2399 |
|
|
2400 |
for run_node in runs_node: |
|
2401 |
line_run = QEngineeringRunItem() |
|
2402 |
for child_node in run_node: |
|
2403 |
uidElement = child_node.find('UID') |
|
2404 |
if uidElement is not None: |
|
2405 |
uid = uidElement.text |
|
2406 |
run_item = self.graphicsView.findItemByUid(uid) |
|
2407 |
if run_item is not None: |
|
2408 |
#run_item._owner = line_no |
|
2409 |
line_run.items.append(run_item) |
|
2410 |
line_run.owner = line_no |
|
2411 |
line_no.runs.append(line_run) |
|
2412 |
|
|
2413 |
for run_item in line_run.items: |
|
2414 |
if issubclass(type(run_item), SymbolSvgItem): self.itemTreeWidget.addTreeItem(line_no_tree_item, run_item) |
|
2415 |
|
|
2416 |
docData.tracerLineNos.append(line_no) |
|
2432 | 2417 |
|
2433 | 2418 |
self.progress.setValue(self.progress.value() + 1) |
2434 | 2419 |
QApplication.processEvents() |
2435 | 2420 |
|
2436 | 2421 |
for trimLineNo in root.iter('TRIM_LINE_NO'): |
2437 |
item = QEngineeringTrimLineNoTextItem()
|
|
2438 |
item.uid = trimLineNo.find('UID')
|
|
2422 |
line_no = QEngineeringTrimLineNoTextItem()
|
|
2423 |
line_no.uid = trimLineNo.find('UID')
|
|
2439 | 2424 |
|
2440 | 2425 |
run = trimLineNo.find('RUN') |
2441 | 2426 |
if run is not None: |
2442 |
lineRunItem = QEngineeringRunItem()
|
|
2427 |
line_run = QEngineeringRunItem()
|
|
2443 | 2428 |
for child in run: |
2444 | 2429 |
uidElement = child.find('UID') |
2445 | 2430 |
if uidElement is not None: |
2446 | 2431 |
uid = uidElement.text |
2447 |
runItem = self.graphicsView.findItemByUid(uid)
|
|
2448 |
if runItem is not None:
|
|
2449 |
runItem.owner = item |
|
2450 |
lineRunItem.items.append(runItem)
|
|
2432 |
run_item = self.graphicsView.findItemByUid(uid)
|
|
2433 |
if run_item is not None:
|
|
2434 |
#runItem.owner = item
|
|
2435 |
line_run.items.append(run_item)
|
|
2451 | 2436 |
|
2452 |
item.runs.append(lineRunItem)
|
|
2453 |
treeItem = self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, item)
|
|
2454 |
for connectedItem in lineRunItem.items:
|
|
2455 |
if issubclass(type(connectedItem), SymbolSvgItem): self.itemTreeWidget.addTreeItem(treeItem, connectedItem)
|
|
2456 |
docData.tracerLineNos.append(item)
|
|
2437 |
line_no.runs.append(line_run)
|
|
2438 |
line_no_tree_item = self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, line_no)
|
|
2439 |
for run_item in line_run.items:
|
|
2440 |
if issubclass(type(run_item), SymbolSvgItem): self.itemTreeWidget.addTreeItem(line_no_tree_item, run_item)
|
|
2441 |
docData.tracerLineNos.append(line_no)
|
|
2457 | 2442 |
|
2458 | 2443 |
self.progress.setValue(self.progress.value() + 1) |
2459 | 2444 |
|
... | ... | |
2506 | 2491 |
self.graphicsView.scene.addItem(lineItem) |
2507 | 2492 |
|
2508 | 2493 |
''' |
2509 |
@brief Remove added item on same place and Add Unknown Item |
|
2510 |
@author Jeongwoo |
|
2511 |
@date 2018.06.14 |
|
2512 |
@history 2018.06.18 Jeongwoo Set Z-index |
|
2513 |
''' |
|
2514 |
def addUnknownItemToScene(self, unknownItem): |
|
2515 |
try: |
|
2516 |
unknownItem.addUnknownItemToScene(self.graphicsView.scene) |
|
2517 |
except Exception as ex: |
|
2518 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
2519 |
self.addMessage.emit(MessageType.Error, message) |
|
2520 |
|
|
2521 |
''' |
|
2522 | 2494 |
@brief generate output xml file |
2523 | 2495 |
@author humkyung |
2524 | 2496 |
@date 2018.04.23 |
... | ... | |
2679 | 2651 |
except Exception as ex: |
2680 | 2652 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
2681 | 2653 |
finally: |
2682 |
pass |
|
2654 |
pass |
DTI_PID/DTI_PID/QtImageViewer.py | ||
---|---|---|
63 | 63 |
self.command = None |
64 | 64 |
self.scene = QGraphicsScene(self) |
65 | 65 |
self.setScene(self.scene) |
66 |
self.scene.setBackgroundBrush(Qt.gray)
|
|
66 |
self.scene.setBackgroundBrush(Qt.white)
|
|
67 | 67 |
|
68 | 68 |
self.scaleFactor = 1.0 |
69 | 69 |
self.numScheduledScalings = 0 |
DTI_PID/DTI_PID/Shapes/EngineeringAbstractItem.py | ||
---|---|---|
59 | 59 |
@date 2018.05.11 |
60 | 60 |
''' |
61 | 61 |
def getColor(self): |
62 |
return QEngineeringAbstractItem.HOVER_COLOR if self.hover else (self._owner._color if (self._owner and hasattr(self._owner, '_color')) else self._color)
|
|
62 |
return QEngineeringAbstractItem.HOVER_COLOR if self.hover else (self.owner._color if (self.owner and hasattr(self.owner, '_color')) else self._color)
|
|
63 | 63 |
|
64 | 64 |
''' |
65 | 65 |
@brief getter of owner |
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py | ||
---|---|---|
84 | 84 |
except Exception as ex: |
85 | 85 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
86 | 86 |
|
87 |
def __str__(self): |
|
88 |
""" return string represent uuid """ |
|
89 |
return str(self.uid) |
|
90 |
|
|
87 | 91 |
''' |
88 | 92 |
@breif getter owner |
89 | 93 |
@author humkyung |
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py | ||
---|---|---|
34 | 34 |
|
35 | 35 |
QEngineeringTextItem.__init__(self, uid, parent) |
36 | 36 |
|
37 |
self._properties = {SymbolProp(None, 'From', 'Comp Item'):None, SymbolProp(None, 'To', 'Comp Item'):None, SymbolProp(None, 'Freeze', 'Boolean'):None}
|
|
37 |
self._properties = {SymbolProp(None, 'From', 'Comp Item'):None, SymbolProp(None, 'To', 'Comp Item'):None, SymbolProp(None, 'Freeze', 'Boolean'):False}
|
|
38 | 38 |
self._runs = [] |
39 | 39 |
|
40 | 40 |
@property |
... | ... | |
445 | 445 |
|
446 | 446 |
def explode(self): |
447 | 447 |
""" explode line no """ |
448 |
try: |
|
449 |
for index in reversed(range(len(self.runs))): |
|
450 |
self.runs[index].explode() |
|
451 |
finally: |
|
452 |
self.runs.clear() |
|
453 |
self.set_property('From', None) |
|
454 |
self.set_property('To', None) |
|
448 |
|
|
449 |
if False == self.get_property('Freeze'): |
|
450 |
try: |
|
451 |
for index in reversed(range(len(self.runs))): |
|
452 |
self.runs[index].explode() |
|
453 |
finally: |
|
454 |
self.runs.clear() |
|
455 |
self.set_property('From', None) |
|
456 |
self.set_property('To', None) |
|
455 | 457 |
|
456 | 458 |
''' |
457 | 459 |
@brief save Line Data |
DTI_PID/DTI_PID/Shapes/EngineeringRunItem.py | ||
---|---|---|
62 | 62 |
|
63 | 63 |
def explode(self): |
64 | 64 |
""" explode run and subtract it from line no """ |
65 |
|
|
65 | 66 |
try: |
66 | 67 |
for item in self.items: |
67 | 68 |
item.owner = None |
... | ... | |
167 | 168 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
168 | 169 |
return None |
169 | 170 |
|
170 |
return node |
|
171 |
return node |
DTI_PID/DTI_PID/Shapes/EngineeringTextItem.py | ||
---|---|---|
53 | 53 |
self.transfer = Transfer() |
54 | 54 |
self.setZValue(QEngineeringTextItem.ZVALUE) |
55 | 55 |
|
56 |
def __str__(self): |
|
57 |
""" return string represent uuid """ |
|
58 |
return str(self.uid) |
|
59 |
|
|
56 | 60 |
''' |
57 | 61 |
@brief Get owner |
58 | 62 |
@author Jeongwoo |
... | ... | |
566 | 570 |
# write owner |
567 | 571 |
if self.owner is not None: |
568 | 572 |
ownerNode = Element('OWNER') |
569 |
ownerNode.text = str(self.owner.uid)
|
|
573 |
ownerNode.text = str(self.owner) |
|
570 | 574 |
node.append(ownerNode) |
571 | 575 |
# up to here |
572 | 576 |
except Exception as ex: |
DTI_PID/DTI_PID/Shapes/EngineeringUnknownItem.py | ||
---|---|---|
23 | 23 |
from EngineeringAbstractItem import QEngineeringAbstractItem |
24 | 24 |
|
25 | 25 |
class QEngineeringUnknownItem(QEngineeringPolylineItem, QEngineeringAbstractItem): |
26 |
""" |
|
27 |
This is unknown item class |
|
28 |
""" |
|
26 |
""" This is unknown item class """ |
|
29 | 27 |
|
30 | 28 |
HIGHLIGHT = '#BC4438' |
31 | 29 |
ZVALUE = 60 |
... | ... | |
279 | 277 |
return node |
280 | 278 |
|
281 | 279 |
''' |
282 |
@brief Add to Scene |
|
283 |
@author Jeongwoo |
|
284 |
@date 2018.06.14 |
|
285 |
''' |
|
286 |
def addUnknownItemToScene(self, scene): |
|
287 |
self.setZValue(QEngineeringUnknownItem.ZVALUE) |
|
288 |
scene.addItem(self) |
|
289 |
|
|
290 |
''' |
|
291 | 280 |
@brief Delete from Scene |
292 | 281 |
@author Jeongwoo |
293 | 282 |
@date 2018.06.14 |
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py | ||
---|---|---|
84 | 84 |
configs = app_doc_data.getConfigs('Symbol Style', 'Opacity') |
85 | 85 |
self.setOpacity(float(configs[0].value)/100 if configs else 0.5) |
86 | 86 |
|
87 |
def __str__(self): |
|
88 |
""" return string represent uuid """ |
|
89 |
return str(self.uid) |
|
90 |
|
|
87 | 91 |
''' |
88 | 92 |
@breif getter owner |
89 | 93 |
@author humkyung |
... | ... | |
575 | 579 |
return False |
576 | 580 |
|
577 | 581 |
''' |
578 |
@brief Remove Attr |
|
579 |
@author kyouho |
|
580 |
@date 18.07.17 |
|
581 |
''' |
|
582 |
def removeAttr(self, item): |
|
583 |
scene = self.scene() |
|
584 |
for symbol in scene.items(): |
|
585 |
if issubclass(type(symbol), SymbolSvgItem): |
|
586 |
for attr in symbol.attrs: |
|
587 |
if attr == item: |
|
588 |
symbol.attrs.remove(item) |
|
589 |
|
|
590 |
''' |
|
591 | 582 |
@brief remove item when user press delete key |
592 | 583 |
@author humkyung |
593 | 584 |
@date 2018.04.23 |
... | ... | |
731 | 722 |
humkyung 2018.09.06 write area to xml |
732 | 723 |
''' |
733 | 724 |
def toXml(self): |
725 |
import uuid |
|
734 | 726 |
from xml.etree.ElementTree import Element, SubElement, dump, ElementTree |
735 | 727 |
from EngineeringAbstractItem import QEngineeringAbstractItem |
736 | 728 |
from EngineeringTextItem import QEngineeringTextItem |
... | ... | |
762 | 754 |
# write owner's uid to xml |
763 | 755 |
if self.owner is not None: |
764 | 756 |
ownerNode = Element('OWNER') |
765 |
ownerNode.text = str(self.owner.uid)
|
|
757 |
ownerNode.text = str(self.owner) |
|
766 | 758 |
node.append(ownerNode) |
767 | 759 |
# up to here |
768 | 760 |
|
... | ... | |
868 | 860 |
from EngineeringSpecBreakItem import QEngineeringSpecBreakItem |
869 | 861 |
from EngineeringEndBreakItem import QEngineeringEndBreakItem |
870 | 862 |
from SymbolAttr import SymbolAttr |
871 |
item = [None, None]
|
|
863 |
item = None
|
|
872 | 864 |
|
873 | 865 |
try: |
874 | 866 |
uidNode = node.find('UID') |
... | ... | |
906 | 898 |
project = appDocData.getCurrentProject() |
907 | 899 |
svgFilePath = os.path.join(project.getSvgFilePath(), _type, name + '.svg') |
908 | 900 |
if os.path.isfile(svgFilePath): |
909 |
item[0] = SymbolSvgItem.createItem(_type, svgFilePath, uid, owner=owner, flip=flipLabel)
|
|
910 |
item[0].setVisible(False)
|
|
911 |
item[0].buildItem(name, _type, angle, pt, size, origin, connPts, baseSymbol, childSymbol, hasInstrumentLabel)
|
|
901 |
item = SymbolSvgItem.createItem(_type, svgFilePath, uid, owner=owner, flip=flipLabel) |
|
902 |
item.setVisible(False) |
|
903 |
item.buildItem(name, _type, angle, pt, size, origin, connPts, baseSymbol, childSymbol, hasInstrumentLabel) |
|
912 | 904 |
|
913 | 905 |
for prop_node in node.iter('PROPERTY'): |
914 |
matches = [prop for prop in item[0]._properties.keys() if prop.Attribute == prop_node.attrib['Attribute']]
|
|
906 |
matches = [prop for prop in item._properties.keys() if prop.Attribute == prop_node.attrib['Attribute']] |
|
915 | 907 |
if matches: |
916 | 908 |
matches[0].parse_xml(prop_node) |
917 |
item[0]._properties[matches[0]] = uuid.UUID(prop_node.text) if prop_node.text and matches[0].is_selectable else prop_node.text if prop_node.text else ''
|
|
909 |
item._properties[matches[0]] = uuid.UUID(prop_node.text) if prop_node.text and matches[0].is_selectable else prop_node.text if prop_node.text else '' |
|
918 | 910 |
|
919 | 911 |
## assign area |
920 | 912 |
areaNode = node.find('AREA') |
921 | 913 |
if areaNode is None: |
922 | 914 |
for area in appDocData.getAreaList(): |
923 | 915 |
if area.contains(pt): |
924 |
item[0].area = area.name
|
|
916 |
item.area = area.name |
|
925 | 917 |
break |
926 | 918 |
else: |
927 |
item[0].area = areaNode.text
|
|
919 |
item.area = areaNode.text |
|
928 | 920 |
## up to here |
929 | 921 |
|
930 | 922 |
connectors = node.find('CONNECTORS') |
931 | 923 |
if connectors is not None: |
932 | 924 |
iterIndex = 0 |
933 | 925 |
for connector in connectors.iter('CONNECTOR'): |
934 |
item[0].connectors[iterIndex].parse_xml(connector)
|
|
926 |
item.connectors[iterIndex].parse_xml(connector) |
|
935 | 927 |
iterIndex += 1 |
936 | 928 |
|
937 | 929 |
# get associations |
... | ... | |
939 | 931 |
if attributeValue is not None: |
940 | 932 |
for assoc in attributeValue.iter('ASSOCIATION'): |
941 | 933 |
_type = assoc.attrib['TYPE'] |
942 |
if not _type in item[0]._associations:
|
|
943 |
item[0]._associations[_type] = []
|
|
944 |
item[0]._associations[_type].append(uuid.UUID(assoc.text))
|
|
934 |
if not _type in item._associations: |
|
935 |
item._associations[_type] = [] |
|
936 |
item._associations[_type].append(uuid.UUID(assoc.text)) |
|
945 | 937 |
# up to here |
946 | 938 |
|
947 | 939 |
attributes = node.find('SYMBOLATTRIBUTES') |
948 | 940 |
if attributes is not None: |
949 | 941 |
for attr in attributes.iter('ATTRIBUTE'): |
950 | 942 |
_attr = SymbolAttr.fromXml(attr) |
951 |
if type(item[0]) is not QEngineeringSpecBreakItem and type(item[0]) is not QEngineeringEndBreakItem:
|
|
952 |
item[0].attrs[_attr] = attr.text
|
|
943 |
if type(item) is not QEngineeringSpecBreakItem and type(item) is not QEngineeringEndBreakItem:
|
|
944 |
item.attrs[_attr] = attr.text |
|
953 | 945 |
else: |
954 | 946 |
if _attr.AttributeType == 'Spec': |
955 |
item[0].attrs[_attr] = [attr.text.split(',')[0], attr.text.split(',')[1]]
|
|
947 |
item.attrs[_attr] = [attr.text.split(',')[0], attr.text.split(',')[1]] |
|
956 | 948 |
elif _attr.Attribute == 'UpStream': |
957 |
for initKey in item[0].attrs.keys():
|
|
949 |
for initKey in item.attrs.keys(): |
|
958 | 950 |
if initKey.Attribute == 'UpStream': |
959 |
item[0].attrs[initKey] = attr.text
|
|
951 |
item.attrs[initKey] = attr.text |
|
960 | 952 |
elif _attr.Attribute == 'DownStream': |
961 |
for initKey in item[0].attrs.keys():
|
|
953 |
for initKey in item.attrs.keys(): |
|
962 | 954 |
if initKey.Attribute == 'DownStream': |
963 |
item[0].attrs[initKey] = attr.text
|
|
955 |
item.attrs[initKey] = attr.text |
|
964 | 956 |
elif _attr.Attribute == 'Connected Line': |
965 |
for initKey in item[0].attrs.keys():
|
|
957 |
for initKey in item.attrs.keys(): |
|
966 | 958 |
if initKey.Attribute == 'Connected Line': |
967 |
item[0].attrs[initKey] = attr.text |
|
959 |
item.attrs[initKey] = attr.text |
|
960 |
""" |
|
968 | 961 |
for attr in attributes.iter('USERINPUTATTRIBUTE'): |
969 | 962 |
typeUID = attr.find('TYPEUID').text |
970 | 963 |
typeValue = attr.find('TYPEVALUE').text |
971 |
item[0].attrs.append(UserInputAttribute(typeUID, typeValue))
|
|
972 |
|
|
964 |
item.attrs.append(UserInputAttribute(typeUID, typeValue)) |
|
965 |
""" |
|
973 | 966 |
currentPointModeIndex = node.find('CURRENTPOINTMODEINDEX') |
974 | 967 |
if currentPointModeIndex is not None: |
975 |
item[0].currentPointModeIndex = int(currentPointModeIndex.text)
|
|
968 |
item.currentPointModeIndex = int(currentPointModeIndex.text) |
|
976 | 969 |
|
977 |
if type(item[0]) is QEngineeringSpecBreakItem: |
|
978 |
item[0].connectors[0].setPos((item[0].connectors[0].connectPoint[0], item[0].connectors[0].connectPoint[1])) |
|
979 |
|
|
980 |
item[1] = owner |
|
970 |
if type(item) is QEngineeringSpecBreakItem: |
|
971 |
item.connectors[0].setPos((item.connectors[0].connectPoint[0], item.connectors[0].connectPoint[1])) |
|
981 | 972 |
except Exception as ex: |
982 | 973 |
from App import App |
983 | 974 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
... | ... | |
1048 | 1039 |
self.update() |
1049 | 1040 |
|
1050 | 1041 |
def getColor(self): |
1051 |
""" |
|
1052 |
return hover color if mouse is over otherwise reutrn owner's color if owner exist else this color |
|
1053 |
""" |
|
1054 |
return SymbolSvgItem.HOVER_COLOR if self.hover else (self.owner._color if self._owner and hasattr(self._owner, '_color') else self._color) |
|
1042 |
""" return hover color if mouse is over otherwise reutrn owner's color if owner exist else this color """ |
|
1043 |
return SymbolSvgItem.HOVER_COLOR if self.hover else (self.owner._color if self.owner and hasattr(self.owner, '_color') else self._color) |
|
1055 | 1044 |
|
1056 | 1045 |
''' |
1057 | 1046 |
@brief get attributes from svg file |
DTI_PID/DTI_PID/TextItemFactory.py | ||
---|---|---|
73 | 73 |
if result[0]: |
74 | 74 |
item = QEngineeringLineNoTextItem() |
75 | 75 |
text = ''.join(result[1]) |
76 |
item.setToolTip('LINE NO={}'.format(text))
|
|
76 |
item.setToolTip('<b>{}</b><br>LINE NO={}'.format(str(item.uid), text))
|
|
77 | 77 |
item.setPlainText(text) |
78 | 78 |
|
79 | 79 |
# get color option |
내보내기 Unified diff