프로젝트

일반

사용자정보

개정판 6c3575de

ID6c3575ded978842532b9dbbbb49fc000554f0583
상위 1c604848
하위 8a865168, 37be607a

백흠경이(가) 약 4년 전에 추가함

Upload RotateCommand

Change-Id: I700df44d741787dbf85c6acb85ffbcd54a6766a0

차이점 보기:

HYTOS/HYTOS/Commands/RotateCommand.py
1
# coding: utf-8
2
""" This is rotate command module """
3
import os.path
4
import sys
5
from SymbolSvgItem import SymbolSvgItem
6
from PyQt5.QtCore import *
7
from PyQt5.QtGui import *
8
from PyQt5.QtWidgets import *
9

  
10

  
11
class RotateCommand(QUndoCommand):
12
    def __init__(self, scene, items, reverse=False, angles=None, parent=None):
13
        from SymbolSvgItem import SymbolSvgItem
14
        from EngineeringEqpDescTextItem import QEngineeringEqpDescTextItem
15

  
16
        super(RotateCommand, self).__init__(parent)
17
        self._reverse = reverse
18
        self._scene = scene
19
        self._items = [item for item in items if issubclass(type(item), SymbolSvgItem) or
20
                       type(item) is QEngineeringEqpDescTextItem]
21
        self._params = [item.rotation() for item in self._items] if angles is None else angles
22
        self._rotated = True if angles is not None  else False
23

  
24
    def undo(self):
25
        """undo"""
26
        import math
27

  
28
        for idx, item in enumerate(self._items):
29
            item.rotate(self._params[idx])
30

  
31
        self._scene.update()
32

  
33
        self._rotated = False
34

  
35
    def redo(self):
36
        """redo"""
37
        import math
38

  
39
        if not self._rotated:
40
            _params = []
41
            for idx, item in enumerate(self._items):
42
                angle = item.rotation()
43
                _params.append(angle)
44

  
45
                if self._reverse:
46
                    item.rotate((angle - 90) % 360 if angle in [0, 90, 180, 270, 360] else 0)
47
                else:
48
                    item.rotate((angle + 90) % 360 if angle in [0, 90, 180, 270, 360] else 0)
49

  
50
            self._params = _params
51
            self._scene.update()

내보내기 Unified diff

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