개정판 7fb00532
issue #1173: 내보내기
Change-Id: I5d6fb29ea36c919217cf2f1950d987252a693008
DTI_PID/DTI_PID/AppDocData.py | ||
---|---|---|
23 | 23 |
import symbol |
24 | 24 |
from NominalPipeSize import NominalPipeSize |
25 | 25 |
|
26 |
class Source: |
|
27 |
def __init__(self, source): |
|
28 |
if type(source) is np.ndarray: |
|
29 |
self.source = Image.fromarray(source) |
|
30 |
elif type(source) is PngImagePlugin.PngImageFile or type(source) is JpegImagePlugin.JpegImageFile: |
|
31 |
self.source = source |
|
32 |
elif type(source) is QImage: |
|
33 |
self.source = Image.fromqimage(source) |
|
34 |
elif type(source) is QPixmap: |
|
35 |
self.source = Image.fromqpixmap(source) |
|
36 |
|
|
37 |
''' |
|
38 |
@history 2018.05.18 Jeongwoo When Parameter [rect] is None, return whole image |
|
39 |
''' |
|
40 |
def getPyImageOnRect(self, rect = None): |
|
41 |
if rect is not None: |
|
42 |
return self.source.copy().crop((rect.left(), rect.top(), rect.right(), rect.bottom())) |
|
43 |
else: |
|
44 |
return self.source.copy() |
|
45 |
|
|
46 |
def getQImageOnRect(self, rect = None): |
|
47 |
image = ImageQt(self.getPyImageOnRect(rect)) |
|
48 |
return image.convertToFormat(QImage.Format_RGBA8888) |
|
49 |
|
|
50 | 26 |
class Config: |
51 | 27 |
def __init__(self, section, key, value): |
52 | 28 |
self.section = section |
... | ... | |
87 | 63 |
|
88 | 64 |
self._imgFilePath = None |
89 | 65 |
self.imgName = None |
90 |
self.imgWidth = 0 |
|
91 |
self.imgHeight = 0 |
|
92 | 66 |
self._OCRData = None |
93 | 67 |
self._imgSrc = None |
94 | 68 |
|
... | ... | |
138 | 112 |
def clear(self): |
139 | 113 |
self._imgFilePath = None |
140 | 114 |
self.imgName = None |
141 |
self.imgWidth = 0 |
|
142 |
self.imgHeight = 0 |
|
143 | 115 |
self._imgSrc = None |
144 | 116 |
|
145 | 117 |
self._areas.clear() |
... | ... | |
165 | 137 |
@date 2018.09.28 |
166 | 138 |
''' |
167 | 139 |
def getDrawingFileList(self): |
168 |
""" |
|
169 |
get drawing files which's extension is .png or jpg from drawing folder |
|
170 |
""" |
|
140 |
""" get drawing files which's extension is .png or jpg from drawing folder """ |
|
171 | 141 |
try: |
172 | 142 |
project = AppDocData.instance().getCurrentProject() |
173 | 143 |
path = project.getDrawingFilePath() |
... | ... | |
403 | 373 |
matches = [config for config in self.lineTypeConfigs if config[0] == lineType] |
404 | 374 |
return matches[0] if matches else (lineType, '#0000FF', 5, Qt.SolidLine, 50) |
405 | 375 |
|
406 |
def setCurrentPidSource(self, image): |
|
407 |
self.imgWidth, self.imgHeight = image.size |
|
408 |
|
|
409 |
self.currentPidSource = Source(image) |
|
410 |
|
|
411 | 376 |
def getCurrentPidSource(self): |
412 |
return self.currentPidSource |
|
377 |
return self.activeDrawing.currentPidSource
|
|
413 | 378 |
|
414 | 379 |
''' |
415 | 380 |
@brief Check if exist file name or not |
DTI_PID/DTI_PID/Commands/SaveWorkCommand.py | ||
---|---|---|
65 | 65 |
import XmlGenerator as xg |
66 | 66 |
from AppDocData import AppDocData |
67 | 67 |
|
68 |
docData = AppDocData.instance() |
|
69 |
result = xg.writeXmlOnScene(docData.imgName, docData.imgWidth, docData.imgHeight) |
|
68 |
app_doc_data = AppDocData.instance() |
|
69 |
path = os.path.join(app_doc_data.getCurrentProject().getTempPath(), app_doc_data.imgName + '.xml') |
|
70 |
result = xg.writeXmlOnScene(path, app_doc_data.activeDrawing.width, app_doc_data.activeDrawing.height, app_doc_data.allItems, app_doc_data.tracerLineNos) |
|
70 | 71 |
|
71 | 72 |
resultStr = '[저장 결과]' |
72 | 73 |
|
DTI_PID/DTI_PID/DataExportDialog.py | ||
---|---|---|
1 |
# coding: utf-8 |
|
2 |
""" This is Data Transfer dialog module """ |
|
3 |
|
|
4 |
import os |
|
5 |
import sys |
|
6 |
from PyQt5.QtCore import * |
|
7 |
from PyQt5.QtGui import * |
|
8 |
from PyQt5.QtWidgets import * |
|
9 |
|
|
10 |
from AppDocData import AppDocData, MessageType |
|
11 |
|
|
12 |
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '\\UI') |
|
13 |
import DataExport_UI |
|
14 |
|
|
15 |
class QDataExportDialog(QDialog): |
|
16 |
""" This Data Trasnfer dialog class """ |
|
17 |
|
|
18 |
def __init__(self, parent): |
|
19 |
QDialog.__init__(self, parent) |
|
20 |
|
|
21 |
self.ui = DataExport_UI.Ui_DataExportDialog() |
|
22 |
self.ui.setupUi(self) |
|
23 |
self.ui.pushButtonFolder.clicked.connect(self.on_select_folder) |
|
24 |
|
|
25 |
self.ui.treeWidgetDrawingList.setHeaderHidden(False) |
|
26 |
self.ui.treeWidgetDrawingList.header().setStretchLastSection(False) |
|
27 |
self.ui.treeWidgetDrawingList.setHeaderLabels([self.tr('Name'), self.tr('DateTime')]) |
|
28 |
self.ui.treeWidgetDrawingList.header().setSectionResizeMode(0, QHeaderView.ResizeToContents) |
|
29 |
self.ui.treeWidgetDrawingList.header().setSectionResizeMode(1, QHeaderView.ResizeToContents) |
|
30 |
self.load_data() |
|
31 |
|
|
32 |
def load_data(self): |
|
33 |
""" load mssql server information and drawing list """ |
|
34 |
|
|
35 |
configs = AppDocData.instance().getConfigs('Data Export', 'Folder') |
|
36 |
if configs: |
|
37 |
self.ui.lineEditFolder.setText(configs[0].value) |
|
38 |
|
|
39 |
self.load_drawing_list() |
|
40 |
|
|
41 |
def load_drawing_list(self): |
|
42 |
""" load drawing list """ |
|
43 |
|
|
44 |
try: |
|
45 |
app_doc_data = AppDocData.instance() |
|
46 |
drawings = app_doc_data.getDrawings() |
|
47 |
|
|
48 |
self.ui.treeWidgetDrawingList.clear() |
|
49 |
self.ui.treeWidgetDrawingList.root = QTreeWidgetItem(self.ui.treeWidgetDrawingList, [self.tr('P&ID Drawings'), '']) |
|
50 |
self.ui.treeWidgetDrawingList.root.setFlags(self.ui.treeWidgetDrawingList.root.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) |
|
51 |
self.ui.treeWidgetDrawingList.root.setCheckState(0, Qt.Unchecked) |
|
52 |
for drawing in drawings: |
|
53 |
item = QTreeWidgetItem(self.ui.treeWidgetDrawingList.root, [drawing.name, drawing.datetime]) |
|
54 |
item.setIcon(0, QIcon(':newPrefix/image.png')) |
|
55 |
item.setFlags(item.flags() | Qt.ItemIsUserCheckable) |
|
56 |
item.setCheckState(0, Qt.Unchecked) |
|
57 |
item.setData(0, Qt.UserRole, drawing) |
|
58 |
|
|
59 |
self.ui.treeWidgetDrawingList.root.setText(0, self.tr('P&ID Drawings')+'({})'.format(self.ui.treeWidgetDrawingList.root.childCount())) |
|
60 |
self.ui.treeWidgetDrawingList.expandItem(self.ui.treeWidgetDrawingList.root) |
|
61 |
self.ui.treeWidgetDrawingList.setSortingEnabled(True) |
|
62 |
self.ui.treeWidgetDrawingList.root.sortChildren(0, Qt.AscendingOrder) |
|
63 |
self.ui.treeWidgetDrawingList.resizeColumnToContents(0) |
|
64 |
except Exception as ex: |
|
65 |
from App import App |
|
66 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
67 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
|
68 |
|
|
69 |
def on_select_folder(self): |
|
70 |
""" select xml output folder """ |
|
71 |
|
|
72 |
folder = QFileDialog.getExistingDirectory(self, self.tr('Select Directory')) |
|
73 |
self.ui.lineEditFolder.setText(folder if folder else '') |
|
74 |
|
|
75 |
def accept(self): |
|
76 |
""" export selected drawing to xml file """ |
|
77 |
from AppDocData import Config |
|
78 |
from AppDatabase import AppDatabase |
|
79 |
|
|
80 |
try: |
|
81 |
app_doc_data = AppDocData.instance() |
|
82 |
|
|
83 |
configs = [] |
|
84 |
folder = self.ui.lineEditFolder.text() |
|
85 |
configs.append(Config('Data Export', 'Folder', folder)) |
|
86 |
app_doc_data.saveConfigs(configs) |
|
87 |
|
|
88 |
checked = [self.ui.treeWidgetDrawingList.root.child(i) for i in range(self.ui.treeWidgetDrawingList.root.childCount()) \ |
|
89 |
if self.ui.treeWidgetDrawingList.root.child(i).checkState(0) == Qt.Checked] |
|
90 |
self.ui.progressBarDataExport.setMaximum(len(checked)) |
|
91 |
|
|
92 |
for item in checked: |
|
93 |
drawing = item.data(0, Qt.UserRole) |
|
94 |
if drawing: drawing.export(os.path.join(folder, os.path.splitext(drawing.name)[0] + '.xml')) |
|
95 |
self.ui.progressBarDataExport.setValue(self.ui.progressBarDataExport.value() + 1) |
|
96 |
QApplication.processEvents() |
|
97 |
|
|
98 |
QDialog.accept(self) |
|
99 |
except Exception as ex: |
|
100 |
from App import App |
|
101 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
102 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
DTI_PID/DTI_PID/Drawing.py | ||
---|---|---|
4 | 4 |
import os |
5 | 5 |
import sys |
6 | 6 |
import uuid |
7 |
from PIL import PngImagePlugin, JpegImagePlugin |
|
8 |
from PIL import Image |
|
9 |
from PIL.ImageQt import ImageQt |
|
10 |
import numpy as np |
|
7 | 11 |
from AppDocData import AppDocData |
8 | 12 |
|
13 |
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '\\Shapes') |
|
14 |
from SymbolSvgItem import SymbolSvgItem |
|
15 |
from EngineeringTextItem import QEngineeringTextItem |
|
16 |
from EngineeringLineItem import QEngineeringLineItem |
|
17 |
from EngineeringLineNoTextItem import QEngineeringLineNoTextItem |
|
18 |
from EngineeringRunItem import QEngineeringRunItem |
|
19 |
from EngineeringVendorItem import QEngineeringVendorItem |
|
20 |
from EngineeringUnknownItem import QEngineeringUnknownItem |
|
21 |
from QEngineeringTrimLineNoTextItem import QEngineeringTrimLineNoTextItem |
|
22 |
|
|
23 |
class Source: |
|
24 |
""" This is Source class """ |
|
25 |
def __init__(self, source): |
|
26 |
if type(source) is np.ndarray: |
|
27 |
self.source = Image.fromarray(source) |
|
28 |
elif type(source) is PngImagePlugin.PngImageFile or type(source) is JpegImagePlugin.JpegImageFile: |
|
29 |
self.source = source |
|
30 |
elif type(source) is QImage: |
|
31 |
self.source = Image.fromqimage(source) |
|
32 |
elif type(source) is QPixmap: |
|
33 |
self.source = Image.fromqpixmap(source) |
|
34 |
|
|
35 |
''' |
|
36 |
@history 2018.05.18 Jeongwoo When Parameter [rect] is None, return whole image |
|
37 |
''' |
|
38 |
def getPyImageOnRect(self, rect = None): |
|
39 |
if rect is not None: |
|
40 |
return self.source.copy().crop((rect.left(), rect.top(), rect.right(), rect.bottom())) |
|
41 |
else: |
|
42 |
return self.source.copy() |
|
43 |
|
|
44 |
def getQImageOnRect(self, rect = None): |
|
45 |
image = ImageQt(self.getPyImageOnRect(rect)) |
|
46 |
return image.convertToFormat(QImage.Format_RGBA8888) |
|
47 |
|
|
9 | 48 |
class Drawing: |
10 | 49 |
''' |
11 | 50 |
@brief construction |
... | ... | |
26 | 65 |
self._datetime = drawing[0].datetime if drawing else None |
27 | 66 |
else: |
28 | 67 |
self.UID = uid |
68 |
|
|
69 |
self.width = 0 |
|
70 |
self.height = 0 |
|
29 | 71 |
self._attrs = [['Drawing No', ''], ['Rev No', ''], ['Unit', '']] # attributes |
30 | 72 |
|
31 | 73 |
@property |
... | ... | |
56 | 98 |
def attrs(self, value): |
57 | 99 |
self._attrs = value |
58 | 100 |
|
101 |
def set_pid_source(self, image): |
|
102 |
""" set image source for drawing """ |
|
103 |
self.width, self.height = image.size |
|
104 |
self.currentPidSource = Source(image) |
|
105 |
|
|
59 | 106 |
''' |
60 | 107 |
@brief set attribute |
61 | 108 |
@author humkyung |
... | ... | |
70 | 117 |
|
71 | 118 |
print('attribute({},{})'.format(name, value)) |
72 | 119 |
|
120 |
def from_database(self): |
|
121 |
""" load all components of drawing """ |
|
122 |
|
|
123 |
items = [] |
|
124 |
tracer_line_nos = [] |
|
125 |
app_doc_data = AppDocData.instance() |
|
126 |
try: |
|
127 |
components = app_doc_data.get_components(self.UID) |
|
128 |
|
|
129 |
""" parsing all symbols """ |
|
130 |
for symbol in [component for component in components if component['SymbolType_UID'] != -1]: |
|
131 |
item = SymbolSvgItem.from_database(symbol) |
|
132 |
if item: items.append(item) |
|
133 |
|
|
134 |
# parse texts |
|
135 |
for text in [component for component in components if component['Name'] == 'Text' and component['SymbolType_UID'] == -1]: |
|
136 |
item = QEngineeringTextItem.from_database(text) |
|
137 |
if item: |
|
138 |
item.uid = text['UID'] |
|
139 |
item.attribute = text['Value'] |
|
140 |
items.append(item) |
|
141 |
|
|
142 |
# note |
|
143 |
for note in [component for component in components if component['Name'] == 'Note' and component['SymbolType_UID'] == -1]: |
|
144 |
item = QEngineeringTextItem.from_database(note) |
|
145 |
if item is not None: |
|
146 |
item.uid = note['UID'] |
|
147 |
items.append(item) |
|
148 |
|
|
149 |
for line in [component for component in components if component['Name'] == 'Line' and component['SymbolType_UID'] == -1]: |
|
150 |
item = QEngineeringLineItem.from_database(line) |
|
151 |
if item: items.append(item) |
|
152 |
|
|
153 |
for unknown in [component for component in components if component['Name'] == 'Unknown' and component['SymbolType_UID'] == -1]: |
|
154 |
item = QEngineeringUnknownItem.from_database(unknown) |
|
155 |
if item: items.append(item) |
|
156 |
|
|
157 |
for component in [component for component in components if component['Name'] == 'Line NO' and component['SymbolType_UID'] == -1]: |
|
158 |
line_no = QEngineeringLineNoTextItem.from_database(component) |
|
159 |
if type(line_no) is QEngineeringLineNoTextItem: |
|
160 |
runs = app_doc_data.get_pipe_runs(str(line_no.uid)) |
|
161 |
if not runs: continue |
|
162 |
for run in runs: |
|
163 |
line_run = QEngineeringRunItem() |
|
164 |
run_items = app_doc_data.get_pipe_run_items(run['UID']) |
|
165 |
for record in run_items: |
|
166 |
uid = record['Components_UID'] |
|
167 |
matches = [item for item in items if str(item) == str(uid)] |
|
168 |
if matches: |
|
169 |
matches[0]._owner = line_no |
|
170 |
line_run.items.append(matches[0]) |
|
171 |
line_run.owner = line_no |
|
172 |
line_no.runs.append(line_run) |
|
173 |
|
|
174 |
for component in [component for component in components if component['Name'] == 'Trim Line NO' and component['SymbolType_UID'] == -1]: |
|
175 |
tracer_line_no = QEngineeringTrimLineNoTextItem() |
|
176 |
tracer_line_no.uid = uuid.UUID(component['UID'], version=4) |
|
177 |
|
|
178 |
runs = app_doc_data.get_pipe_runs(str(tracer_line_no.uid)) |
|
179 |
if not runs: continue |
|
180 |
for run in runs: |
|
181 |
line_run = QEngineeringRunItem() |
|
182 |
run_items = app_doc_data.get_pipe_run_items(run['UID']) |
|
183 |
for record in run_items: |
|
184 |
uid = record['Components_UID'] |
|
185 |
matches = [item for item in items if str(item) == str(uid)] |
|
186 |
if matches: |
|
187 |
matches[0].owner = tracer_line_no |
|
188 |
line_run.items.append(matches[0]) |
|
189 |
tracer_line_no.runs.append(line_run) |
|
190 |
|
|
191 |
tracer_line_nos.append(tracer_line_no) |
|
192 |
|
|
193 |
for component in [component for component in components if component['Name'] == 'VendorPackage' and component['SymbolType_UID'] == -1]: |
|
194 |
item = QEngineeringVendorItem.from_database(component) |
|
195 |
if item: items.append(item) |
|
196 |
except Exception as ex: |
|
197 |
from App import App |
|
198 |
from AppDocData import MessageType |
|
199 |
|
|
200 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
201 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
|
202 |
finally: |
|
203 |
return items,tracer_line_nos |
|
204 |
|
|
205 |
def export(self, path): |
|
206 |
""" save items of drawing to given xml file """ |
|
207 |
import XmlGenerator as xg |
|
208 |
|
|
209 |
items,tracer_line_nos = self.from_database() |
|
210 |
xg.writeXmlOnScene(path, self.width, self.height, items, tracer_line_nos) |
|
211 |
|
|
73 | 212 |
def transfer(self, database): |
74 | 213 |
""" data transfer to given database """ |
75 | 214 |
from AppDocData import AppDocData, MessageType |
DTI_PID/DTI_PID/ID2.pro | ||
---|---|---|
1 | 1 |
SOURCES += MainWindow_UI.py MainWindow.py License_UI.py License.py Project_UI.py ProjectDialog.py Recognition_UI.py SymbolPropertyTableWidget.py SymbolEditor_UI.py TextItemEdit_UI.py TrainingEditor_UI.py TrainingImageList_UI.py SpecBreak_UI.py ItemDataExport_UI.py OcrResultDialog_UI.py SymbolAttrEditor_UI.py SymbolEditor_UI.py TrainingImageListDialog.py Configuration_UI.py Configuration_Area_UI.py ItemDataFormat_UI.py ItemDataExportDialog.py HMB_UI.py RecognitionDialog.py LineNoTracer.py ConnectAttr_UI.py ItemTreeWidget.py .\UI\DataTransfer_UI.py DataTransferDialog.py |
2 |
SOURCES += .\UI\DataExport_UI.py DataExportDialog.py |
|
2 | 3 |
TRANSLATIONS = translate/ko_kr.ts translate/ja_jp.ts |
DTI_PID/DTI_PID/MainWindow.py | ||
---|---|---|
207 | 207 |
self.actionText_Data_List.triggered.connect(self.showTextDataList) |
208 | 208 |
self.actionSpecialItemTypes.triggered.connect(self.on_show_special_item_types) ### show special item types dialog |
209 | 209 |
self.actionDataTransfer.triggered.connect(self.on_show_data_transfer) ### show data transfer dialog |
210 |
self.actionDataExport.triggered.connect(self.on_show_data_export) |
|
210 | 211 |
self.actionOPCRelation.triggered.connect(self.on_show_opc_relation) ### show OPC Relation dialog |
211 | 212 |
self.actionCodeTable.triggered.connect(self.onShowCodeTable) |
212 | 213 |
self.actionImage_Drawing.triggered.connect(self.onViewImageDrawing) |
... | ... | |
225 | 226 |
self.actionpdf_to_image.triggered.connect(self.onConvertPDFToImage) |
226 | 227 |
self.actionImport_Text_From_CAD.triggered.connect(self.onImportTextFromCAD) |
227 | 228 |
self.actionHelp.triggered.connect(self.on_help) |
228 |
#self.graphicsView.scene.changed.connect(self.onSceneChanged) |
|
229 | 229 |
self.graphicsView.scene.contents_changed.connect(self.onSceneChanged) |
230 | 230 |
self.graphicsView.scene.selectionChanged.connect(self.onSelectionChanged) |
231 | 231 |
self.actionInitialize.triggered.connect(self.onInitializeScene) |
... | ... | |
1025 | 1025 |
dlg = QDataTransferDialog(self) |
1026 | 1026 |
dlg.exec_() |
1027 | 1027 |
|
1028 |
def on_show_data_export(self): |
|
1029 |
""" show data export dialog """ |
|
1030 |
from DataExportDialog import QDataExportDialog |
|
1031 |
|
|
1032 |
dlg = QDataExportDialog(self) |
|
1033 |
dlg.exec_() |
|
1034 |
|
|
1028 | 1035 |
def on_show_opc_relation(self): |
1029 | 1036 |
""" show opc relation dialog """ |
1030 | 1037 |
from OPCRelationDialog import QOPCRelationDialog |
... | ... | |
1141 | 1148 |
|
1142 | 1149 |
appDocData.setImgFilePath(self.path) |
1143 | 1150 |
appDocData.activeDrawing = Drawing(None, appDocData.imgName, None) |
1144 |
appDocData.setCurrentPidSource(Image.open(self.path))
|
|
1151 |
appDocData.activeDrawing.set_pid_source(Image.open(self.path))
|
|
1145 | 1152 |
self.itemTreeWidget.setCurrentPID(appDocData.activeDrawing.name) |
1146 | 1153 |
|
1147 | 1154 |
drawingList = self.treeWidgetDrawingList.topLevelItem(0) |
... | ... | |
1165 | 1172 |
self.progress.show() |
1166 | 1173 |
## Load data on xml |
1167 | 1174 |
path = os.path.join(appDocData.getCurrentProject().getTempPath(), appDocData.imgName + '.xml') |
1168 |
if False:#os.path.isfile(path):
|
|
1175 |
if os.path.isfile(path): |
|
1169 | 1176 |
self.loadRecognitionResultFromXml(path) |
1170 | 1177 |
else: |
1171 | 1178 |
self.load_drawing(appDocData.activeDrawing) |
... | ... | |
2370 | 2377 |
|
2371 | 2378 |
def load_drawing(self, drawing): |
2372 | 2379 |
""" load drawing """ |
2373 |
from xml.etree.ElementTree import Element, SubElement, dump, ElementTree, parse |
|
2374 | 2380 |
from EngineeringRunItem import QEngineeringRunItem |
2375 | 2381 |
from QEngineeringTrimLineNoTextItem import QEngineeringTrimLineNoTextItem |
2376 | 2382 |
|
... | ... | |
2834 | 2840 |
appDocData.texts = [item for item in self.graphicsView.scene.items() if issubclass(type(item), QEngineeringTextItem) and type(item) is not QEngineeringLineNoTextItem] |
2835 | 2841 |
## up to here |
2836 | 2842 |
|
2837 |
appDocData.imgOutput = np.ones((appDocData.imgHeight, appDocData.imgWidth), np.uint8)*255
|
|
2838 |
xg.writeOutputXml(appDocData.imgName, appDocData.imgWidth, appDocData.imgHeight) # TODO: check
|
|
2843 |
appDocData.imgOutput = np.ones((appDocData.activeDrawing.height, appDocData.activeDrawing.width), np.uint8)*255
|
|
2844 |
xg.writeOutputXml(appDocData.imgName, appDocData.activeDrawing.width, appDocData.activeDrawing.height) # TODO: check
|
|
2839 | 2845 |
project = appDocData.getCurrentProject() |
2840 | 2846 |
cv2.imwrite(os.path.join(project.getTempPath() , 'OUTPUT.png') , appDocData.imgOutput) |
2841 | 2847 |
except Exception as ex: |
DTI_PID/DTI_PID/MainWindow_UI.py | ||
---|---|---|
13 | 13 |
class Ui_MainWindow(object): |
14 | 14 |
def setupUi(self, MainWindow): |
15 | 15 |
MainWindow.setObjectName("MainWindow") |
16 |
MainWindow.resize(1089, 888)
|
|
16 |
MainWindow.resize(1089, 903)
|
|
17 | 17 |
MainWindow.setBaseSize(QtCore.QSize(0, 300)) |
18 | 18 |
font = QtGui.QFont() |
19 | 19 |
font.setFamily("맑은 고딕") |
... | ... | |
491 | 491 |
self.actionOPCRelation.setObjectName("actionOPCRelation") |
492 | 492 |
self.actionHelp = QtWidgets.QAction(MainWindow) |
493 | 493 |
self.actionHelp.setObjectName("actionHelp") |
494 |
self.actionDataExport = QtWidgets.QAction(MainWindow) |
|
495 |
self.actionDataExport.setObjectName("actionDataExport") |
|
494 | 496 |
self.menu.addAction(self.actionOpen) |
495 | 497 |
self.menu.addAction(self.actionArea) |
496 | 498 |
self.menu.addAction(self.actionConfiguration) |
... | ... | |
521 | 523 |
self.menu_4.addAction(self.actionImport_Text_From_CAD) |
522 | 524 |
self.menu_4.addSeparator() |
523 | 525 |
self.menu_4.addAction(self.actionDataTransfer) |
526 |
self.menu_4.addAction(self.actionDataExport) |
|
524 | 527 |
self.menu_5.addAction(self.actionFindReplaceText) |
525 | 528 |
self.menu_5.addAction(self.actionText_Data_List) |
526 | 529 |
self.menuHelp.addAction(self.actionHelp) |
... | ... | |
648 | 651 |
self.actionHelp.setText(_translate("MainWindow", "Help")) |
649 | 652 |
self.actionHelp.setToolTip(_translate("MainWindow", "Help")) |
650 | 653 |
self.actionHelp.setShortcut(_translate("MainWindow", "F1")) |
654 |
self.actionDataExport.setText(_translate("MainWindow", "DataExport")) |
|
655 |
self.actionDataExport.setToolTip(_translate("MainWindow", "Data Export")) |
|
656 |
self.actionDataExport.setShortcut(_translate("MainWindow", "Ctrl+T, Ctrl+E")) |
|
651 | 657 |
import MainWindow_rc |
DTI_PID/DTI_PID/RecognitionDialog.py | ||
---|---|---|
427 | 427 |
otherTextInfoList = textDetector.otherTextInfoList.copy() if textDetector.otherTextInfoList is not None else None |
428 | 428 |
titleBlockTextInfoList = textDetector.titleBlockTextInfoList.copy() if textDetector.titleBlockTextInfoList is not None else None |
429 | 429 |
|
430 |
appDocData.imgWidth, appDocData.imgHeight = appDocData.imgSrc.shape[::-1]
|
|
430 |
appDocData.activeDrawing.width, appDocData.activeDrawing.height = appDocData.imgSrc.shape[::-1]
|
|
431 | 431 |
Worker.drawFoundSymbolsOnCanvas(mainRes, textInfoList, listWidget) |
432 | 432 |
|
433 | 433 |
# remove text from image |
... | ... | |
1776 | 1776 |
''' |
1777 | 1777 |
@brief set buttonbox's enabled flag |
1778 | 1778 |
@history 2018.05.25 Jeongwoo Moved from MainWindow |
1779 |
2018.05.30 Jeongwoo Remove self.xmlPath variable and Add writeXmlOnScene |
|
1780 | 1779 |
2018.06.14 Jeongwoo Change sentence order |
1781 | 1780 |
2018.11.26 euisung add drawing part |
1782 | 1781 |
2018.11.26 euising move save and unknown part into executerecognition |
DTI_PID/DTI_PID/Shapes/EngineeringAbstractItem.py | ||
---|---|---|
159 | 159 |
for key in self._associations.keys(): |
160 | 160 |
index = 0 |
161 | 161 |
for assoc in list(set(self._associations[key])): |
162 |
# find owner with uid |
|
163 |
if assoc and type(assoc) is uuid.UUID: |
|
162 |
# find owner with uid if self.scene() is valid
|
|
163 |
if self.scene() and assoc and type(assoc) is uuid.UUID:
|
|
164 | 164 |
matches = [x for x in self.scene().items() if hasattr(x, 'uid') and str(x.uid) == str(assoc)] |
165 | 165 |
if matches: |
166 | 166 |
res.append(matches[0]) |
DTI_PID/DTI_PID/Shapes/EngineeringTextItem.py | ||
---|---|---|
68 | 68 |
import uuid |
69 | 69 |
|
70 | 70 |
# find owner with uid |
71 |
if self._owner is not None and type(self._owner) is uuid.UUID: |
|
71 |
if self.scene() and self._owner is not None and type(self._owner) is uuid.UUID:
|
|
72 | 72 |
matches = [x for x in self.scene().items() if hasattr(x, 'uid') and str(x.uid) == str(self._owner)] |
73 | 73 |
if matches: self._owner = matches[0] |
74 | 74 |
return matches[0] if matches else None |
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py | ||
---|---|---|
162 | 162 |
|
163 | 163 |
return None |
164 | 164 |
|
165 |
''' |
|
166 |
def attrib(self, name): |
|
167 |
""" return the value of given attribute with name """ |
|
168 |
matches = [(attr,value) for attr,value in self.getAttributes().items() if attr.Attribute == name] |
|
169 |
if matches: return matches[0][1] |
|
170 |
|
|
171 |
return None |
|
172 |
|
|
173 |
def set_attrib(self, attrib, value): |
|
174 |
""" set attribute with given value """ |
|
175 |
matches = [attr for attr,_ in self.attrs.items() if attr.UID == attrib.UID] |
|
176 |
if len(matches) == 1: self.attrs[matches[0]] = value |
|
177 |
''' |
|
178 |
|
|
179 | 165 |
@property |
180 | 166 |
def Size(self): |
181 | 167 |
""" return valve's size """ |
... | ... | |
1130 | 1116 |
node.append(nameNode) |
1131 | 1117 |
|
1132 | 1118 |
attributeValueNode = Element('ASSOCIATIONS') |
1133 |
for assoc in self.associations(): |
|
1134 |
assoc_node = Element('ASSOCIATION') |
|
1135 |
assoc_node.attrib['TYPE'] = QEngineeringAbstractItem.assoc_type(assoc) |
|
1136 |
assoc_node.text = str(assoc.uid) |
|
1137 |
attributeValueNode.append(assoc_node) |
|
1119 |
for key, value in self._associations.items(): |
|
1120 |
for assoc in value: |
|
1121 |
assoc_node = Element('ASSOCIATION') |
|
1122 |
assoc_node.attrib['TYPE'] = str(key) |
|
1123 |
assoc_node.text = str(assoc) |
|
1124 |
attributeValueNode.append(assoc_node) |
|
1138 | 1125 |
node.append(attributeValueNode) |
1139 | 1126 |
|
1140 | 1127 |
typeNode = Element('TYPE') |
DTI_PID/DTI_PID/SymbolAttr.py | ||
---|---|---|
144 | 144 |
attr.AttributeType = record['AttributeType'] |
145 | 145 |
attr.AttrAt = record['AttrAt'] |
146 | 146 |
attr.Expression = record['Expression'] |
147 |
attr.Length = record['Length'] |
|
148 |
attr.IsProp = int(record['Property']) |
|
147 |
attr.Length = record['Length'] if 'Length' in record else 0
|
|
148 |
attr.IsProp = int(record['Property']) if record['Property'] else 0
|
|
149 | 149 |
|
150 | 150 |
return attr |
151 | 151 |
|
DTI_PID/DTI_PID/TextDataListDialog.py | ||
---|---|---|
2 | 2 |
from PyQt5.QtCore import * |
3 | 3 |
from PyQt5.QtGui import * |
4 | 4 |
from PyQt5.QtWidgets import * |
5 |
from AppDocData import AppDocData, Source
|
|
5 |
from AppDocData import AppDocData |
|
6 | 6 |
import TextDataList_UI |
7 | 7 |
from EngineeringTextItem import QEngineeringTextItem |
8 | 8 |
|
DTI_PID/DTI_PID/TrainingEditorDialog.py | ||
---|---|---|
4 | 4 |
from PyQt5.QtCore import * |
5 | 5 |
from PyQt5.QtGui import * |
6 | 6 |
from PyQt5.QtWidgets import * |
7 |
from AppDocData import AppDocData, Source
|
|
7 |
from AppDocData import AppDocData |
|
8 | 8 |
import TrainingEditor_UI |
9 | 9 |
import QtImageViewer |
10 | 10 |
from GraphicsBoundingBoxItem import QGraphicsBoundingBoxItem |
DTI_PID/DTI_PID/TrainingImageListDialog.py | ||
---|---|---|
10 | 10 |
from PyQt5.QtCore import * |
11 | 11 |
from PyQt5.QtGui import * |
12 | 12 |
from PyQt5.QtWidgets import * |
13 |
from AppDocData import AppDocData, Source
|
|
13 |
from AppDocData import AppDocData |
|
14 | 14 |
import pytesseract |
15 | 15 |
import TrainingImageList_UI |
16 | 16 |
from TrainingEditorDialog import QTrainingEditorDialog |
DTI_PID/DTI_PID/UI/DataExport.ui | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<ui version="4.0"> |
|
3 |
<class>DataExportDialog</class> |
|
4 |
<widget class="QDialog" name="DataExportDialog"> |
|
5 |
<property name="geometry"> |
|
6 |
<rect> |
|
7 |
<x>0</x> |
|
8 |
<y>0</y> |
|
9 |
<width>683</width> |
|
10 |
<height>385</height> |
|
11 |
</rect> |
|
12 |
</property> |
|
13 |
<property name="windowTitle"> |
|
14 |
<string>Data Export</string> |
|
15 |
</property> |
|
16 |
<layout class="QGridLayout" name="gridLayout"> |
|
17 |
<item row="2" column="0"> |
|
18 |
<widget class="QDialogButtonBox" name="buttonBox"> |
|
19 |
<property name="orientation"> |
|
20 |
<enum>Qt::Horizontal</enum> |
|
21 |
</property> |
|
22 |
<property name="standardButtons"> |
|
23 |
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
|
24 |
</property> |
|
25 |
</widget> |
|
26 |
</item> |
|
27 |
<item row="1" column="0"> |
|
28 |
<widget class="QProgressBar" name="progressBarDataExport"> |
|
29 |
<property name="value"> |
|
30 |
<number>0</number> |
|
31 |
</property> |
|
32 |
</widget> |
|
33 |
</item> |
|
34 |
<item row="0" column="0"> |
|
35 |
<widget class="QSplitter" name="splitter"> |
|
36 |
<property name="baseSize"> |
|
37 |
<size> |
|
38 |
<width>0</width> |
|
39 |
<height>0</height> |
|
40 |
</size> |
|
41 |
</property> |
|
42 |
<property name="orientation"> |
|
43 |
<enum>Qt::Horizontal</enum> |
|
44 |
</property> |
|
45 |
<widget class="QGroupBox" name="groupBox"> |
|
46 |
<property name="title"> |
|
47 |
<string>Drawings</string> |
|
48 |
</property> |
|
49 |
<layout class="QGridLayout" name="gridLayout_2"> |
|
50 |
<item row="0" column="0"> |
|
51 |
<widget class="QTreeWidget" name="treeWidgetDrawingList"> |
|
52 |
<property name="minimumSize"> |
|
53 |
<size> |
|
54 |
<width>100</width> |
|
55 |
<height>0</height> |
|
56 |
</size> |
|
57 |
</property> |
|
58 |
<property name="baseSize"> |
|
59 |
<size> |
|
60 |
<width>200</width> |
|
61 |
<height>0</height> |
|
62 |
</size> |
|
63 |
</property> |
|
64 |
<property name="sortingEnabled"> |
|
65 |
<bool>true</bool> |
|
66 |
</property> |
|
67 |
<attribute name="headerVisible"> |
|
68 |
<bool>false</bool> |
|
69 |
</attribute> |
|
70 |
<column> |
|
71 |
<property name="text"> |
|
72 |
<string notr="true">1</string> |
|
73 |
</property> |
|
74 |
</column> |
|
75 |
</widget> |
|
76 |
</item> |
|
77 |
</layout> |
|
78 |
</widget> |
|
79 |
<widget class="QGroupBox" name="groupBox_2"> |
|
80 |
<property name="title"> |
|
81 |
<string>Folder</string> |
|
82 |
</property> |
|
83 |
<layout class="QGridLayout" name="gridLayout_3"> |
|
84 |
<item row="1" column="0"> |
|
85 |
<layout class="QFormLayout" name="formLayout"> |
|
86 |
<property name="formAlignment"> |
|
87 |
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> |
|
88 |
</property> |
|
89 |
<item row="0" column="1"> |
|
90 |
<layout class="QHBoxLayout" name="horizontalLayout"> |
|
91 |
<item> |
|
92 |
<widget class="QLineEdit" name="lineEditFolder"/> |
|
93 |
</item> |
|
94 |
<item> |
|
95 |
<widget class="QPushButton" name="pushButtonFolder"> |
|
96 |
<property name="maximumSize"> |
|
97 |
<size> |
|
98 |
<width>24</width> |
|
99 |
<height>16777215</height> |
|
100 |
</size> |
|
101 |
</property> |
|
102 |
<property name="text"> |
|
103 |
<string>...</string> |
|
104 |
</property> |
|
105 |
</widget> |
|
106 |
</item> |
|
107 |
</layout> |
|
108 |
</item> |
|
109 |
<item row="0" column="0"> |
|
110 |
<widget class="QLabel" name="label"> |
|
111 |
<property name="text"> |
|
112 |
<string>Folder : </string> |
|
113 |
</property> |
|
114 |
</widget> |
|
115 |
</item> |
|
116 |
</layout> |
|
117 |
</item> |
|
118 |
</layout> |
|
119 |
</widget> |
|
120 |
</widget> |
|
121 |
</item> |
|
122 |
</layout> |
|
123 |
</widget> |
|
124 |
<resources/> |
|
125 |
<connections> |
|
126 |
<connection> |
|
127 |
<sender>buttonBox</sender> |
|
128 |
<signal>accepted()</signal> |
|
129 |
<receiver>DataExportDialog</receiver> |
|
130 |
<slot>accept()</slot> |
|
131 |
<hints> |
|
132 |
<hint type="sourcelabel"> |
|
133 |
<x>248</x> |
|
134 |
<y>254</y> |
|
135 |
</hint> |
|
136 |
<hint type="destinationlabel"> |
|
137 |
<x>157</x> |
|
138 |
<y>274</y> |
|
139 |
</hint> |
|
140 |
</hints> |
|
141 |
</connection> |
|
142 |
<connection> |
|
143 |
<sender>buttonBox</sender> |
|
144 |
<signal>rejected()</signal> |
|
145 |
<receiver>DataExportDialog</receiver> |
|
146 |
<slot>reject()</slot> |
|
147 |
<hints> |
|
148 |
<hint type="sourcelabel"> |
|
149 |
<x>316</x> |
|
150 |
<y>260</y> |
|
151 |
</hint> |
|
152 |
<hint type="destinationlabel"> |
|
153 |
<x>286</x> |
|
154 |
<y>274</y> |
|
155 |
</hint> |
|
156 |
</hints> |
|
157 |
</connection> |
|
158 |
</connections> |
|
159 |
</ui> |
DTI_PID/DTI_PID/UI/DataExport_UI.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
|
|
3 |
# Form implementation generated from reading ui file '.\UI\DataExport.ui' |
|
4 |
# |
|
5 |
# Created by: PyQt5 UI code generator 5.13.0 |
|
6 |
# |
|
7 |
# WARNING! All changes made in this file will be lost! |
|
8 |
|
|
9 |
|
|
10 |
from PyQt5 import QtCore, QtGui, QtWidgets |
|
11 |
|
|
12 |
|
|
13 |
class Ui_DataExportDialog(object): |
|
14 |
def setupUi(self, DataExportDialog): |
|
15 |
DataExportDialog.setObjectName("DataExportDialog") |
|
16 |
DataExportDialog.resize(683, 385) |
|
17 |
self.gridLayout = QtWidgets.QGridLayout(DataExportDialog) |
|
18 |
self.gridLayout.setObjectName("gridLayout") |
|
19 |
self.buttonBox = QtWidgets.QDialogButtonBox(DataExportDialog) |
|
20 |
self.buttonBox.setOrientation(QtCore.Qt.Horizontal) |
|
21 |
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) |
|
22 |
self.buttonBox.setObjectName("buttonBox") |
|
23 |
self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 1) |
|
24 |
self.progressBarDataExport = QtWidgets.QProgressBar(DataExportDialog) |
|
25 |
self.progressBarDataExport.setProperty("value", 0) |
|
26 |
self.progressBarDataExport.setObjectName("progressBarDataExport") |
|
27 |
self.gridLayout.addWidget(self.progressBarDataExport, 1, 0, 1, 1) |
|
28 |
self.splitter = QtWidgets.QSplitter(DataExportDialog) |
|
29 |
self.splitter.setBaseSize(QtCore.QSize(0, 0)) |
|
30 |
self.splitter.setOrientation(QtCore.Qt.Horizontal) |
|
31 |
self.splitter.setObjectName("splitter") |
|
32 |
self.groupBox = QtWidgets.QGroupBox(self.splitter) |
|
33 |
self.groupBox.setObjectName("groupBox") |
|
34 |
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox) |
|
35 |
self.gridLayout_2.setObjectName("gridLayout_2") |
|
36 |
self.treeWidgetDrawingList = QtWidgets.QTreeWidget(self.groupBox) |
|
37 |
self.treeWidgetDrawingList.setMinimumSize(QtCore.QSize(100, 0)) |
|
38 |
self.treeWidgetDrawingList.setBaseSize(QtCore.QSize(200, 0)) |
|
39 |
self.treeWidgetDrawingList.setObjectName("treeWidgetDrawingList") |
|
40 |
self.treeWidgetDrawingList.headerItem().setText(0, "1") |
|
41 |
self.treeWidgetDrawingList.header().setVisible(False) |
|
42 |
self.gridLayout_2.addWidget(self.treeWidgetDrawingList, 0, 0, 1, 1) |
|
43 |
self.groupBox_2 = QtWidgets.QGroupBox(self.splitter) |
|
44 |
self.groupBox_2.setObjectName("groupBox_2") |
|
45 |
self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox_2) |
|
46 |
self.gridLayout_3.setObjectName("gridLayout_3") |
|
47 |
self.formLayout = QtWidgets.QFormLayout() |
|
48 |
self.formLayout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) |
|
49 |
self.formLayout.setObjectName("formLayout") |
|
50 |
self.horizontalLayout = QtWidgets.QHBoxLayout() |
|
51 |
self.horizontalLayout.setObjectName("horizontalLayout") |
|
52 |
self.lineEditFolder = QtWidgets.QLineEdit(self.groupBox_2) |
|
53 |
self.lineEditFolder.setObjectName("lineEditFolder") |
|
54 |
self.horizontalLayout.addWidget(self.lineEditFolder) |
|
55 |
self.pushButtonFolder = QtWidgets.QPushButton(self.groupBox_2) |
|
56 |
self.pushButtonFolder.setMaximumSize(QtCore.QSize(24, 16777215)) |
|
57 |
self.pushButtonFolder.setObjectName("pushButtonFolder") |
|
58 |
self.horizontalLayout.addWidget(self.pushButtonFolder) |
|
59 |
self.formLayout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout) |
|
60 |
self.label = QtWidgets.QLabel(self.groupBox_2) |
|
61 |
self.label.setObjectName("label") |
|
62 |
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label) |
|
63 |
self.gridLayout_3.addLayout(self.formLayout, 1, 0, 1, 1) |
|
64 |
self.gridLayout.addWidget(self.splitter, 0, 0, 1, 1) |
|
65 |
|
|
66 |
self.retranslateUi(DataExportDialog) |
|
67 |
self.buttonBox.accepted.connect(DataExportDialog.accept) |
|
68 |
self.buttonBox.rejected.connect(DataExportDialog.reject) |
|
69 |
QtCore.QMetaObject.connectSlotsByName(DataExportDialog) |
|
70 |
|
|
71 |
def retranslateUi(self, DataExportDialog): |
|
72 |
_translate = QtCore.QCoreApplication.translate |
|
73 |
DataExportDialog.setWindowTitle(_translate("DataExportDialog", "Data Export")) |
|
74 |
self.groupBox.setTitle(_translate("DataExportDialog", "Drawings")) |
|
75 |
self.treeWidgetDrawingList.setSortingEnabled(True) |
|
76 |
self.groupBox_2.setTitle(_translate("DataExportDialog", "Folder")) |
|
77 |
self.pushButtonFolder.setText(_translate("DataExportDialog", "...")) |
|
78 |
self.label.setText(_translate("DataExportDialog", "Folder : ")) |
DTI_PID/DTI_PID/UI/MainWindow.ui | ||
---|---|---|
7 | 7 |
<x>0</x> |
8 | 8 |
<y>0</y> |
9 | 9 |
<width>1089</width> |
10 |
<height>888</height>
|
|
10 |
<height>903</height>
|
|
11 | 11 |
</rect> |
12 | 12 |
</property> |
13 | 13 |
<property name="baseSize"> |
... | ... | |
119 | 119 |
<addaction name="actionImport_Text_From_CAD"/> |
120 | 120 |
<addaction name="separator"/> |
121 | 121 |
<addaction name="actionDataTransfer"/> |
122 |
<addaction name="actionDataExport"/> |
|
122 | 123 |
</widget> |
123 | 124 |
<widget class="QMenu" name="menu_5"> |
124 | 125 |
<property name="title"> |
... | ... | |
1101 | 1102 |
<string>F1</string> |
1102 | 1103 |
</property> |
1103 | 1104 |
</action> |
1105 |
<action name="actionDataExport"> |
|
1106 |
<property name="text"> |
|
1107 |
<string>DataExport</string> |
|
1108 |
</property> |
|
1109 |
<property name="toolTip"> |
|
1110 |
<string>Data Export</string> |
|
1111 |
</property> |
|
1112 |
<property name="shortcut"> |
|
1113 |
<string>Ctrl+T, Ctrl+E</string> |
|
1114 |
</property> |
|
1115 |
</action> |
|
1104 | 1116 |
</widget> |
1105 | 1117 |
<resources> |
1106 | 1118 |
<include location="../res/MainWindow.qrc"/> |
DTI_PID/DTI_PID/XmlGenerator.py | ||
---|---|---|
382 | 382 |
2018.06.14 Jeongwoo Add if-statement for QEngineeringUnknownItem data node |
383 | 383 |
2018.11.26 euisung remove scene dependency |
384 | 384 |
''' |
385 |
def writeXmlOnScene(pidName, pidWidth, pidHeight):
|
|
385 |
def writeXmlOnScene(path, pidWidth, pidHeight, items, tracer_line_nos):
|
|
386 | 386 |
from EngineeringAbstractItem import QEngineeringAbstractItem |
387 | 387 |
from EngineeringNoteItem import QEngineeringNoteItem |
388 | 388 |
from EngineeringTextItem import QEngineeringTextItem |
... | ... | |
400 | 400 |
from GraphicsBoundingBoxItem import QGraphicsBoundingBoxItem |
401 | 401 |
from EngineeringEndBreakItem import QEngineeringEndBreakItem |
402 | 402 |
|
403 |
appDocData = AppDocData.instance() |
|
404 |
items = [] |
|
405 |
items = appDocData.allItems |
|
406 |
path = os.path.join(AppDocData.instance().getCurrentProject().getTempPath(), pidName + '.xml') |
|
407 |
|
|
408 | 403 |
xml = Element(ROOT_NODE_NAME) # Root Node |
409 |
SubElement(xml, ROOT_DWGNAME_NODE_NAME).text = pidName
|
|
404 |
SubElement(xml, ROOT_DWGNAME_NODE_NAME).text = os.path.splitext(os.path.basename(path))[0]
|
|
410 | 405 |
SubElement(xml, ROOT_SIZE_NODE_NAME).text = str(pidWidth) + "," + str(pidHeight) |
411 | 406 |
symbolListNode = Element(SYMBOL_LIST_NODE_NAME) # Symbol List Node |
412 | 407 |
textInfoListNode = Element(TEXT_INFO_LIST_NODE_NAME) # Text Info List Node |
... | ... | |
455 | 450 |
else: |
456 | 451 |
resultDic[key][1].append(str(item.uid)) |
457 | 452 |
|
458 |
for line in appDocData.tracerLineNos:
|
|
453 |
for line in tracer_line_nos:
|
|
459 | 454 |
if type(line) is QEngineeringTrimLineNoTextItem: |
460 | 455 |
trimNode = line.toXml() |
461 | 456 |
if trimNode: |
DTI_PID/DTI_PID/translate/ja_jp.ts | ||
---|---|---|
390 | 390 |
</message> |
391 | 391 |
</context> |
392 | 392 |
<context> |
393 |
<name>DataExportDialog</name> |
|
394 |
<message> |
|
395 |
<location filename="../UI/DataExport_UI.py" line="73"/> |
|
396 |
<source>Data Export</source> |
|
397 |
<translation type="unfinished"></translation> |
|
398 |
</message> |
|
399 |
<message> |
|
400 |
<location filename="../UI/DataExport_UI.py" line="74"/> |
|
401 |
<source>Drawings</source> |
|
402 |
<translation type="unfinished"></translation> |
|
403 |
</message> |
|
404 |
<message> |
|
405 |
<location filename="../UI/DataExport_UI.py" line="76"/> |
|
406 |
<source>Folder</source> |
|
407 |
<translation type="unfinished"></translation> |
|
408 |
</message> |
|
409 |
<message> |
|
410 |
<location filename="../UI/DataExport_UI.py" line="77"/> |
|
411 |
<source>...</source> |
|
412 |
<translation type="unfinished"></translation> |
|
413 |
</message> |
|
414 |
<message> |
|
415 |
<location filename="../UI/DataExport_UI.py" line="78"/> |
|
416 |
<source>Folder : </source> |
|
417 |
<translation type="unfinished"></translation> |
|
418 |
</message> |
|
419 |
</context> |
|
420 |
<context> |
|
393 | 421 |
<name>DataTransferDialog</name> |
394 | 422 |
<message> |
395 | 423 |
<location filename="../UI/DataTransfer_UI.py" line="81"/> |
... | ... | |
798 | 826 |
<context> |
799 | 827 |
<name>MainWindow</name> |
800 | 828 |
<message> |
801 |
<location filename="../MainWindow_UI.py" line="559"/>
|
|
829 |
<location filename="../MainWindow_UI.py" line="562"/>
|
|
802 | 830 |
<source>File</source> |
803 | 831 |
<translation type="unfinished">ファイル</translation> |
804 | 832 |
</message> |
805 | 833 |
<message> |
806 |
<location filename="../MainWindow_UI.py" line="562"/>
|
|
834 |
<location filename="../MainWindow_UI.py" line="565"/>
|
|
807 | 835 |
<source>Data</source> |
808 | 836 |
<translation type="unfinished">データ</translation> |
809 | 837 |
</message> |
810 | 838 |
<message> |
811 |
<location filename="../MainWindow_UI.py" line="563"/>
|
|
839 |
<location filename="../MainWindow_UI.py" line="566"/>
|
|
812 | 840 |
<source>View</source> |
813 | 841 |
<translation type="unfinished">見る</translation> |
814 | 842 |
</message> |
815 | 843 |
<message> |
816 |
<location filename="../MainWindow_UI.py" line="564"/>
|
|
844 |
<location filename="../MainWindow_UI.py" line="567"/>
|
|
817 | 845 |
<source>Tool</source> |
818 | 846 |
<translation type="unfinished">ツール</translation> |
819 | 847 |
</message> |
820 | 848 |
<message> |
821 |
<location filename="../MainWindow_UI.py" line="565"/>
|
|
849 |
<location filename="../MainWindow_UI.py" line="568"/>
|
|
822 | 850 |
<source>Edit</source> |
823 | 851 |
<translation type="unfinished">編集する</translation> |
824 | 852 |
</message> |
... | ... | |
828 | 856 |
<translation type="unfinished">P&ID ドローイング</translation> |
829 | 857 |
</message> |
830 | 858 |
<message> |
831 |
<location filename="../MainWindow_UI.py" line="561"/>
|
|
859 |
<location filename="../MainWindow_UI.py" line="564"/>
|
|
832 | 860 |
<source>Language</source> |
833 | 861 |
<translation type="unfinished">言語</translation> |
834 | 862 |
</message> |
835 | 863 |
<message> |
836 |
<location filename="../MainWindow_UI.py" line="633"/>
|
|
864 |
<location filename="../MainWindow_UI.py" line="636"/>
|
|
837 | 865 |
<source>English</source> |
838 | 866 |
<translation type="unfinished">英語</translation> |
839 | 867 |
</message> |
840 | 868 |
<message> |
841 |
<location filename="../MainWindow_UI.py" line="558"/>
|
|
869 |
<location filename="../MainWindow_UI.py" line="561"/>
|
|
842 | 870 |
<source>MainWindow</source> |
843 | 871 |
<translation type="unfinished"></translation> |
844 | 872 |
</message> |
845 | 873 |
<message> |
846 |
<location filename="../MainWindow_UI.py" line="560"/>
|
|
874 |
<location filename="../MainWindow_UI.py" line="563"/>
|
|
847 | 875 |
<source>Theme</source> |
848 | 876 |
<translation type="unfinished"></translation> |
849 | 877 |
</message> |
850 | 878 |
<message> |
851 |
<location filename="../MainWindow_UI.py" line="567"/>
|
|
879 |
<location filename="../MainWindow_UI.py" line="570"/>
|
|
852 | 880 |
<source>Main Toolbar</source> |
853 | 881 |
<translation type="unfinished"></translation> |
854 | 882 |
</message> |
855 | 883 |
<message> |
856 |
<location filename="../MainWindow_UI.py" line="568"/>
|
|
884 |
<location filename="../MainWindow_UI.py" line="571"/>
|
|
857 | 885 |
<source>Symbol Explorer</source> |
858 | 886 |
<translation type="unfinished"></translation> |
859 | 887 |
</message> |
860 | 888 |
<message> |
861 |
<location filename="../MainWindow_UI.py" line="569"/>
|
|
889 |
<location filename="../MainWindow_UI.py" line="572"/>
|
|
862 | 890 |
<source>Create</source> |
863 | 891 |
<translation type="unfinished"></translation> |
864 | 892 |
</message> |
865 | 893 |
<message> |
866 |
<location filename="../MainWindow_UI.py" line="570"/>
|
|
894 |
<location filename="../MainWindow_UI.py" line="573"/>
|
|
867 | 895 |
<source>Symbol Manager</source> |
868 | 896 |
<translation type="unfinished"></translation> |
869 | 897 |
</message> |
... | ... | |
873 | 901 |
<translation type="unfinished"></translation> |
874 | 902 |
</message> |
875 | 903 |
<message> |
876 |
<location filename="../MainWindow_UI.py" line="573"/>
|
|
904 |
<location filename="../MainWindow_UI.py" line="576"/>
|
|
877 | 905 |
<source>Object Explorer</source> |
878 | 906 |
<translation type="unfinished"></translation> |
879 | 907 |
</message> |
880 | 908 |
<message> |
881 |
<location filename="../MainWindow_UI.py" line="574"/>
|
|
909 |
<location filename="../MainWindow_UI.py" line="577"/>
|
|
882 | 910 |
<source>Batch Job</source> |
883 | 911 |
<translation type="unfinished"></translation> |
884 | 912 |
</message> |
885 | 913 |
<message> |
886 |
<location filename="../MainWindow_UI.py" line="575"/>
|
|
914 |
<location filename="../MainWindow_UI.py" line="578"/>
|
|
887 | 915 |
<source>Refresh Drawing List</source> |
888 | 916 |
<translation type="unfinished"></translation> |
889 | 917 |
</message> |
890 | 918 |
<message> |
891 |
<location filename="../MainWindow_UI.py" line="577"/>
|
|
919 |
<location filename="../MainWindow_UI.py" line="580"/>
|
|
892 | 920 |
<source>Drawing List</source> |
893 | 921 |
<translation type="unfinished"></translation> |
894 | 922 |
</message> |
895 | 923 |
<message> |
896 |
<location filename="../MainWindow_UI.py" line="578"/>
|
|
924 |
<location filename="../MainWindow_UI.py" line="581"/>
|
|
897 | 925 |
<source>Edit Toolbar</source> |
898 | 926 |
<translation type="unfinished"></translation> |
899 | 927 |
</message> |
900 | 928 |
<message> |
901 |
<location filename="../MainWindow_UI.py" line="579"/>
|
|
929 |
<location filename="../MainWindow_UI.py" line="582"/>
|
|
902 | 930 |
<source>Output Window</source> |
903 | 931 |
<translation type="unfinished"></translation> |
904 | 932 |
</message> |
905 | 933 |
<message> |
906 |
<location filename="../MainWindow_UI.py" line="580"/>
|
|
934 |
<location filename="../MainWindow_UI.py" line="583"/>
|
|
907 | 935 |
<source>Clear</source> |
908 | 936 |
<translation type="unfinished"></translation> |
909 | 937 |
</message> |
910 | 938 |
<message> |
911 |
<location filename="../MainWindow_UI.py" line="581"/>
|
|
939 |
<location filename="../MainWindow_UI.py" line="584"/>
|
|
912 | 940 |
<source>X</source> |
913 | 941 |
<translation type="unfinished"></translation> |
914 | 942 |
</message> |
915 | 943 |
<message> |
916 |
<location filename="../MainWindow_UI.py" line="583"/>
|
|
944 |
<location filename="../MainWindow_UI.py" line="586"/>
|
|
917 | 945 |
<source>Inconsistency</source> |
918 | 946 |
<translation type="unfinished"></translation> |
919 | 947 |
</message> |
920 | 948 |
<message> |
921 |
<location filename="../MainWindow_UI.py" line="584"/>
|
|
949 |
<location filename="../MainWindow_UI.py" line="587"/>
|
|
922 | 950 |
<source>Open</source> |
923 | 951 |
<translation type="unfinished"></translation> |
924 | 952 |
</message> |
925 | 953 |
<message> |
926 |
<location filename="../MainWindow_UI.py" line="585"/>
|
|
954 |
<location filename="../MainWindow_UI.py" line="588"/>
|
|
927 | 955 |
<source>Open(Ctrl + O)</source> |
928 | 956 |
<translation type="unfinished"></translation> |
929 | 957 |
</message> |
930 | 958 |
<message> |
931 |
<location filename="../MainWindow_UI.py" line="586"/>
|
|
959 |
<location filename="../MainWindow_UI.py" line="589"/>
|
|
932 | 960 |
<source>Ctrl+O</source> |
933 | 961 |
<translation type="unfinished"></translation> |
934 | 962 |
</message> |
935 | 963 |
<message> |
936 |
<location filename="../MainWindow_UI.py" line="587"/>
|
|
964 |
<location filename="../MainWindow_UI.py" line="590"/>
|
|
937 | 965 |
<source>Exit</source> |
938 | 966 |
<translation type="unfinished"></translation> |
939 | 967 |
</message> |
940 | 968 |
<message> |
941 |
<location filename="../MainWindow_UI.py" line="589"/>
|
|
969 |
<location filename="../MainWindow_UI.py" line="592"/>
|
|
942 | 970 |
<source>Recognize Eng. Info.</source> |
943 | 971 |
<translation type="unfinished"></translation> |
944 | 972 |
</message> |
945 | 973 |
<message> |
946 |
<location filename="../MainWindow_UI.py" line="590"/>
|
|
974 |
<location filename="../MainWindow_UI.py" line="593"/>
|
|
947 | 975 |
<source>Create Line</source> |
948 | 976 |
<translation type="unfinished"></translation> |
949 | 977 |
</message> |
950 | 978 |
<message> |
951 |
<location filename="../MainWindow_UI.py" line="591"/>
|
|
979 |
<location filename="../MainWindow_UI.py" line="594"/>
|
|
952 | 980 |
<source>Create Line(L)</source> |
953 | 981 |
<translation type="unfinished"></translation> |
954 | 982 |
</message> |
955 | 983 |
<message> |
956 |
<location filename="../MainWindow_UI.py" line="592"/>
|
|
984 |
<location filename="../MainWindow_UI.py" line="595"/>
|
|
957 | 985 |
<source>L</source> |
958 | 986 |
<translation type="unfinished"></translation> |
959 | 987 |
</message> |
960 | 988 |
<message> |
961 |
<location filename="../MainWindow_UI.py" line="593"/>
|
|
989 |
<location filename="../MainWindow_UI.py" line="596"/>
|
|
962 | 990 |
<source>Validate</source> |
963 | 991 |
<translation type="unfinished"></translation> |
964 | 992 |
</message> |
965 | 993 |
<message> |
966 |
<location filename="../MainWindow_UI.py" line="594"/>
|
|
994 |
<location filename="../MainWindow_UI.py" line="597"/>
|
|
967 | 995 |
<source>Validate(V)</source> |
968 | 996 |
<translation type="unfinished"></translation> |
969 | 997 |
</message> |
970 | 998 |
<message> |
971 |
<location filename="../MainWindow_UI.py" line="595"/>
|
|
999 |
<location filename="../MainWindow_UI.py" line="598"/>
|
|
972 | 1000 |
<source>V</source> |
973 | 1001 |
<translation type="unfinished"></translation> |
974 | 1002 |
</message> |
975 | 1003 |
<message> |
976 |
<location filename="../MainWindow_UI.py" line="596"/>
|
|
1004 |
<location filename="../MainWindow_UI.py" line="599"/>
|
|
977 | 1005 |
<source>Configuration</source> |
978 | 1006 |
<translation type="unfinished"></translation> |
979 | 1007 |
</message> |
980 | 1008 |
<message> |
981 |
<location filename="../MainWindow_UI.py" line="597"/>
|
|
1009 |
<location filename="../MainWindow_UI.py" line="600"/>
|
|
982 | 1010 |
<source>Setup Area</source> |
983 | 1011 |
<translation type="unfinished"></translation> |
984 | 1012 |
</message> |
985 | 1013 |
<message> |
986 |
<location filename="../MainWindow_UI.py" line="598"/>
|
|
1014 |
<location filename="../MainWindow_UI.py" line="601"/>
|
|
987 | 1015 |
<source>OCR</source> |
988 | 1016 |
<translation type="unfinished"></translation> |
989 | 1017 |
</message> |
990 | 1018 |
<message> |
991 |
<location filename="../MainWindow_UI.py" line="599"/>
|
|
1019 |
<location filename="../MainWindow_UI.py" line="602"/>
|
|
992 | 1020 |
<source>OCR(T)</source> |
993 | 1021 |
<translation type="unfinished"></translation> |
994 | 1022 |
</message> |
995 | 1023 |
<message> |
996 |
<location filename="../MainWindow_UI.py" line="600"/>
|
|
1024 |
<location filename="../MainWindow_UI.py" line="603"/>
|
|
997 | 1025 |
<source>T</source> |
998 | 1026 |
<translation type="unfinished"></translation> |
999 | 1027 |
</message> |
1000 | 1028 |
<message> |
1001 |
<location filename="../MainWindow_UI.py" line="602"/>
|
|
1029 |
<location filename="../MainWindow_UI.py" line="605"/>
|
|
1002 | 1030 |
<source>Link Attribute</source> |
1003 | 1031 |
<translation type="unfinished"></translation> |
1004 | 1032 |
</message> |
1005 | 1033 |
<message> |
1006 |
<location filename="../MainWindow_UI.py" line="603"/>
|
|
1034 |
<location filename="../MainWindow_UI.py" line="606"/>
|
|
1007 | 1035 |
<source>Convert</source> |
1008 | 1036 |
<translation type="unfinished"></translation> |
1009 | 1037 |
</message> |
1010 | 1038 |
<message> |
1011 |
<location filename="../MainWindow_UI.py" line="604"/>
|
|
1039 |
<location filename="../MainWindow_UI.py" line="607"/>
|
|
1012 | 1040 |
<source>Equipment Data List</source> |
1013 | 1041 |
<translation type="unfinished"></translation> |
1014 | 1042 |
</message> |
1015 | 1043 |
<message> |
1016 |
<location filename="../MainWindow_UI.py" line="605"/>
|
|
1044 |
<location filename="../MainWindow_UI.py" line="608"/>
|
|
1017 | 1045 |
<source>Engineering Info. List</source> |
1018 | 1046 |
<translation type="unfinished"></translation> |
1019 | 1047 |
</message> |
1020 | 1048 |
<message> |
1021 |
<location filename="../MainWindow_UI.py" line="606"/>
|
|
1049 |
<location filename="../MainWindow_UI.py" line="609"/>
|
|
1022 | 1050 |
<source>Instrument Data List</source> |
1023 | 1051 |
<translation type="unfinished"></translation> |
1024 | 1052 |
</message> |
1025 | 1053 |
<message> |
1026 |
<location filename="../MainWindow.py" line="835"/>
|
|
1054 |
<location filename="../MainWindow.py" line="836"/>
|
|
1027 | 1055 |
<source>Initialize</source> |
1028 | 1056 |
<translation type="unfinished"></translation> |
1029 | 1057 |
</message> |
1030 | 1058 |
<message> |
1031 |
<location filename="../MainWindow_UI.py" line="608"/>
|
|
1059 |
<location filename="../MainWindow_UI.py" line="611"/>
|
|
1032 | 1060 |
<source>Image Drawing (1)</source> |
1033 | 1061 |
<translation type="unfinished"></translation> |
1034 | 1062 |
</message> |
1035 | 1063 |
<message> |
1036 |
<location filename="../MainWindow_UI.py" line="609"/>
|
|
1064 |
<location filename="../MainWindow_UI.py" line="612"/>
|
|
1037 | 1065 |
<source>Zoom</source> |
1038 | 1066 |
<translation type="unfinished"></translation> |
1039 | 1067 |
</message> |
1040 | 1068 |
<message> |
1041 |
<location filename="../MainWindow_UI.py" line="610"/>
|
|
1069 |
<location filename="../MainWindow_UI.py" line="613"/>
|
|
1042 | 1070 |
<source>Zoom(Z)</source> |
1043 | 1071 |
<translation type="unfinished"></translation> |
1044 | 1072 |
</message> |
1045 | 1073 |
<message> |
1046 |
<location filename="../MainWindow_UI.py" line="611"/>
|
|
1074 |
<location filename="../MainWindow_UI.py" line="614"/>
|
|
1047 | 1075 |
<source>Z</source> |
1048 | 1076 |
<translation type="unfinished"></translation> |
1049 | 1077 |
</message> |
1050 | 1078 |
<message> |
1051 |
<location filename="../MainWindow_UI.py" line="612"/>
|
|
1079 |
<location filename="../MainWindow_UI.py" line="615"/>
|
|
1052 | 1080 |
<source>FitWindow</source> |
1053 | 1081 |
<translation type="unfinished"></translation> |
1054 | 1082 |
</message> |
1055 | 1083 |
<message> |
1056 |
<location filename="../MainWindow_UI.py" line="613"/>
|
|
1084 |
<location filename="../MainWindow_UI.py" line="616"/>
|
|
1057 | 1085 |
<source>Symbol (3)</source> |
1058 | 1086 |
<translation type="unfinished"></translation> |
1059 | 1087 |
</message> |
1060 | 1088 |
<message> |
1061 |
<location filename="../MainWindow_UI.py" line="614"/>
|
|
1089 |
<location filename="../MainWindow_UI.py" line="617"/>
|
|
1062 | 1090 |
<source>Text (2)</source> |
1063 | 1091 |
<translation type="unfinished"></translation> |
1064 | 1092 |
</message> |
1065 | 1093 |
<message> |
1066 |
<location filename="../MainWindow_UI.py" line="615"/>
|
|
1094 |
<location filename="../MainWindow_UI.py" line="618"/>
|
|
1067 | 1095 |
<source>Line (4)</source> |
1068 | 1096 |
<translation type="unfinished"></translation> |
1069 | 1097 |
</message> |
1070 | 1098 |
<message> |
1071 |
<location filename="../MainWindow_UI.py" line="616"/>
|
|
1099 |
<location filename="../MainWindow_UI.py" line="619"/>
|
|
1072 | 1100 |
<source>Unrecognization (5)</source> |
1073 | 1101 |
<translation type="unfinished"></translation> |
1074 | 1102 |
</message> |
1075 | 1103 |
<message> |
1076 |
<location filename="../MainWindow_UI.py" line="617"/>
|
|
1104 |
<location filename="../MainWindow_UI.py" line="620"/>
|
|
1077 | 1105 |
<source>Code Table</source> |
1078 | 1106 |
<translation type="unfinished"></translation> |
1079 | 1107 |
</message> |
1080 | 1108 |
<message> |
1081 |
<location filename="../MainWindow_UI.py" line="618"/>
|
|
1109 |
<location filename="../MainWindow_UI.py" line="621"/>
|
|
1082 | 1110 |
<source>Fluid Code</source> |
1083 | 1111 |
<translation type="unfinished"></translation> |
1084 | 1112 |
</message> |
1085 | 1113 |
<message> |
1086 |
<location filename="../MainWindow_UI.py" line="619"/>
|
|
1114 |
<location filename="../MainWindow_UI.py" line="622"/>
|
|
1087 | 1115 |
<source>Convert PDF</source> |
1088 | 1116 |
<translation type="unfinished"></translation> |
1089 | 1117 |
</message> |
1090 | 1118 |
<message> |
1091 |
<location filename="../MainWindow_UI.py" line="620"/>
|
|
1119 |
<location filename="../MainWindow_UI.py" line="623"/>
|
|
1092 | 1120 |
<source>HMB Data</source> |
1093 | 1121 |
<translation type="unfinished"></translation> |
1094 | 1122 |
</message> |
1095 | 1123 |
<message> |
1096 |
<location filename="../MainWindow_UI.py" line="621"/>
|
|
1124 |
<location filename="../MainWindow_UI.py" line="624"/>
|
|
1097 | 1125 |
<source>Save</source> |
1098 | 1126 |
<translation type="unfinished"></translation> |
1099 | 1127 |
</message> |
1100 | 1128 |
<message> |
1101 |
<location filename="../MainWindow_UI.py" line="622"/>
|
|
1129 |
<location filename="../MainWindow_UI.py" line="625"/>
|
|
1102 | 1130 |
<source>Save(Ctrl + S)</source> |
1103 | 1131 |
<translation type="unfinished"></translation> |
1104 | 1132 |
</message> |
1105 | 1133 |
<message> |
1106 |
<location filename="../MainWindow_UI.py" line="623"/>
|
|
1134 |
<location filename="../MainWindow_UI.py" line="626"/>
|
|
1107 | 1135 |
<source>Ctrl+S</source> |
1108 | 1136 |
<translation type="unfinished"></translation> |
1109 | 1137 |
</message> |
1110 | 1138 |
<message> |
1111 |
<location filename="../MainWindow_UI.py" line="624"/>
|
|
1139 |
<location filename="../MainWindow_UI.py" line="627"/>
|
|
1112 | 1140 |
<source>Rotate</source> |
1113 | 1141 |
<translation type="unfinished"></translation> |
1114 | 1142 |
</message> |
1115 | 1143 |
<message> |
1116 |
<location filename="../MainWindow_UI.py" line="626"/>
|
|
1144 |
<location filename="../MainWindow_UI.py" line="629"/>
|
|
1117 | 1145 |
<source>Find/Replace</source> |
1118 | 1146 |
<translation type="unfinished"></translation> |
1119 | 1147 |
</message> |
1120 | 1148 |
<message> |
1121 |
<location filename="../MainWindow_UI.py" line="627"/>
|
|
1149 |
<location filename="../MainWindow_UI.py" line="630"/>
|
|
1122 | 1150 |
<source>Fine/Replace</source> |
1123 | 1151 |
<translation type="unfinished"></translation> |
1124 | 1152 |
</message> |
1125 | 1153 |
<message> |
1126 |
<location filename="../MainWindow_UI.py" line="629"/>
|
|
1154 |
<location filename="../MainWindow_UI.py" line="632"/>
|
|
1127 | 1155 |
<source>Modify Text</source> |
1128 | 1156 |
<translation type="unfinished"></translation> |
1129 | 1157 |
</message> |
1130 | 1158 |
<message> |
1131 |
<location filename="../MainWindow_UI.py" line="630"/>
|
|
1159 |
<location filename="../MainWindow_UI.py" line="633"/>
|
|
1132 | 1160 |
<source>OCR Training</source> |
1133 | 1161 |
<translation type="unfinished"></translation> |
1134 | 1162 |
</message> |
1135 | 1163 |
<message> |
1136 |
<location filename="../MainWindow_UI.py" line="631"/>
|
|
1164 |
<location filename="../MainWindow_UI.py" line="634"/>
|
|
1137 | 1165 |
<source>OCR Training Editor</source> |
1138 | 1166 |
<translation type="unfinished"></translation> |
1139 | 1167 |
</message> |
1140 | 1168 |
<message> |
1141 |
<location filename="../MainWindow_UI.py" line="632"/>
|
|
1169 |
<location filename="../MainWindow_UI.py" line="635"/>
|
|
1142 | 1170 |
<source>coffee</source> |
1143 | 1171 |
<translation type="unfinished"></translation> |
1144 | 1172 |
</message> |
1145 | 1173 |
<message> |
1146 |
<location filename="../MainWindow_UI.py" line="634"/>
|
|
1174 |
<location filename="../MainWindow_UI.py" line="637"/>
|
|
1147 | 1175 |
<source>Inconsistency (6)</source> |
1148 | 1176 |
<translation type="unfinished"></translation> |
1149 | 1177 |
</message> |
1150 | 1178 |
<message> |
1151 |
<location filename="../MainWindow_UI.py" line="635"/>
|
|
1179 |
<location filename="../MainWindow_UI.py" line="638"/>
|
|
1152 | 1180 |
<source>Text Data List</source> |
1153 | 1181 |
<translation type="unfinished"></translation> |
1154 | 1182 |
</message> |
1155 | 1183 |
<message> |
1156 |
<location filename="../MainWindow_UI.py" line="636"/>
|
|
1184 |
<location filename="../MainWindow_UI.py" line="639"/>
|
|
1157 | 1185 |
<source>Drawing Only ( ` )</source> |
1158 | 1186 |
<translation type="unfinished"></translation> |
1159 | 1187 |
</message> |
1160 | 1188 |
<message> |
1161 |
<location filename="../MainWindow_UI.py" line="637"/>
|
|
1189 |
<location filename="../MainWindow_UI.py" line="640"/>
|
|
1162 | 1190 |
<source>Vendor</source> |
1163 | 1191 |
<translation type="unfinished"></translation> |
1164 | 1192 |
</message> |
1165 | 1193 |
<message> |
1166 |
<location filename="../MainWindow_UI.py" line="638"/>
|
|
1194 |
<location filename="../MainWindow_UI.py" line="641"/>
|
|
1167 | 1195 |
<source>Set Vendor Package</source> |
1168 | 1196 |
<translation type="unfinished"></translation> |
1169 | 1197 |
</message> |
1170 | 1198 |
<message> |
1171 |
<location filename="../MainWindow_UI.py" line="639"/>
|
|
1199 |
<location filename="../MainWindow_UI.py" line="642"/>
|
|
1172 | 1200 |
<source>Vendor Area(7)</source> |
1173 | 1201 |
<translation type="unfinished"></translation> |
1174 | 1202 |
</message> |
1175 | 1203 |
<message> |
1176 |
<location filename="../MainWindow_UI.py" line="640"/>
|
|
1204 |
<location filename="../MainWindow_UI.py" line="643"/>
|
|
1177 | 1205 |
<source>Import Text From CAD</source> |
1178 | 1206 |
<translation type="unfinished"></translation> |
1179 | 1207 |
</message> |
1180 | 1208 |
<message> |
1181 |
<location filename="../MainWindow_UI.py" line="642"/>
|
|
1209 |
<location filename="../MainWindow_UI.py" line="645"/>
|
|
1182 | 1210 |
<source>Special Item Types</source> |
1183 | 1211 |
<translation type="unfinished"></translation> |
1184 | 1212 |
</message> |
1185 | 1213 |
<message> |
1186 |
<location filename="../MainWindow_UI.py" line="643"/>
|
|
1214 |
<location filename="../MainWindow_UI.py" line="646"/>
|
|
1187 | 1215 |
<source>DataTransfer</source> |
1188 | 1216 |
<translation type="unfinished"></translation> |
1189 | 1217 |
</message> |
1190 | 1218 |
<message> |
1191 |
<location filename="../MainWindow_UI.py" line="644"/>
|
|
1219 |
<location filename="../MainWindow_UI.py" line="647"/>
|
|
1192 | 1220 |
<source>Data Transfer</source> |
1193 | 1221 |
<translation type="unfinished"></translation> |
1194 | 1222 |
</message> |
1195 | 1223 |
<message> |
1196 |
<location filename="../MainWindow_UI.py" line="645"/>
|
|
1224 |
<location filename="../MainWindow_UI.py" line="649"/>
|
|
1197 | 1225 |
<source>OPCRelation</source> |
1198 | 1226 |
<translation type="unfinished"></translation> |
1199 | 1227 |
</message> |
1200 | 1228 |
<message> |
1201 |
<location filename="../MainWindow_UI.py" line="646"/>
|
|
1229 |
<location filename="../MainWindow_UI.py" line="650"/>
|
|
1202 | 1230 |
<source>OPC Relation</source> |
1203 | 1231 |
<translation type="unfinished"></translation> |
1204 | 1232 |
</message> |
... | ... | |
1253 | 1281 |
<translation type="unfinished"></translation> |
내보내기 Unified diff