개정판 1dbb865c
dev issue #563: 라인 연계 로직 수정
DTI_PID/DTI_PID/ItemTreeWidget.py | ||
---|---|---|
466 | 466 |
return None |
467 | 467 | |
468 | 468 |
''' |
469 |
@brief Init LineNoItems child |
|
470 |
@author kyouho |
|
471 |
@date 2018.09.17 |
|
472 |
''' |
|
473 |
def InitLineNoItems(self): |
|
474 |
|
|
475 |
removeLineItem = [] |
|
476 |
for lineIndex in range(self.LineNoTreeItem.childCount()): |
|
477 |
## LineNoItem, TrimLine Item |
|
478 |
lineItem = self.LineNoTreeItem.child(lineIndex) |
|
479 | ||
480 |
removeRunItem = [] |
|
481 |
for runIndex in range(lineItem.childCount()): |
|
482 |
## RUN Item |
|
483 |
runItem = lineItem.child(runIndex) |
|
484 |
for symbolIndex in range(runItem.childCount()): |
|
485 |
symbolItem = runItem.child(0) |
|
486 |
symbol = symbolItem.data(0, self.TREE_DATA_ROLE) |
|
487 | ||
488 |
symbolItem.parent().removeChild(symbolItem) |
|
489 | ||
490 |
if AppDocData.instance().isEquipmentType(symbol.type): |
|
491 |
symbolsRootItem = self.findItems('EQUIPMENTS', Qt.MatchExactly|Qt.MatchRecursive, 0) |
|
492 |
symbolsRootItem = symbolsRootItem[0] |
|
493 |
symbolsRootItem.addChild(symbolItem) |
|
494 |
else: |
|
495 |
symbolsRootItem = self.findItems('SYMBOLS', Qt.MatchExactly|Qt.MatchRecursive, 0) |
|
496 |
symbolsRootItem = symbolsRootItem[0] |
|
497 |
symbolsRootItem.addChild(symbolItem) |
|
498 |
## 지울 Item 모음 |
|
499 |
removeRunItem.append(runItem) |
|
500 |
## Run Item들 삭제 |
|
501 |
for removeItem in removeRunItem: |
|
502 |
lineItem.removeChild(removeItem) |
|
503 |
## 지울 Trim Line 모음 |
|
504 |
if lineItem.text(0) == 'Trim Line': |
|
505 |
removeLineItem.append(lineItem) |
|
506 |
## Trim Line들 삭제 |
|
507 |
for removeItem in removeLineItem: |
|
508 |
self.LineNoTreeItem.removeChild(removeItem) |
|
509 | ||
510 |
''' |
|
469 | 511 |
@brief Find QTreeWidgetItem by SymbolSvgItem object |
470 | 512 |
@author Jeongwoo |
471 | 513 |
@date 18.04.11 |
DTI_PID/DTI_PID/LineNoTracer.py | ||
---|---|---|
45 | 45 | |
46 | 46 |
connectedItems = [] |
47 | 47 |
if 1 == len(lineno.conns): |
48 |
for index in range(len(lineno._attrs)): |
|
49 |
if type(lineno._attrs[index]) is tuple and lineno._attrs[index][0] == 'CONN': |
|
50 |
lineno._attrs[index] = ('CONN', lineno.conns[0].uid) |
|
51 |
break |
|
52 | 48 |
connectedItems = self.findConnectedObjects(lineno.conns[0], toler=10) |
53 | 49 |
for item in connectedItems: item.owner = lineno # set item's owner |
54 | 50 |
|
... | ... | |
118 | 114 |
configs = docData.getConfigs('Line No', 'Configuration') |
119 | 115 | |
120 | 116 |
docData.lineNos.clear() |
121 |
for lineNo in self._lineNos: lineNo.conns.clear() |
|
117 |
|
|
118 |
## 기존에 찾은 것 유지 |
|
119 |
#for lineNo in self._lineNos: |
|
120 |
# lineNo.conns.clear() |
|
121 | ||
122 | 122 |
docData.lineNos = self._lineNos |
123 | 123 |
for lineno in docData.lineNos: |
124 |
## CONN은 유지 |
|
125 |
if lineno.conns: |
|
126 |
continue |
|
127 | ||
124 | 128 |
minDist = None |
125 | 129 |
startLine = None |
126 | 130 |
for line in self._lines: |
... | ... | |
269 | 273 |
@author humkyung |
270 | 274 |
@date 2018.06.17 |
271 | 275 |
@history humkyung 2018.06.21 paste connect attributes codes from recognizeLine function |
276 |
kyouho 2018.09.14 clear Item's owner |
|
272 | 277 |
''' |
273 | 278 |
def connectAttrImpl(worker): |
274 | 279 |
from LineNoTracer import LineNoTracer |
... | ... | |
284 | 289 |
if type(item) is QEngineeringSpecBreakItem: |
285 | 290 |
specBreak.append(item) |
286 | 291 |
elif issubclass(type(item), SymbolSvgItem): |
292 |
item.owner = None |
|
287 | 293 |
symbols.append(item) |
288 | 294 |
elif type(item) is QEngineeringLineNoTextItem: |
295 |
item.owner = None |
|
296 |
item.runs.clear() |
|
289 | 297 |
lineNos.append(item) |
290 | 298 |
elif type(item) is QEngineeringLineItem: |
299 |
item.owner = None |
|
291 | 300 |
lines.append(item) |
292 | 301 | |
293 | 302 |
# trace line no |
DTI_PID/DTI_PID/MainWindow.py | ||
---|---|---|
360 | 360 |
connCell = self.resultPropertyTableWidget.item(row, 0) |
361 | 361 |
if connCell.text() == 'CONN': |
362 | 362 |
## Line No Text Item의 CONN 속성 초기화 |
363 |
for index in range(len(items[0]._attrs)): |
|
364 |
if type(items[0]._attrs[index]) is tuple and items[0]._attrs[index][0] == 'CONN': |
|
365 |
items[0]._attrs[index] = (('CONN','')) |
|
363 |
items[0].conns.clear() |
|
366 | 364 | |
367 | 365 |
self.graphicsView.command = SelectAttributeCommand.SelectAttributeCommand(self.graphicsView) |
368 | 366 |
self.graphicsView.command.setType('Line Item') |
... | ... | |
1032 | 1030 |
self.dlgConnectAttr = QConnectAttrDialog(self, self.graphicsView) |
1033 | 1031 |
self.dlgConnectAttr.exec_() |
1034 | 1032 | |
1033 |
self.resultTreeWidget.InitLineNoItems() |
|
1034 | ||
1035 | 1035 |
# construct line no item |
1036 | 1036 |
docData = AppDocData.instance() |
1037 | 1037 |
for lineno in docData.lineNos: |
1038 | 1038 |
item = self.resultTreeWidget.addTreeItem(self.resultTreeWidget.root, lineno) |
1039 | 1039 |
connectedItems = lineno.getConnectedItems() |
1040 | 1040 |
for connectedItem in connectedItems: |
1041 |
if issubclass(type(connectedItem), SymbolSvgItem): self.resultTreeWidget.addTreeItem(item, connectedItem) |
|
1041 |
if issubclass(type(connectedItem), SymbolSvgItem): |
|
1042 |
self.resultTreeWidget.addTreeItem(item, connectedItem) |
|
1042 | 1043 |
# up to here |
1043 | 1044 |
except Exception as ex: |
1044 | 1045 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
... | ... | |
1433 | 1434 |
for attr in lineNo.iter('ATTRIBUTE'): |
1434 | 1435 |
item._attrs.append((attr.find('NAME').text, attr.find('VALUE').text)) |
1435 | 1436 | |
1437 |
connLine = lineNo.find('CONNLINE') |
|
1438 |
if connLine is not None: |
|
1439 |
lineUID = connLine.text |
|
1440 |
connLine = self.graphicsView.findItemByUid(lineUID) |
|
1441 |
if connLine is not None: |
|
1442 |
item.conns.append(connLine) |
|
1443 | ||
1436 | 1444 |
run = lineNo.find('RUN') |
1437 | 1445 |
if run is not None: |
1438 | 1446 |
lineRunItem = QEngineeringRunItem() |
DTI_PID/DTI_PID/QtImageViewer.py | ||
---|---|---|
333 | 333 |
items = self.scene.selectedItems() |
334 | 334 |
if self.command.resultItem is not None and items is not None and len(items) == 1 and self.command.getType() == 'Line Item': |
335 | 335 |
items = self.scene.selectedItems() |
336 |
for index in range(len(items[0]._attrs)): |
|
337 |
if type(items[0]._attrs[index]) is tuple and items[0]._attrs[index][0] == 'CONN': |
|
338 |
items[0]._attrs[index] = ('CONN', self.command.resultItem.uid) |
|
339 |
break |
|
336 |
items[0].conns.clear() |
|
337 |
items[0].conns.append(self.command.resultItem) |
|
338 |
|
|
340 | 339 |
self.mainWindow.refreshResultPropertyTableWidget() |
341 | 340 |
elif self.command.resultItem is not None and items is not None and len(items) == 1: |
342 | 341 |
attrItem = self.command.resultItem |
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py | ||
---|---|---|
466 | 466 |
for i in range(len(obj.connectors)): |
467 | 467 |
pt = obj.connectors[i].sceneConnectPoint |
468 | 468 | |
469 |
if (self.connectors[0].connectedItem is None) and (Point(startPt[0], startPt[1]).distance(Point(pt[0], pt[1])) < toler): |
|
470 |
self.connectors[0].connectedItem = obj |
|
471 |
obj.connectors[i].connectedItem = self |
|
469 |
if (Point(startPt[0], startPt[1]).distance(Point(pt[0], pt[1])) < toler): |
|
470 |
if self.connectors[0].connectedItem is None: |
|
471 |
self.connectors[0].connectedItem = obj |
|
472 |
if obj.connectors[i].connectedItem is None: |
|
473 |
obj.connectors[i].connectedItem = self |
|
474 | ||
472 | 475 |
res.append(obj) |
473 |
if (self.connectors[1].connectedItem is None) and (Point(endPt[0], endPt[1]).distance(Point(pt[0], pt[1])) < toler): |
|
474 |
self.connectors[1].connectedItem = obj |
|
475 |
obj.connectors[i].connectedItem = self |
|
476 |
if (Point(endPt[0], endPt[1]).distance(Point(pt[0], pt[1])) < toler): |
|
477 |
if self.connectors[1].connectedItem is None: |
|
478 |
self.connectors[1].connectedItem = obj |
|
479 |
if obj.connectors[i].connectedItem is None: |
|
480 |
obj.connectors[i].connectedItem = self |
|
481 | ||
476 | 482 |
res.append(obj) |
477 | 483 |
elif type(obj) is QEngineeringLineItem: |
478 | 484 |
_startPt = obj.startPoint() |
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py | ||
---|---|---|
124 | 124 |
for attr in self._attrs: |
125 | 125 |
if type(attr) is UserInputAttribute: |
126 | 126 |
attrs[attr.attribute] = attr.text |
127 |
elif type(attr) is tuple: |
|
128 |
attrs[attr[0]] = attr[1] |
|
129 | 127 | |
128 |
attrs['CONN'] = self.conns[0].uid if self.conns else '' |
|
130 | 129 |
except Exception as ex: |
131 | 130 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
132 | 131 |
|
... | ... | |
202 | 201 |
node.append(attrNode) |
203 | 202 |
else: |
204 | 203 |
node.append(attr.toXml()) |
204 |
|
|
205 |
if self.conns: |
|
206 |
connNode = Element('CONNLINE') |
|
207 |
connNode.text = self.conns[0].uid |
|
208 |
node.append(connNode) |
|
209 | ||
205 | 210 |
except Exception as ex: |
206 | 211 |
return str(self.uid) |
207 | 212 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py | ||
---|---|---|
224 | 224 |
startPt = obj.startPoint() |
225 | 225 |
endPt = obj.endPoint() |
226 | 226 |
for i in range(len(self.connectors)): |
227 |
if (self.connectors[i].connectedItem is None) and (Point(startPt[0], startPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler): |
|
228 |
self.connectors[i].connectedItem = obj |
|
229 |
obj.connectors[0].connectedItem = self |
|
227 |
if (Point(startPt[0], startPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler): |
|
228 |
if self.connectors[i].connectedItem is None: |
|
229 |
self.connectors[i].connectedItem = obj |
|
230 |
if obj.connectors[0].connectedItem is None: |
|
231 |
obj.connectors[0].connectedItem = self |
|
232 |
|
|
230 | 233 |
res.append(obj) |
231 |
if (self.connectors[i].connectedItem is None) and (Point(endPt[0], endPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler): |
|
232 |
self.connectors[i].connectedItem = obj |
|
233 |
obj.connectors[1].connectedItem = self |
|
234 |
if (Point(endPt[0], endPt[1]).distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler): |
|
235 |
if self.connectors[i].connectedItem is None: |
|
236 |
self.connectors[i].connectedItem = obj |
|
237 |
if obj.connectors[1].connectedItem is None: |
|
238 |
obj.connectors[1].connectedItem = self |
|
239 |
|
|
234 | 240 |
res.append(obj) |
235 | 241 |
elif issubclass(type(obj), SymbolSvgItem): |
236 | 242 |
for i in range(len(self.connectors)): |
237 | 243 |
for j in range(len(obj.connectors)): |
238 | 244 |
_pt = Point(obj.connectors[j].sceneConnectPoint[0], obj.connectors[j].sceneConnectPoint[1]) |
239 |
if (self.connectors[i].connectedItem is None) and (_pt.distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler): |
|
240 |
self.connectors[i].connectedItem = obj |
|
241 |
obj.connectors[j].connectedItem = self |
|
245 |
if (_pt.distance(Point(self.connectors[i].sceneConnectPoint[0], self.connectors[i].sceneConnectPoint[1])) < toler): |
|
246 |
if self.connectors[i].connectedItem is None: |
|
247 |
self.connectors[i].connectedItem = obj |
|
248 |
if obj.connectors[j].connectedItem is none : |
|
249 |
obj.connectors[j].connectedItem = self |
|
250 | ||
242 | 251 |
res.append(obj) |
243 | 252 | |
244 | 253 |
return res |
내보내기 Unified diff