프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

hytos / HYTOS / HYTOS / Commands / ConnectionPointCommand.py @ 928be99b

이력 | 보기 | 이력해설 | 다운로드 (4.31 KB)

1
import os.path
2
import AbstractCommand
3
try:
4
    from PyQt5.QtCore import *
5
    from PyQt5.QtGui import *
6
    from PyQt5.QtWidgets import *
7
except ImportError:
8
    try:
9
        from PyQt4.QtCore import Qt, QPoint, QPointF, QRectF, pyqtSignal, QT_VERSION_STR, QMimeData
10
        from PyQt4.QtGui import QGraphicsView, QGraphicsScene, QImage, QPixmap, QPainterPath, QFileDialog, QColor, QPen, QBrush, QCursor
11
    except ImportError:
12
        raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.")
13

    
14
class ConnectionPointCommand(AbstractCommand.AbstractCommand):
15
    """
16
    ConnectionPointCommand class
17
    """
18

    
19
    onSuccess = pyqtSignal(QGraphicsItem)
20

    
21
    def __init__(self, imageViewer, connectionPointLineEdit):
22
        super(ConnectionPointCommand, self).__init__(imageViewer)
23
        self.name = 'ConnectionPoint' 
24
        self.connectionPointLineEdit = connectionPointLineEdit
25
        self.imageViewer.setCursor(QCursor(Qt.CrossCursor))
26
        self.imageWidth = self.imageViewer.image().width()
27
        self.imageHeight = self.imageViewer.image().height()
28
        self.initMinPoint = QPointF(self.imageWidth * -1, self.imageHeight * -1)
29
        self.connectionPointLineEdit.setText("")
30
    
31
    '''
32
        @brief      pan image by left click and drag
33
        @history    2016.06.12  Jeongwoo    Make new point (newScenePos)
34
    '''
35
    def execute(self, param):
36
        from EngineeringOriginItem import QEngineeringOriginItem
37
        from EngineeringGuidelineItem import QEngineeringGuidelineItem
38

    
39
        event = param[1]
40
        scenePos = param[2]
41

    
42
        newScenePos = QPointF(round(scenePos.x()), round(scenePos.y()))
43
        items = [item for item in self.imageViewer.scene.items(scenePos) \
44
            if type(item) is QEngineeringOriginItem or type(item) is QEngineeringGuidelineItem]
45

    
46
        originItem = None
47
        if items and type(items[0]) is QEngineeringGuidelineItem:
48
            originItem = items[0].parentItem()
49
        elif items and type(items[0]) is QEngineeringOriginItem:
50
            originItem = items[0]
51

    
52
        if originItem is not None:
53
            center = originItem.rect().center() 
54
            dx = scenePos.x() - center.x()
55
            dy = scenePos.y() - center.y()
56
            if abs(dx) < 1:
57
                newScenePos.setX(center.x())
58
            if abs(dy) < 1:
59
                newScenePos.setY(center.y())
60

    
61
        if 'mousePressEvent' == param[0]:
62
            if event.button() == Qt.LeftButton:
63
                if self.isOnImage(newScenePos.x(), newScenePos.y()):
64
                    ## drawCircle Method is static
65
                    conn = ConnectionPointCommand.drawCircle(self.imageViewer, newScenePos.x(), newScenePos.y())
66
                    text = "{},{}".format(newScenePos.x(), newScenePos.y())
67
                    self.connectionPointLineEdit.setText(text)
68
                    self.onSuccess.emit(conn)
69
                else:
70
                    QMessageBox.information(self.imageViewer, self.tr('Information'), self.tr('Please select inside of the symbol.'))
71

    
72
                QGraphicsView.mousePressEvent(self.imageViewer, event)
73
        elif 'mouseMoveEvent' == param[0]:
74
            if self.isOnImage(newScenePos.x(), newScenePos.y()):
75
                self.connectionPointLineEdit.setText("{},{}".format(newScenePos.x(), newScenePos.y()))
76
            else:
77
                self.connectionPointLineEdit.setText("")
78
            pass
79
        self.isTreated = False
80
        
81
    '''
82
        @history    2018.06.11  Jeongwoo    Shorten method to add Ellipse
83
                    2018.06.12  Jeongwoo    Modify RectF's coords
84
                    humkyung 2018.08.28 add connector item instead of QGraphicsEllipse
85
    '''
86
    @staticmethod
87
    def drawCircle(imageViewer, x, y):
88
        from EngineeringConnectorItem import QEngineeringConnectorItem
89

    
90
        connector = QEngineeringConnectorItem()
91
        connector.setPos((float(x), float(y)))
92
        imageViewer.scene.addItem(connector)
93

    
94
        return connector
95

    
96
    '''
97
        @history    2018.06.11  Jeongwoo    Make area bigger (width/height 1px)
98
                    2018.06.12  Jeongwoo    Make area smaller (width/height 1px)
99
    '''
100
    def isOnImage(self, x, y):
101
        if (x >= 0 and x <= self.imageWidth) and (y >= 0 and y <= self.imageHeight):
102
            return True
103
        else:
104
            return False
105
        
106
    def undo(self):
107
        pass
108

    
109
    def redo(self):
110
        pass
클립보드 이미지 추가 (최대 크기: 500 MB)