프로젝트

일반

사용자정보

개정판 e16fab8a

IDe16fab8a029f32130412b72382529e47d2307951
상위 434edcb3
하위 c49057e1

함의성이(가) 약 6년 전에 추가함

issue #538: 7(end break) on going and save bug also

Change-Id: Ic30afbcf7bbee1467a983507ac06175de31d5122

차이점 보기:

DTI_PID/DTI_PID/ItemPropertyTableWidget.py
457 457
                owner_item.setData(Qt.UserRole, attr)
458 458
                self.setItem(5, 1, owner_item)
459 459
                
460
                if type(self._item) is not  QEngineeringSpecBreakItem and type(self._item) is not QEngineeringErrorItem:
460
                if type(self._item) is not QEngineeringSpecBreakItem and type(self._item) is not QEngineeringErrorItem:
461 461
                    self.show_item_properties(self._item)
462 462

  
463 463
                if type(self._item) is QEngineeringSpecBreakItem:
DTI_PID/DTI_PID/ItemTreeWidget.py
26 26
from QEngineeringTrimLineNoTextItem import QEngineeringTrimLineNoTextItem
27 27
from EngineeringUnknownItem import QEngineeringUnknownItem
28 28
from EngineeringErrorItem import QEngineeringErrorItem
29
from EngineeringEndBreakItem import QEngineeringEndBreakItem
29 30
from AppDocData import AppDocData
30 31
from Drawing import Drawing
31 32

  
......
484 485
    lastSceneItems = None
485 486
    def sceneChanged(self, sceneItems):
486 487
        try:
