개정판 9ff6820d
issue #578: Line No를 Explode시킬 수 있다 / 속성창에 툴팁이 표시된다
Change-Id: Iba29ab3b5564ccaf55204fc869a443bb920b1651
DTI_PID/DTI_PID/App.py | ||
---|---|---|
122 | 122 |
app._mainWnd.show() |
123 | 123 |
sys.exit(app.exec_()) |
124 | 124 |
except Exception as ex: |
125 |
print('에러가 발생했습니다.\n', ex) |
|
125 |
print('에러가 발생했습니다.\n', ex) |
|
126 |
except: |
|
127 |
ex = sys.exc_info()[0] |
|
128 |
print('에러가 발생했습니다.\n', ex) |
DTI_PID/DTI_PID/AppDocData.py | ||
---|---|---|
1586 | 1586 |
cursor.execute(sql) |
1587 | 1587 |
rows = cursor.fetchall() |
1588 | 1588 |
for row in rows: |
1589 |
pipeSize = NominalPipeSize(row[0], row[1], float(row[2]) if row[2] is not None else None, float(row[3]) if row[3] is not None else None, row[4], row[5], row[6], row[7])
|
|
1589 |
pipeSize = NominalPipeSize(row[0], row[1], float(row[2]) if row[2] else None, float(row[3]) if row[3] else None, row[4], row[5], row[6], row[7])
|
|
1590 | 1590 |
pipeSize.sizeUnit = sizeUnit |
1591 | 1591 |
if forCheckLineNumber: |
1592 | 1592 |
if sizeUnit == 'Inch' and pipeSize.inchStr: |
DTI_PID/DTI_PID/ConfigurationDialog.py | ||
---|---|---|
563 | 563 |
kyouho 2018.07.04 edit cofiguration new delimiter (self.delimiter) |
564 | 564 |
''' |
565 | 565 |
def accept(self): |
566 |
from NominalPipeSize import NomialPipeSizeTable |
|
566 |
from NominalPipeSize import NominalPipeSizeTable
|
|
567 | 567 |
try: |
568 | 568 |
docData = AppDocData.instance() |
569 | 569 |
|
... | ... | |
652 | 652 |
|
653 | 653 |
docData.saveConfigs(configs) |
654 | 654 |
docData.lineTypeConfigs = None # clear line type configurations |
655 |
NomialPipeSizeTable.instance().pipe_sizes = None # clear nominal pipe size table |
|
655 |
NominalPipeSizeTable.instance().pipe_sizes = None # clear nominal pipe size table
|
|
656 | 656 |
except Exception as ex: |
657 | 657 |
from App import App |
658 | 658 |
from AppDocData import MessageType |
DTI_PID/DTI_PID/ItemPropertyTableWidget.py | ||
---|---|---|
207 | 207 |
elif type(item) is QEngineeringRunItem: |
208 | 208 |
self.initLineRunCell(item) |
209 | 209 |
|
210 |
""" show tooltip """ |
|
211 |
for index in range(self.rowCount()): |
|
212 |
item = self.item(index, 1) |
|
213 |
if item is not None: |
|
214 |
item.setToolTip(item.text()) |
|
215 |
|
|
210 | 216 |
''' |
211 | 217 |
@brief Initialize Title Cell |
212 | 218 |
@author Jeongwoos |
... | ... | |
422 | 428 |
row = row + 1 |
423 | 429 |
count = count + 1 |
424 | 430 |
# up to here |
431 |
|
|
425 | 432 |
for index in range(self.rowCount()): |
426 | 433 |
item = self.item(index, 1) |
427 | 434 |
if item is not None: |
428 | 435 |
item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsSelectable) |
436 |
item.setToolTip(item.text()) |
|
429 | 437 |
suppliedItem.setFlags(Qt.ItemIsEnabled|Qt.ItemIsSelectable|Qt.ItemIsEditable) |
430 | 438 |
else: |
431 | 439 |
self.setRowCount(0) |
DTI_PID/DTI_PID/ItemTreeWidget.py | ||
---|---|---|
174 | 174 |
|
175 | 175 |
def explode_line_no(self, lineNoTreeWidgetItem): |
176 | 176 |
""" explode line no """ |
177 |
pass |
|
177 |
|
|
178 |
try: |
|
179 |
line_no_item = lineNoTreeWidgetItem.data(0, self.TREE_DATA_ROLE) |
|
180 |
if line_no_item: |
|
181 |
connected_items = line_no_item.getConnectedItems() |
|
182 |
for item in connected_items: |
|
183 |
self.addTreeItem(self.SymbolsTreeItem, item) |
|
184 |
|
|
185 |
for i in reversed(range(lineNoTreeWidgetItem.childCount())): |
|
186 |
lineNoTreeWidgetItem.takeChild(i) |
|
187 |
|
|
188 |
line_no_item.explode() |
|
189 |
finally: |
|
190 |
pass |
|
178 | 191 |
|
179 | 192 |
''' |
180 | 193 |
@brief pick line type |
... | ... | |
363 | 376 |
data = item.data(0, self.TREE_DATA_ROLE) |
364 | 377 |
if data is not None and (data == child) and (parent is not item.parent()): |
365 | 378 |
parentData = parent.data(0, self.TREE_DATA_ROLE) |
366 |
if issubclass(type(parentData), QEngineeringLineNoTextItem): |
|
379 |
if parentData is not None and issubclass(type(parentData), QEngineeringLineNoTextItem):
|
|
367 | 380 |
for index in range(len(parentData.runs)): |
368 | 381 |
runGroup = parentData.runs[index] |
369 | 382 |
if data in runGroup.items: |
... | ... | |
378 | 391 |
break |
379 | 392 |
else: |
380 | 393 |
pass |
394 |
elif parent is not None: |
|
395 |
item.parent().removeChild(item) # remove item from original parent |
|
396 |
parent.addChild(item) |
|
381 | 397 |
break |
382 | 398 |
elif type(child) is QEngineeringLineNoTextItem: |
383 | 399 |
foundItems = self.findItems(child.text(), Qt.MatchExactly|Qt.MatchRecursive, 0) |
DTI_PID/DTI_PID/LineNoTracer.py | ||
---|---|---|
75 | 75 |
@author humkyung |
76 | 76 |
''' |
77 | 77 |
def findSecondaryLines(self, lines): |
78 |
from EngineeringAbstractItem import QEngineeringAbstractItem |
|
78 | 79 |
from EngineeringLineItem import QEngineeringLineItem |
79 | 80 |
from EngineeringRunItem import QEngineeringRunItem |
80 | 81 |
|
... | ... | |
86 | 87 |
for line in lines: |
87 | 88 |
if line.owner is not None: continue |
88 | 89 |
|
89 |
matches = [x for x in self._lines if x.owner is not None and x.is_connectable(line)]
|
|
90 |
matches = [x for x in self._lines if x.owner is not None and x.is_connected(line, QEngineeringAbstractItem.CONNECTED_AT_BODY)]
|
|
90 | 91 |
if matches: |
91 | 92 |
foundCount += 1 |
92 | 93 |
connectedItems = self.findConnectedObjects(line, toler=10) |
... | ... | |
106 | 107 |
notMatches.append(line) |
107 | 108 |
lines = notMatches |
108 | 109 |
except Exception as ex: |
109 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
|
|
110 |
from App import App
|
|
110 | 111 |
|
111 |
|
|
112 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
113 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
|
112 | 114 |
|
113 | 115 |
''' |
114 | 116 |
@brief trace line no |
... | ... | |
137 | 139 |
|
138 | 140 |
docData.tracerLineNos.clear() |
139 | 141 |
|
140 |
## 기존에 찾은 것 유지 |
|
141 |
#for lineNo in self._lineNos: |
|
142 |
# lineNo.conns.clear() |
|
143 |
|
|
144 | 142 |
docData.tracerLineNos = self._lineNos |
145 | 143 |
remainLineNos = [] |
146 | 144 |
for lineno in docData.tracerLineNos: |
DTI_PID/DTI_PID/Shapes/EngineeringAbstractItem.py | ||
---|---|---|
14 | 14 |
CONNECTED_AT_PT = 0 |
15 | 15 |
CONNECTED_AT_BODY = 1 |
16 | 16 |
|
17 |
HOVER_ZVALUE = 200 |
|
18 |
|
|
17 | 19 |
def __init__(self, parent=None): |
18 | 20 |
self._color = self.DEFAULT_COLOR # default color |
19 | 21 |
self._owner = None |
DTI_PID/DTI_PID/Shapes/EngineeringArrowItem.py | ||
---|---|---|
1 |
# coding: utf-8 |
|
2 |
""" This is engineering arrow item module """ |
|
3 |
|
|
4 |
import os.path |
|
5 |
import copy, sys |
|
6 |
try: |
|
7 |
from PyQt5.QtCore import * |
|
8 |
from PyQt5.QtGui import * |
|
9 |
from PyQt5.QtWidgets import * |
|
10 |
except ImportError: |
|
11 |
try: |
|
12 |
from PyQt4.QtCore import Qt, QRectF, pyqtSignal, QT_VERSION_STR |
|
13 |
from PyQt4.QtGui import QGraphicsView, QGraphicsScene, QImage, QPixmap, QPainterPath, QFileDialog |
|
14 |
except ImportError: |
|
15 |
raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.") |
|
16 |
|
|
17 |
from EngineeringAbstractItem import QEngineeringAbstractItem |
|
18 |
from EngineeringLineItem import QEngineeringLineItem |
|
19 |
|
|
20 |
""" |
|
21 |
A {ArrowItem} is the graphical representation of a {Symbol.Arrow}. |
|
22 |
""" |
|
23 |
class QEngineeringArrowItem(QGraphicsPolygonItem, QEngineeringAbstractItem): |
|
24 |
""" This is engineering arrow item class """ |
|
25 |
SMALL_SIZE = 10 |
|
26 |
BIG_SIZE = 16 |
|
27 |
HIGHLIGHT = '#BC4438' |
|
28 |
|
|
29 |
def __init__(self, polygon, parent=None): |
|
30 |
""" initialize arrow """ |
|
31 |
|
|
32 |
QGraphicsPolygonItem.__init__(self, polygon, parent) |
|
33 |
QEngineeringAbstractItem.__init__(self) |
|
34 |
|
|
35 |
self.setFlag(QGraphicsItem.ItemIsSelectable, False) |
|
36 |
self.setFlag(QGraphicsItem.ItemIsFocusable, False) |
|
37 |
self.setFlag(QGraphicsItem.ItemStacksBehindParent, True) |
DTI_PID/DTI_PID/Shapes/EngineeringConnectorItem.py | ||
---|---|---|
305 | 305 |
''' |
306 | 306 |
def mouseMoveEvent(self, event): |
307 | 307 |
import shapely |
308 |
from EngineeringArrowItem import QEngineeringArrowItem |
|
308 | 309 |
|
309 | 310 |
if self.parentItem() is not None and self._savedPos is not None: |
310 | 311 |
if event.buttons() == Qt.LeftButton: |
311 |
items = [item for item in self.scene().items(event.scenePos()) if item is not self and item is not self.parent and type(item) is not QGraphicsPixmapItem] |
|
312 |
items = [item for item in self.scene().items(event.scenePos()) if item is not self and item is not self.parent and \ |
|
313 |
type(item) is not QGraphicsPixmapItem and type(item) is not QEngineeringArrowItem] |
|
312 | 314 |
## highlight underitem |
313 | 315 |
if len(items) > 0: |
314 | 316 |
if not hasattr(self, '_underItem') or self._underItem is not items[0]: |
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py | ||
---|---|---|
21 | 21 |
import shapely |
22 | 22 |
|
23 | 23 |
class QEngineeringLineItem(QGraphicsLineItem, QEngineeringAbstractItem): |
24 |
""" |
|
25 |
This is engineering line item |
|
26 |
""" |
|
24 |
""" This is engineering line item """ |
|
27 | 25 |
|
28 | 26 |
ARROW_SIZE = 30 |
29 | 27 |
ZVALUE = 100 |
... | ... | |
79 | 77 |
connector.setZValue(self.zValue() + 1) |
80 | 78 |
self.connectors.append(connector) |
81 | 79 |
|
80 |
self.update_arrow() |
|
81 |
|
|
82 | 82 |
self.setToolTip('({},{})-({},{})'.format(vertices[0][0], vertices[0][1], vertices[1][0], vertices[1][1])) |
83 | 83 |
except Exception as ex: |
84 | 84 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
... | ... | |
597 | 597 |
line = self.line() |
598 | 598 |
self.setLine(QLineF(line.p2(), line.p1())) |
599 | 599 |
self.connectors[0], self.connectors[1] = self.connectors[1], self.connectors[0] |
600 |
self.update() |
|
600 | 601 |
|
601 | 602 |
''' |
602 | 603 |
@brief add flow arrow |
... | ... | |
953 | 954 |
self.lineType = 'Connect To Process' |
954 | 955 |
|
955 | 956 |
def hoverEnterEvent(self, event): |
956 |
""" |
|
957 |
hilight item and it's children |
|
958 |
""" |
|
957 |
""" hilight item and it's children """ |
|
959 | 958 |
self.hover = True |
959 |
self.setZValue(QEngineeringAbstractItem.HOVER_ZVALUE) |
|
960 | 960 |
self.update() |
961 | 961 |
|
962 |
for connector in self.connectors: |
|
963 |
connector.setZValue(self.zValue() + 1) |
|
964 |
|
|
962 | 965 |
def hoverLeaveEvent(self, event): |
963 |
""" |
|
964 |
restore original color |
|
965 |
""" |
|
966 |
""" restore original color """ |
|
966 | 967 |
self.hover = False |
968 |
self.setZValue(QEngineeringLineItem.ZVALUE) |
|
967 | 969 |
self.update() |
968 | 970 |
|
971 |
for connector in self.connectors: |
|
972 |
connector.setZValue(self.zValue() + 1) |
|
973 |
|
|
969 | 974 |
def hoverMoveEvent(self, event): |
970 | 975 |
pass |
971 | 976 |
|
... | ... | |
980 | 985 |
self.scene().removeItem(self) |
981 | 986 |
elif event.key() == Qt.Key_C: |
982 | 987 |
self.reverse() |
983 |
rect = self.sceneBoundingRect() |
|
984 |
rect.setRect(rect.left() - QEngineeringLineItem.ARROW_SIZE, rect.top() - QEngineeringLineItem.ARROW_SIZE, |
|
985 |
rect.width() + QEngineeringLineItem.ARROW_SIZE*2, rect.height() + QEngineeringLineItem.ARROW_SIZE*2) |
|
986 |
self.scene().invalidate(rect) |
|
988 |
self.update_arrow() |
|
987 | 989 |
|
988 | 990 |
''' |
989 | 991 |
@brief draw rect when item is selected |
... | ... | |
1011 | 1013 |
for child in self.childItems(): |
1012 | 1014 |
child.setBrush(self.pen().color()) |
1013 | 1015 |
|
1016 |
""" |
|
1014 | 1017 |
if self.lineType == 'Primary' or self.lineType == 'Secondary': |
1015 | 1018 |
## draw direction mark |
1016 | 1019 |
length = self.length() |
... | ... | |
1020 | 1023 |
|
1021 | 1024 |
_dir = [(ptEnd[0] - ptStart[0])/self.length(), (ptEnd[1] - ptStart[1])/self.length()] |
1022 | 1025 |
perpendicular = (-_dir[1], _dir[0]) |
1023 |
|
|
1024 |
polygon = QPolygonF() |
|
1025 |
polygon.append(QPointF(ptEnd[0] - _dir[0]*QEngineeringLineItem.ARROW_SIZE + perpendicular[0]*QEngineeringLineItem.ARROW_SIZE*0.25, |
|
1026 |
ptEnd[1] - _dir[1]*QEngineeringLineItem.ARROW_SIZE + perpendicular[1]*QEngineeringLineItem.ARROW_SIZE*0.25)) |
|
1027 |
polygon.append(QPointF(ptEnd[0] - _dir[0]*QEngineeringLineItem.ARROW_SIZE - perpendicular[0]*QEngineeringLineItem.ARROW_SIZE*0.25, |
|
1028 |
ptEnd[1] - _dir[1]*QEngineeringLineItem.ARROW_SIZE - perpendicular[1]*QEngineeringLineItem.ARROW_SIZE*0.25)) |
|
1029 |
polygon.append(QPointF(ptEnd[0], ptEnd[1])) |
|
1030 |
polygon.append(polygon[0]) |
|
1031 |
|
|
1032 |
_pen = self.pen() |
|
1033 |
_pen.setWidth(1) |
|
1034 |
painter.setPen(_pen) |
|
1035 |
painter.setBrush(QBrush(_pen.color())) |
|
1036 |
painter.drawConvexPolygon(polygon) |
|
1037 | 1026 |
## up to here |
1027 |
""" |
|
1038 | 1028 |
|
1039 | 1029 |
if self.isSelected(): |
1040 | 1030 |
self.drawFocusRect(painter) |
... | ... | |
1207 | 1197 |
self.setPen(_pen) |
1208 | 1198 |
self.update() |
1209 | 1199 |
|
1200 |
def update_arrow(self): |
|
1201 |
""" update flow arrow """ |
|
1202 |
from EngineeringArrowItem import QEngineeringArrowItem |
|
1203 |
|
|
1204 |
start = self.line().p1() |
|
1205 |
end = self.line().p2() |
|
1206 |
|
|
1207 |
_dir = [(end.x() - start.x())/self.length(), (end.y() - start.y())/self.length()] |
|
1208 |
perpendicular = (-_dir[1], _dir[0]) |
|
1209 |
polygon = QPolygonF() |
|
1210 |
polygon.append(QPointF(end.x() - _dir[0]*QEngineeringLineItem.ARROW_SIZE + perpendicular[0]*QEngineeringLineItem.ARROW_SIZE*0.25, |
|
1211 |
end.y() - _dir[1]*QEngineeringLineItem.ARROW_SIZE + perpendicular[1]*QEngineeringLineItem.ARROW_SIZE*0.25)) |
|
1212 |
polygon.append(QPointF(end.x() - _dir[0]*QEngineeringLineItem.ARROW_SIZE - perpendicular[0]*QEngineeringLineItem.ARROW_SIZE*0.25, |
|
1213 |
end.y() - _dir[1]*QEngineeringLineItem.ARROW_SIZE - perpendicular[1]*QEngineeringLineItem.ARROW_SIZE*0.25)) |
|
1214 |
polygon.append(end) |
|
1215 |
polygon.append(polygon[0]) # close polygon |
|
1216 |
|
|
1217 |
if not hasattr(self, '_arrow'): |
|
1218 |
self._arrow = QEngineeringArrowItem(polygon, self) |
|
1219 |
else: |
|
1220 |
self._arrow.setPolygon(polygon) |
|
1221 |
|
|
1222 |
self._arrow.update() |
|
1223 |
|
|
1210 | 1224 |
''' |
1211 | 1225 |
@brief reshape line |
1212 | 1226 |
@author humkyung |
1213 | 1227 |
@date 2018.07.27 |
1214 | 1228 |
''' |
1215 | 1229 |
def onConnectorPosChaned(self, connector): |
1230 |
from EngineeringArrowItem import QEngineeringArrowItem |
|
1231 |
|
|
1216 | 1232 |
start = self.connectors[0].center() |
1217 | 1233 |
end = self.connectors[1].center() |
1218 |
line = QLineF(QPointF(start[0], start[1]), QPointF(end[0], end[1])) |
|
1219 |
self.setLine(line)
|
|
1234 |
#line = QLineF(QPointF(start[0], start[1]), QPointF(end[0], end[1]))
|
|
1235 |
self.setLine(start[0], start[1], end[0], end[1])
|
|
1220 | 1236 |
self.update() |
1221 | 1237 |
|
1238 |
self.update_arrow() |
|
1239 |
|
|
1222 | 1240 |
''' |
1223 | 1241 |
@brief |
1224 | 1242 |
@author humkyung |
... | ... | |
1252 | 1270 |
|
1253 | 1271 |
QGraphicsLineItem.mouseReleaseEvent(self, event) |
1254 | 1272 |
|
1255 |
''' |
|
1256 |
@brief reshape line |
|
1257 |
@author humkyung |
|
1258 |
@date 2018.07.24 |
|
1259 |
''' |
|
1260 |
''' |
|
1261 |
def mouseMoveEvent(self, event): |
|
1262 |
import math |
|
1263 |
from EngineeringConnectorItem import QEngineeringConnectorItem |
|
1264 |
|
|
1265 |
if event.buttons() == Qt.LeftButton and self._selectedIndex != -1: |
|
1266 |
if self._selectedIndex == 0: |
|
1267 |
item = self.scene().itemAt(event.scenePos(), QTransform()) |
|
1268 |
if item is not None and type(item) is QEngineeringLineItem: |
|
1269 |
self.joinTo(item) |
|
1270 |
elif item is not None and type(item) is QEngineeringConnectorItem: |
|
1271 |
center = item.center() |
|
1272 |
line = QLineF(QPointF(center[0], center[1]), QPointF(self.endPoint()[0], self.endPoint()[1])) |
|
1273 |
self.setLine(line) |
|
1274 |
else: |
|
1275 |
pt = [event.scenePos().x(), event.scenePos().y()] |
|
1276 |
dx = abs(pt[0] - self.endPoint()[0]) |
|
1277 |
dy = abs(pt[1] - self.endPoint()[1]) |
|
1278 |
if dx < dy: |
|
1279 |
pt[0] = self.endPoint()[0] |
|
1280 |
else: |
|
1281 |
pt[1] = self.endPoint()[1] |
|
1282 |
|
|
1283 |
line = QLineF(QPointF(pt[0], pt[1]), QPointF(self.endPoint()[0], self.endPoint()[1])) |
|
1284 |
self.setLine(line) |
|
1285 |
elif self._selectedIndex == 1: |
|
1286 |
item = self.scene().itemAt(event.scenePos(), QTransform()) |
|
1287 |
if item is not None and type(item) is QEngineeringLineItem: |
|
1288 |
self.joinTo(item) |
|
1289 |
elif item is not None and type(item) is QEngineeringConnectorItem: |
|
1290 |
center = item.center() |
|
1291 |
line = QLineF(QPointF(self.startPoint()[0], self.startPoint()[1]), QPointF(center[0], center[1])) |
|
1292 |
self.setLine(line) |
|
1293 |
else: |
|
1294 |
pt = [event.scenePos().x(), event.scenePos().y()] |
|
1295 |
dx = abs(pt[0] - self.startPoint()[0]) |
|
1296 |
dy = abs(pt[1] - self.startPoint()[1]) |
|
1297 |
if dx < dy: |
|
1298 |
pt[0] = self.startPoint()[0] |
|
1299 |
else: |
|
1300 |
pt[1] = self.startPoint()[1] |
|
1301 |
|
|
1302 |
line = QLineF(QPointF(self.startPoint()[0], self.startPoint()[1]), QPointF(pt[0], pt[1])) |
|
1303 |
self.setLine(line) |
|
1304 |
|
|
1305 |
self.update() |
|
1306 |
else: |
|
1307 |
self._selectedIndex = -1 |
|
1308 |
|
|
1309 |
pos = event.scenePos() |
|
1310 |
ptStart = self.startPoint() |
|
1311 |
dx = ptStart[0] - pos.x() |
|
1312 |
dy = ptStart[1] - pos.y() |
|
1313 |
if math.sqrt(dx*dx + dy*dy) < 10: |
|
1314 |
self._selectedIndex = 0 |
|
1315 |
|
|
1316 |
ptEnd = self.endPoint() |
|
1317 |
dx = ptEnd[0] - pos.x() |
|
1318 |
dy = ptEnd[1] - pos.y() |
|
1319 |
if math.sqrt(dx*dx + dy*dy) < 10: |
|
1320 |
self._selectedIndex = 1 |
|
1321 |
|
|
1322 |
self.update() |
|
1323 |
|
|
1324 |
QGraphicsLineItem.mouseMoveEvent(self, event) |
|
1325 |
''' |
|
1326 |
|
|
1327 | 1273 |
''' |
1328 | 1274 |
@brief The class transfer pyqtSignal Event. Cause Subclass of QGraphicsRectItem can't use pyqtSignal |
1329 | 1275 |
@author Jeongwoo |
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py | ||
---|---|---|
34 | 34 |
self._runs = [] |
35 | 35 |
|
36 | 36 |
def setVisible(self, visible): |
37 |
""" |
|
38 |
override visible value |
|
39 |
""" |
|
37 |
""" override visible value """ |
|
40 | 38 |
super(QEngineeringTextItem, self).setVisible(visible) |
41 | 39 |
for run in self.runs: |
42 | 40 |
run.visible = visible |
... | ... | |
302 | 300 |
|
303 | 301 |
return visited |
304 | 302 |
|
303 |
def explode(self): |
|
304 |
""" explode line no """ |
|
305 |
try: |
|
306 |
for run in self.runs: |
|
307 |
run.explode() |
|
308 |
finally: |
|
309 |
self.runs.clear() |
|
310 |
|
|
305 | 311 |
''' |
306 | 312 |
@brief save Line Data |
307 | 313 |
@author kyouho |
DTI_PID/DTI_PID/Shapes/EngineeringRunItem.py | ||
---|---|---|
25 | 25 |
|
26 | 26 |
@property |
27 | 27 |
def visible(self): |
28 |
""" |
|
29 |
return visible |
|
30 |
""" |
|
28 |
""" return visible """ |
|
31 | 29 |
return self._visible |
32 | 30 |
|
33 | 31 |
@visible.setter |
... | ... | |
58 | 56 |
def items(self, value): |
59 | 57 |
self._items = value |
60 | 58 |
|
59 |
def explode(self): |
|
60 |
""" explode run """ |
|
61 |
try: |
|
62 |
for item in self.items: |
|
63 |
item.owner = None |
|
64 |
finally: |
|
65 |
self.items.clear() |
|
66 |
|
|
61 | 67 |
''' |
62 | 68 |
@brief get two points which's length is max |
63 | 69 |
@author humkyung |
내보내기 Unified diff