개정판 423d6366
issue #538: add end break creation conditions
Change-Id: I1ad4012130701c34449c7f9e808d7f1857eb9a33
DTI_PID/DTI_PID/LineNoTracer.py | ||
---|---|---|
406 | 406 |
kyouho 2018.09.14 clear Item's owner |
407 | 407 |
''' |
408 | 408 |
def connectAttrImpl(worker, update_line_type): |
409 |
import os |
|
410 |
from App import App |
|
409 | 411 |
from LineNoTracer import LineNoTracer |
410 | 412 |
from AppDocData import AppDocData |
411 | 413 |
from EngineeringSpecBreakItem import QEngineeringSpecBreakItem |
... | ... | |
477 | 479 |
for line in lines: line.update_line_type() |
478 | 480 |
|
479 | 481 |
"""make end break""" |
480 |
end_breaks = [] |
|
481 |
for lineNo in lineNos: |
|
482 |
for end_break in lineNo.end_break(): |
|
483 |
end_breaks.append(end_break) |
|
484 |
|
|
485 |
for end_break in end_breaks: |
|
486 |
end_break.addSvgItemToScene(worker.graphicsView.scene) |
|
482 |
docdata = AppDocData.instance() |
|
487 | 483 |
|
488 |
if end_breaks: |
|
484 |
end_break_names = docdata.getSymbolListByType('type', 'End Break') |
|
485 |
if len(end_break_names) is not 0: |
|
486 |
|
|
487 |
svgFileName = end_break_names[0].sName |
|
488 |
symbol = AppDocData.instance().getSymbolByQuery('name', svgFileName) |
|
489 |
svgFilePath = os.path.join(AppDocData.instance().getCurrentProject().getSvgFilePath(), symbol.getType(), svgFileName+'.svg') |
|
490 |
|
|
491 |
end_breaks = [] |
|
492 |
lineNo_froms = [] |
|
493 |
lineNo_tos = [] |
|
494 |
|
|
495 |
for lineNo in lineNos: |
|
496 |
lineNo_froms.append(lineNo.prop('From')) |
|
497 |
lineNo_tos.append(lineNo.prop('To')) |
|
498 |
end_breaks.extend(lineNo.end_break()) |
|
499 |
|
|
500 |
for lineNo_from in lineNo_froms + lineNo_tos: |
|
501 |
for connector in lineNo_from.connectors: |
|
502 |
for lineNo_to in lineNo_tos + lineNo_froms: |
|
503 |
if lineNo_from is lineNo_to: continue |
|
504 |
if connector.connectedItem is lineNo_to: |
|
505 |
end_break = SymbolSvgItem.createItem(symbol.getType(), svgFilePath) |
|
506 |
pt = [connector.center()[0] - float(symbol.getOriginalPoint().split(',')[0]), connector.center()[1] - float(symbol.getOriginalPoint().split(',')[1])] |
|
507 |
origin = [0,0] |
|
508 |
if 2 == len(symbol.getOriginalPoint().split(',')): |
|
509 |
tokens = symbol.getOriginalPoint().split(',') |
|
510 |
origin = [pt[0] + float(tokens[0]), pt[1] + float(tokens[1])] |
|
511 |
end_break.buildItem(svgFileName, symbol.getType(), 5.7, pt, [end_break.boundingRect().width(), end_break.boundingRect().height()], origin, [], symbol.getBaseSymbol(), symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel()) |
|
512 |
|
|
513 |
end_break.set_property('Connected Item', lineNo_to) |
|
514 |
end_break.setToolTip('owner : ' + str(lineNo_from)) |
|
515 |
end_break.area = 'Drawing' |
|
516 |
end_break.owner = lineNo_from |
|
517 |
end_breaks.append(end_break) |
|
518 |
|
|
519 |
if end_breaks: |
|
489 | 520 |
# check dulplication |
490 |
dupl = set() |
|
491 |
for i in range(len(end_breaks)): |
|
492 |
for j in range(len(end_breaks)): |
|
493 |
if i == j: |
|
494 |
continue |
|
495 |
else: |
|
496 |
setI = set([end_breaks[i].owner, end_breaks[i].prop('Connected Item')]) |
|
497 |
setJ = set([end_breaks[j].owner, end_breaks[j].prop('Connected Item')]) |
|
498 |
if not (setI - setJ): |
|
499 |
index = [i, j] |
|
500 |
index.sort() |
|
501 |
index = tuple(index) |
|
502 |
dupl.add(index) |
|
503 |
|
|
504 |
dupl = [indexSet[1] for indexSet in list(dupl)] |
|
505 |
dupl.sort(reverse=True) |
|
506 |
for index in dupl: |
|
507 |
end_breaks.pop(index) |
|
521 |
dupl = set() |
|
522 |
for i in range(len(end_breaks)): |
|
523 |
for j in range(len(end_breaks)): |
|
524 |
if i == j: continue |
|
525 |
else: |
|
526 |
setI = set([end_breaks[i].owner, end_breaks[i].prop('Connected Item')]) |
|
527 |
setJ = set([end_breaks[j].owner, end_breaks[j].prop('Connected Item')]) |
|
528 |
if not (setI - setJ): |
|
529 |
index = [i, j] |
|
530 |
index.sort() |
|
531 |
index = tuple(index) |
|
532 |
dupl.add(index) |
|
533 |
#print(dupl) |
|
534 |
dupl = list(set([indexSet[1] for indexSet in list(dupl)])) |
|
535 |
dupl.sort(reverse=True) |
|
536 |
#print(dupl) |
|
537 |
for index in dupl: |
|
538 |
end_breaks.pop(index) |
|
539 |
|
|
540 |
for end_break in end_breaks: |
|
541 |
end_break.transfer.onRemoved.connect(App.mainWnd().itemRemoved) |
|
542 |
end_break.addSvgItemToScene(worker.graphicsView.scene) |
|
508 | 543 |
|
509 | 544 |
except Exception as ex: |
510 | 545 |
from App import App |
... | ... | |
512 | 547 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
513 | 548 |
finally: |
514 | 549 |
worker.finished.emit() |
550 |
|
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py | ||
---|---|---|
369 | 369 |
@brief end break check |
370 | 370 |
@author euisung |
371 | 371 |
@date 2019.05.07 |
372 |
@history 2019.05.19 euisung can cover only line to line, line to symbol and symbol to symbol will be checked in linenotracer |
|
372 | 373 |
''' |
373 | 374 |
from EngineeringLineItem import QEngineeringLineItem |
374 | 375 |
from SymbolSvgItem import SymbolSvgItem |
... | ... | |
377 | 378 |
|
378 | 379 |
try: |
379 | 380 |
docdata = AppDocData.instance() |
380 |
dataPath = docdata.getErrorItemSvgPath() |
|
381 |
origin = [int(pt) for pt in docdata.getAppConfigs('app', 'error origin point')[0].value.split(',')] |
|
382 | 381 |
|
383 | 382 |
line_from = self.prop('From') |
384 | 383 |
line_to = self.prop('To') |
... | ... | |
391 | 390 |
symbol = AppDocData.instance().getSymbolByQuery('name', svgFileName) |
392 | 391 |
svgFilePath = os.path.join(AppDocData.instance().getCurrentProject().getSvgFilePath(), symbol.getType(), svgFileName+'.svg') |
393 | 392 |
|
394 |
if (type(line_from) is QEngineeringLineItem or issubclass(type(line_from), SymbolSvgItem)) and line_from.connectors[0].connectedItem is not None and (type(line_from.connectors[0].connectedItem) is QEngineeringLineItem or issubclass(type(line_from.connectors[0].connectedItem), SymbolSvgItem)): |
|
393 |
|
|
394 |
if type(line_from) is QEngineeringLineItem and line_from.connectors[0].connectedItem is not None and type(line_from.connectors[0].connectedItem) is QEngineeringLineItem: |
|
395 | 395 |
end_break = SymbolSvgItem.createItem(symbol.getType(), svgFilePath) |
396 | 396 |
pt = [line_from.connectors[0].center()[0] - float(symbol.getOriginalPoint().split(',')[0]), line_from.connectors[0].center()[1] - float(symbol.getOriginalPoint().split(',')[1])] |
397 | 397 |
origin = [0,0] |
... | ... | |
400 | 400 |
origin = [pt[0] + float(tokens[0]), pt[1] + float(tokens[1])] |
401 | 401 |
end_break.buildItem(svgFileName, symbol.getType(), 5.7, pt, [end_break.boundingRect().width(), end_break.boundingRect().height()], origin, [], symbol.getBaseSymbol(), symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel()) |
402 | 402 |
#end_break.connected_lines = [line_from.uid, line_from.connectors[0].connectedItem.uid] |
403 |
attrs = end_break.getAttributes() |
|
403 |
#attrs = end_break.getAttributes()
|
|
404 | 404 |
#for attr in attrs.keys(): |
405 | 405 |
# if attr.Attribute == 'Connected Line': |
406 | 406 |
# attrs[attr] = str(line_from.connectors[0].connectedItem.uid) |
... | ... | |
412 | 412 |
end_break.owner = line_from |
413 | 413 |
end_breaks.append(end_break) |
414 | 414 |
|
415 |
if (type(line_to) is QEngineeringLineItem or issubclass(type(line_to), SymbolSvgItem)) and line_to.connectors[1].connectedItem is not None and (type(line_from.connectors[1].connectedItem) is QEngineeringLineItem or issubclass(type(line_from.connectors[1].connectedItem), SymbolSvgItem)):
|
|
415 |
if type(line_to) is QEngineeringLineItem and line_to.connectors[1].connectedItem is not None and type(line_from.connectors[1].connectedItem) is QEngineeringLineItem:
|
|
416 | 416 |
end_break = SymbolSvgItem.createItem(symbol.getType(), svgFilePath) |
417 | 417 |
pt = [line_to.connectors[1].center()[0] - float(symbol.getOriginalPoint().split(',')[0]), line_to.connectors[1].center()[1] - float(symbol.getOriginalPoint().split(',')[1])] |
418 | 418 |
origin = [0,0] |
... | ... | |
421 | 421 |
origin = [pt[0] + float(tokens[0]), pt[1] + float(tokens[1])] |
422 | 422 |
end_break.buildItem(svgFileName, symbol.getType(), 5.7, pt, [end_break.boundingRect().width(), end_break.boundingRect().height()], origin, [], symbol.getBaseSymbol(), symbol.getAdditionalSymbol(), symbol.getHasInstrumentLabel()) |
423 | 423 |
#end_break.connected_lines = [line_to.uid, line_to.connectors[1].connectedItem.uid] |
424 |
attrs = end_break.getAttributes() |
|
424 |
#attrs = end_break.getAttributes()
|
|
425 | 425 |
#for attr in attrs.keys(): |
426 | 426 |
# if attr.Attribute == 'Connected Line': |
427 | 427 |
# attrs[attr] = str(line_to.connectors[1].connectedItem.uid) |
내보내기 Unified diff