개정판 acab3bcc
issue #610: apply free mode('F' key) when create or modify line
Change-Id: I6e9b0d9e8d622ecaaf03d98bb6e6da8eb5af8338
DTI_PID/DTI_PID/Commands/PlaceLineCommand.py | ||
---|---|---|
81 | 81 |
if event.key() == Qt.Key_Escape: |
82 | 82 |
self.onRejected.emit(self) |
83 | 83 |
self.isTreated = False |
84 |
elif event.key() == Qt.Key_A: # axis lock mode |
|
85 |
self._polyline.drawing_mode = QEngineeringPolylineItem.AXIS_MODE |
|
86 |
elif event.key() == Qt.Key_F: # free drawing mode |
|
87 |
self._polyline.drawing_mode = QEngineeringPolylineItem.FREE_MODE |
|
84 | 88 |
|
85 | 89 |
def undo(self): |
86 | 90 |
pass |
DTI_PID/DTI_PID/Shapes/EngineeringConnectorItem.py | ||
---|---|---|
1 | 1 |
# coding: utf-8 |
2 |
""" |
|
3 |
This is engineering connector item module |
|
4 |
""" |
|
2 | 5 |
|
3 | 6 |
import os.path |
4 | 7 |
import copy |
... | ... | |
26 | 29 |
BIG_SIZE = 16 |
27 | 30 |
HIGHLIGHT = '#BC4438' |
28 | 31 |
|
32 |
AXIS_MODE = 0 |
|
33 |
FREE_MODE = 1 |
|
34 |
|
|
29 | 35 |
''' |
30 | 36 |
@brief |
31 | 37 |
@author |
... | ... | |
53 | 59 |
self.setAcceptHoverEvents(True) |
54 | 60 |
self.transfer = Transfer() |
55 | 61 |
|
62 |
self._drawing_mode = QEngineeringConnectorItem.AXIS_MODE |
|
63 |
|
|
56 | 64 |
''' |
57 | 65 |
@brief getter of direction |
58 | 66 |
@author humkyung |
... | ... | |
242 | 250 |
items[0].connectedItem = self.parent |
243 | 251 |
else: |
244 | 252 |
pt = [event.scenePos().x(), event.scenePos().y()] |
245 |
if len(self.parentItem().connectors) == 2: |
|
246 |
other = [connector for connector in self.parent.connectors if connector is not self] |
|
247 |
if other: |
|
248 |
pt = [event.scenePos().x(), event.scenePos().y()] |
|
249 |
dx = abs(pt[0] - other[0].center()[0]) |
|
250 |
dy = abs(pt[1] - other[0].center()[1]) |
|
251 |
if dx < dy: |
|
252 |
pt[0] = other[0].center()[0] |
|
253 |
else: |
|
254 |
pt[1] = other[0].center()[1] |
|
253 |
if self._drawing_mode == QEngineeringConnectorItem.AXIS_MODE: |
|
254 |
if len(self.parentItem().connectors) == 2: |
|
255 |
other = [connector for connector in self.parent.connectors if connector is not self] |
|
256 |
if other: |
|
257 |
pt = [event.scenePos().x(), event.scenePos().y()] |
|
258 |
dx = abs(pt[0] - other[0].center()[0]) |
|
259 |
dy = abs(pt[1] - other[0].center()[1]) |
|
260 |
if dx < dy: |
|
261 |
pt[0] = other[0].center()[0] |
|
262 |
else: |
|
263 |
pt[1] = other[0].center()[1] |
|
255 | 264 |
|
256 | 265 |
self.setPos(pt) |
257 | 266 |
if self.connectedItem is not None: |
... | ... | |
316 | 325 |
self.setPos(items[0].center()) |
317 | 326 |
else: |
318 | 327 |
pt = [event.scenePos().x(), event.scenePos().y()] |
319 |
if len(self.parentItem().connectors) == 2: |
|
320 |
other = [connector for connector in self.parent.connectors if connector is not self] |
|
321 |
if other: |
|
322 |
pt = [event.scenePos().x(), event.scenePos().y()] |
|
323 |
dx = abs(pt[0] - other[0].center()[0]) |
|
324 |
dy = abs(pt[1] - other[0].center()[1]) |
|
325 |
if dx < dy: |
|
326 |
pt[0] = other[0].center()[0] |
|
327 |
else: |
|
328 |
pt[1] = other[0].center()[1] |
|
328 |
if self._drawing_mode == QEngineeringConnectorItem.AXIS_MODE: |
|
329 |
if len(self.parentItem().connectors) == 2: |
|
330 |
other = [connector for connector in self.parent.connectors if connector is not self] |
|
331 |
if other: |
|
332 |
pt = [event.scenePos().x(), event.scenePos().y()] |
|
333 |
dx = abs(pt[0] - other[0].center()[0]) |
|
334 |
dy = abs(pt[1] - other[0].center()[1]) |
|
335 |
if dx < dy: |
|
336 |
pt[0] = other[0].center()[0] |
|
337 |
else: |
|
338 |
pt[1] = other[0].center()[1] |
|
329 | 339 |
|
330 | 340 |
self.setPos(pt) |
331 | 341 |
|
... | ... | |
346 | 356 |
self.connectedItem = self._savedConnectedItem |
347 | 357 |
self._savedPos = None |
348 | 358 |
self.update() |
359 |
elif event.key() == Qt.Key_A: |
|
360 |
self._drawing_mode = QEngineeringConnectorItem.AXIS_MODE |
|
361 |
elif event.key() == Qt.Key_F: |
|
362 |
self._drawing_mode = QEngineeringConnectorItem.FREE_MODE |
|
349 | 363 |
|
350 | 364 |
QGraphicsEllipseItem.keyPressEvent(self, event) |
351 | 365 |
|
DTI_PID/DTI_PID/Shapes/EngineeringPolylineItem.py | ||
---|---|---|
1 |
# coding: utf-8 |
|
2 |
""" |
|
3 |
This is Polyline item module |
|
4 |
""" |
|
5 |
|
|
1 | 6 |
import sys |
2 | 7 |
import os.path |
3 | 8 |
import copy |
... | ... | |
14 | 19 |
from EngineeringAbstractItem import QEngineeringAbstractItem |
15 | 20 |
|
16 | 21 |
class QEngineeringPolylineItem(QGraphicsPathItem, QEngineeringAbstractItem): |
22 |
""" |
|
23 |
This is EngineeringPolylineItem Class |
|
24 |
""" |
|
25 |
|
|
26 |
AXIS_MODE = 0 |
|
27 |
FREE_MODE = 1 |
|
28 |
|
|
17 | 29 |
onRemoved = pyqtSignal(QGraphicsItem) |
18 | 30 |
|
19 | 31 |
''' |
... | ... | |
38 | 50 |
self.setPen(QPen(Qt.blue, 4, Qt.SolidLine)) # set default pen |
39 | 51 |
|
40 | 52 |
self.transfer = Transfer() |
53 |
|
|
54 |
self._drawing_mode = QEngineeringPolylineItem.AXIS_MODE |
|
55 |
|
|
41 | 56 |
except Exception as ex: |
42 | 57 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
43 | 58 |
|
59 |
@property |
|
60 |
def drawing_mode(self): |
|
61 |
return self._drawing_mode |
|
62 |
|
|
63 |
@drawing_mode.setter |
|
64 |
def drawing_mode(self, value): |
|
65 |
self._drawing_mode = value |
|
66 |
|
|
44 | 67 |
''' |
45 | 68 |
@brief construct a polyline |
46 | 69 |
''' |
... | ... | |
141 | 164 |
pt = item.center() |
142 | 165 |
# up to here |
143 | 166 |
|
144 |
if len(self._vertices) > 0: |
|
167 |
if self.drawing_mode == QEngineeringPolylineItem.AXIS_MODE and len(self._vertices) > 0:
|
|
145 | 168 |
dx = abs(self._vertices[-1][0] - pt[0]) |
146 | 169 |
dy = abs(self._vertices[-1][1] - pt[1]) |
147 | 170 |
if dx < dy: |
내보내기 Unified diff