hytos / HYTOS / HYTOS / Commands / RotateCommand.py @ 6c3575de
이력 | 보기 | 이력해설 | 다운로드 (1.61 KB)
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()
|