487
            changedSceneItems = [item for item in sceneItems if ((issubclass(type(item), SymbolSvgItem) and type(item) is not QEngineeringErrorItem) or (type(item) is QEngineeringNoteItem) or (type(item) is QEngineeringLineNoTextItem) 
488
            changedSceneItems = [item for item in sceneItems if ((issubclass(type(item), SymbolSvgItem) and type(item) is not QEngineeringErrorItem and type(item) is not QEngineeringEndBreakItem) or (type(item) is QEngineeringNoteItem) or (type(item) is QEngineeringLineNoTextItem) 
488 489
                                or (type(item) is QEngineeringUnknownItem)) and (not hasattr(item, 'treeItem') or item.treeItem is None)] # Sublist includes SymbolSvgItem
489 490
            first = [item for item in changedSceneItems if item.owner is None]
490 491
            second = [item for item in changedSceneItems if item.owner is not None]
DTI_PID/DTI_PID/LineNoTracer.py
463 463
            and type(symbol) is not QEngineeringOPCItem and type(symbol) is not QEngineeringSpecBreakItem]
464 464
        for valve in valves:
465 465
            valve.connectAttribute(labels, clear=False)
466

  
467
        """make line end break"""
468
        end_breaks = []
469
        for lineNo in lineNos:
470
            for end_break in lineNo.end_break():
471
                end_breaks.append(end_break)
472
        if end_breaks:
473
            dupl = set()
474
            for i in range(len(end_breaks)):
475
                for j in range(len(end_breaks)):
476
                    if i == j:
477
                        continue
478
                    else:
479
                        setI = set(end_breaks[i].connected_lines)
480
                        setJ = set(end_breaks[j].connected_lines)
481
                        if not (setI - setJ):
482
                            index = [i, j]
483
                            index.sort()
484
                            index = tuple(index)
485
                            dupl.add(index)
486

  
487
            dupl = [indexSet[1] for indexSet in list(dupl)]
488
            dupl.sort(reverse=True)
489
            for index in dupl:
490
                end_breaks.pop(index)
491

  
492
            for end_break in end_breaks:
493
                worker.graphicsView.scene.addItem(end_break)
494

  
466 495
    except Exception as ex:
467 496
        from App import App 
468 497
        message = '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/EngineeringEndBreakItem.py
1
# coding: utf-8
2
"""
3
This is Engineering Error Item module
4
"""
5

  
6
import sys
7
import os
8
import math
9
from PyQt5.QtGui import *
10
from PyQt5.QtCore import *
11
from PyQt5.QtSvg import *
12
from PyQt5.QtWidgets import *
13

  
14
from SymbolSvgItem import SymbolSvgItem
15
from EngineeringLineItem import QEngineeringLineItem
16
from EngineeringConnectorItem import QEngineeringConnectorItem
17
from EngineeringTextItem import QEngineeringTextItem
18
from UserInputAttribute import UserInputAttribute
19

  
20
class QEngineeringEndBreakItem(SymbolSvgItem):
21
    """
22
    This is Engineering Error Item class
23
    """
24
    clicked = pyqtSignal(QGraphicsSvgItem)
25

  
26
    '''
27
    '''
28
    ZVALUE = 20
29
    def __init__(self, path, uid=None, flip=0):
30
        SymbolSvgItem.__init__(self, path, uid, flip=flip)
31
        self.setZValue(QEngineeringEndBreakItem.ZVALUE)
32
        self.connected_lines = []
33

  
34
    def setPosition(self, loc, origin):
35
        transform = QTransform()
36
        transform.translate(loc[0] - origin[0], loc[1] - origin[1])
37
        self.origin = origin
38
        self.loc = loc
39
        self.setTransform(transform)
40

  
41
    def keyPressEvent(self, event): 
42
        if self.isSelected() and event.key() == Qt.Key_Delete:
43
            self.scene().removeItem(self)
44
    
45
    def toXml(self):
46
        # on going
47
        return None
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py
884 884
            @author euisung
885 885
            @date   2019.04.01
886 886
        '''
887
        from EngineeringErrorItem import QEngineeringErrorItem
888 887
        from SymbolSvgItem import SymbolSvgItem
889 888
        from AppDocData import AppDocData
890 889
        errors = []
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py
340 340

  
341 341
        return node 
342 342

  
343
    def end_break(self):
344
        '''
345
            @brief  end break check
346
            @author euisung
347
            @date   2019.05.07
348
        '''
349
        from EngineeringLineItem import QEngineeringLineItem
350
        from SymbolSvgItem import SymbolSvgItem
351
        from AppDocData import AppDocData
352
        end_breaks = []
353

  
354
        try:
355
            docdata = AppDocData.instance()
356
            dataPath = docdata.getErrorItemSvgPath()
357
            origin = [int(pt) for pt in docdata.getAppConfigs('app', 'error origin point')[0].value.split(',')]
358

  
359
            line_from = self.get_property('From')
360
            line_to = self.get_property('To')
361

  
362
            if type(line_from) is QEngineeringLineItem and line_from.connectors[0].connectedItem is not None and type(line_from.connectors[0].connectedItem) is QEngineeringLineItem:
363
                end_break = SymbolSvgItem.createItem('End Break', dataPath)
364
                end_break.setPosition(line_from.connectors[0].center(), origin)
365
                end_break.parent = self
366
                end_break.connected_lines = [line_from.uid, line_from.connectors[0].connectedItem.uid]
367
                end_break.setToolTip(str(end_break.connected_lines))
368
                end_break.area = 'Drawing'
369
                end_break.name = 'End Break'
370
                end_breaks.append(end_break)
371

  
372
            if type(line_to) is QEngineeringLineItem and line_to.connectors[1].connectedItem is not None and type(line_to.connectors[1].connectedItem) is QEngineeringLineItem:
373
                end_break = SymbolSvgItem.createItem('End Break', dataPath)
374
                end_break.setPosition(line_to.connectors[1].center(), origin)
375
                end_break.parent = self
376
                end_break.connected_lines = [line_to.uid, line_to.connectors[1].connectedItem.uid]
377
                end_break.setToolTip(str(end_break.connected_lines))
378
                end_break.area = 'Drawing'
379
                end_break.name = 'End Break'
380
                end_breaks.append(end_break)
381

  
382
        except Exception as ex:
383
            from App import App 
384
            from AppDocData import MessageType
385

  
386
            message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)
387
            App.mainWnd().addMessage.emit(MessageType.Error, message)
388
        
389
        return end_breaks
390

  
343 391
    '''
344 392
        @Override (QEngineeringTextItem)
345 393
        @brief  get connected items
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py
989 989
        from EngineeringSpecBreakItem import QEngineeringSpecBreakItem
990 990
        from EngineeringReducerItem import QEngineeringReducerItem
991 991
        from EngineeringErrorItem import QEngineeringErrorItem
992
        from EngineeringEndBreakItem import QEngineeringEndBreakItem
992 993
        from AppDocData import AppDocData
993 994

  
994 995
        docData = AppDocData.instance()
......
1009 1010
            item = QEngineeringReducerItem(path, uid, flip=flip)
1010 1011
        elif type == 'Error':
1011 1012
            item = QEngineeringErrorItem(path, uid, flip=flip)
1013
        elif type == 'End Break':
1014
            item = QEngineeringEndBreakItem(path, uid, flip=flip)
1012 1015
        else:
1013 1016
            item = SymbolSvgItem(path, uid, flip=flip)
1014 1017

  
DTI_PID/DTI_PID/XmlGenerator.py
408 408
                resultDic[key] = [0, []]
409 409

  
410 410
            node = None
411
            if type(item) is QEngineeringNoteItem:
412
                node = item.toXml(name = 'NOTE')
413
            elif type(item) is QEngineeringSizeTextItem:
414
                node = item.toXml(name='SIZE')
415
            elif type(item) is QEngineeringValveOperCodeTextItem:
416
                node = item.toXml(name='VALVE OPER CODE')
417
            elif issubclass(type(item), QEngineeringAbstractItem) and type(item) is not QGraphicsBoundingBoxItem:
418
                node = item.toXml()
419
            else:
411
            try:
412
                if type(item) is QEngineeringNoteItem:
413
                    node = item.toXml(name = 'NOTE')
414
                elif type(item) is QEngineeringSizeTextItem:
415
                    node = item.toXml(name='SIZE')
416
                elif type(item) is QEngineeringValveOperCodeTextItem:
417
                    node = item.toXml(name='VALVE OPER CODE')
418
                elif issubclass(type(item), QEngineeringAbstractItem) and type(item) is not QGraphicsBoundingBoxItem:
419
                    node = item.toXml()
420
                else:
421
                    continue
422
            except Exception as ex:
423
                from App import App
424
                from AppDocData import MessageType
425

  
426
                message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)
427
                App.mainWnd().addMessage.emit(MessageType.Error, message)
428
            finally:
420 429
                continue
421 430

  
422 431
            if node:

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)