개정판 6c3575de
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