프로젝트

일반

사용자정보

개정판 3a04bc04

ID3a04bc04b7ef8c914d8eee4c53bec4f8707392fd
상위 2d0fedb1
하위 8b5435cc

함의성이(가) 5년 이상 전에 추가함

issue #49: add user dictionary table and fix symbol labeling if 663

Change-Id: Ic5cbf6a4cbbe4438872759e671ed8fd803ad789e

차이점 보기:

DTI_PID/DTI_PID/AppDocData.py
790 790

  
791 791
                        fileNames = os.listdir(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'Scripts'))
792 792
                        for fileName in fileNames:
793
                            if fileName.endswith(".sql") and (1 == len(os.path.splitext(fileName)[0].split('.'))):
793
                            if fileName.endswith(".sql") and ('SQLite_Project' == os.path.splitext(fileName)[0].split('.')[0]):
794 794
                                try:
795 795
                                    file = QFile(
796 796
                                        os.path.join(os.path.dirname(os.path.realpath(__file__)), 'Scripts', fileName))
DTI_PID/DTI_PID/CodeTableDialog.py
15 15
    This code table dialog class
16 16
    """
17 17

  
18
    CODE_TABLES = ('Nominal Diameter', 'Fluid Code', 'Insulation Purpose', 'PnID Number', 'Piping Materials Class', 'Unit Number', 'ValveOperCodes', 'EqpTagNames', 'ReservedWords')
18
    CODE_TABLES = ('Nominal Diameter', 'Fluid Code', 'Insulation Purpose', 'PnID Number', 'Piping Materials Class', 'Unit Number', 'ValveOperCodes', 'EqpTagNames', 'ReservedWords', 'Dictionary')
19 19

  
20 20
    def __init__(self, parent):
21 21
        QDialog.__init__(self, parent)
DTI_PID/DTI_PID/CodeTable_UI.py
1 1
# -*- coding: utf-8 -*-
2 2

  
3
# Form implementation generated from reading ui file '.\UI\CodeTable.ui'
3
# Form implementation generated from reading ui file './UI/CodeTable.ui'
4 4
#
5
# Created by: PyQt5 UI code generator 5.13.0
5
# Created by: PyQt5 UI code generator 5.11.3
6 6
#
7 7
# WARNING! All changes made in this file will be lost!
8 8

  
9

  
10 9
from PyQt5 import QtCore, QtGui, QtWidgets
11 10

  
12

  
13 11
class Ui_CodeTableDialog(object):
14 12
    def setupUi(self, CodeTableDialog):
15 13
        CodeTableDialog.setObjectName("CodeTableDialog")
......
141 139
        self.gridLayout_11.addWidget(self.groupBox_6, 0, 0, 1, 1)
142 140
        self.gridLayout_12.addLayout(self.gridLayout_11, 0, 0, 1, 1)
143 141
        self.tabWidget.addTab(self.tabUnitNumber, "")
144
        self.tab = QtWidgets.QWidget()
145
        self.tab.setObjectName("tab")
146
        self.gridLayout_19 = QtWidgets.QGridLayout(self.tab)
142
        self.tabValveOperCodes = QtWidgets.QWidget()
143
        self.tabValveOperCodes.setObjectName("tabValveOperCodes")
144
        self.gridLayout_19 = QtWidgets.QGridLayout(self.tabValveOperCodes)
147 145
        self.gridLayout_19.setObjectName("gridLayout_19")
148
        self.groupBox_7 = QtWidgets.QGroupBox(self.tab)
146
        self.groupBox_7 = QtWidgets.QGroupBox(self.tabValveOperCodes)
149 147
        self.groupBox_7.setObjectName("groupBox_7")
150 148
        self.gridLayout_20 = QtWidgets.QGridLayout(self.groupBox_7)
151 149
        self.gridLayout_20.setObjectName("gridLayout_20")
......
156 154
        self.tableWidgetValveOperCodes.verticalHeader().setVisible(False)
157 155
        self.gridLayout_20.addWidget(self.tableWidgetValveOperCodes, 0, 0, 1, 1)
158 156
        self.gridLayout_19.addWidget(self.groupBox_7, 0, 0, 1, 1)
159
        self.tabWidget.addTab(self.tab, "")
160
        self.tab_2 = QtWidgets.QWidget()
161
        self.tab_2.setObjectName("tab_2")
162
        self.gridLayout_22 = QtWidgets.QGridLayout(self.tab_2)
157
        self.tabWidget.addTab(self.tabValveOperCodes, "")
158
        self.tabEqpTagNames = QtWidgets.QWidget()
159
        self.tabEqpTagNames.setObjectName("tabEqpTagNames")
160
        self.gridLayout_22 = QtWidgets.QGridLayout(self.tabEqpTagNames)
163 161
        self.gridLayout_22.setObjectName("gridLayout_22")
164
        self.groupBox_8 = QtWidgets.QGroupBox(self.tab_2)
162
        self.groupBox_8 = QtWidgets.QGroupBox(self.tabEqpTagNames)
165 163
        self.groupBox_8.setObjectName("groupBox_8")
166 164
        self.gridLayout_21 = QtWidgets.QGridLayout(self.groupBox_8)
167 165
        self.gridLayout_21.setObjectName("gridLayout_21")
......
172 170
        self.tableWidgetEqpTagNames.verticalHeader().setVisible(False)
173 171
        self.gridLayout_21.addWidget(self.tableWidgetEqpTagNames, 0, 0, 1, 1)
174 172
        self.gridLayout_22.addWidget(self.groupBox_8, 0, 0, 1, 1)
175
        self.tabWidget.addTab(self.tab_2, "")
176
        self.tab_3 = QtWidgets.QWidget()
177
        self.tab_3.setObjectName("tab_3")
178
        self.gridLayout_24 = QtWidgets.QGridLayout(self.tab_3)
173
        self.tabWidget.addTab(self.tabEqpTagNames, "")
174
        self.tabReservedWord = QtWidgets.QWidget()
175
        self.tabReservedWord.setObjectName("tabReservedWord")
176
        self.gridLayout_24 = QtWidgets.QGridLayout(self.tabReservedWord)
179 177
        self.gridLayout_24.setObjectName("gridLayout_24")
180
        self.groupBox_9 = QtWidgets.QGroupBox(self.tab_3)
178
        self.groupBox_9 = QtWidgets.QGroupBox(self.tabReservedWord)
181 179
        self.groupBox_9.setObjectName("groupBox_9")
182 180
        self.gridLayout_23 = QtWidgets.QGridLayout(self.groupBox_9)
183 181
        self.gridLayout_23.setObjectName("gridLayout_23")
......
189 187
        self.tableWidgetReservedWords.verticalHeader().setVisible(False)
190 188
        self.gridLayout_23.addWidget(self.tableWidgetReservedWords, 0, 0, 1, 1)
191 189
        self.gridLayout_24.addWidget(self.groupBox_9, 0, 0, 1, 1)
192
        self.tabWidget.addTab(self.tab_3, "")
190
        self.tabWidget.addTab(self.tabReservedWord, "")
191
        self.tabDIctionary = QtWidgets.QWidget()
192
        self.tabDIctionary.setObjectName("tabDIctionary")
193
        self.gridLayout_25 = QtWidgets.QGridLayout(self.tabDIctionary)
194
        self.gridLayout_25.setObjectName("gridLayout_25")
195
        self.groupBox_10 = QtWidgets.QGroupBox(self.tabDIctionary)
196
        self.groupBox_10.setObjectName("groupBox_10")
197
        self.gridLayout_26 = QtWidgets.QGridLayout(self.groupBox_10)
198
        self.gridLayout_26.setObjectName("gridLayout_26")
199
        self.tableWidgetDictionary = QtWidgets.QTableWidget(self.groupBox_10)
200
        self.tableWidgetDictionary.setObjectName("tableWidgetDictionary")
201
        self.tableWidgetDictionary.setColumnCount(3)
202
        self.tableWidgetDictionary.setRowCount(0)
203
        item = QtWidgets.QTableWidgetItem()
204
        self.tableWidgetDictionary.setHorizontalHeaderItem(0, item)
205
        item = QtWidgets.QTableWidgetItem()
206
        self.tableWidgetDictionary.setHorizontalHeaderItem(1, item)
207
        item = QtWidgets.QTableWidgetItem()
208
        self.tableWidgetDictionary.setHorizontalHeaderItem(2, item)
209
        self.gridLayout_26.addWidget(self.tableWidgetDictionary, 0, 0, 1, 1)
210
        self.gridLayout_25.addWidget(self.groupBox_10, 0, 0, 1, 1)
211
        self.tabWidget.addTab(self.tabDIctionary, "")
193 212
        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
194 213
        self.buttonBox = QtWidgets.QDialogButtonBox(CodeTableDialog)
195 214
        self.buttonBox.setFocusPolicy(QtCore.Qt.TabFocus)
......
220 239
        self.groupBox_6.setTitle(_translate("CodeTableDialog", "Unit Number"))
221 240
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabUnitNumber), _translate("CodeTableDialog", "Unit Number"))
222 241
        self.groupBox_7.setTitle(_translate("CodeTableDialog", "Valve Oper Code"))
223
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("CodeTableDialog", "Valve Oper Codes"))
242
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabValveOperCodes), _translate("CodeTableDialog", "Valve Oper Codes"))
224 243
        self.groupBox_8.setTitle(_translate("CodeTableDialog", "Tag Name"))
225
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("CodeTableDialog", "Eqp Tag Names"))
244
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabEqpTagNames), _translate("CodeTableDialog", "Eqp Tag Names"))
226 245
        self.groupBox_9.setTitle(_translate("CodeTableDialog", "Reserved Word"))
227
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("CodeTableDialog", "Reserved Words"))
246
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabReservedWord), _translate("CodeTableDialog", "Reserved Words"))
247
        self.groupBox_10.setTitle(_translate("CodeTableDialog", "Dictionary"))
248
        item = self.tableWidgetDictionary.horizontalHeaderItem(0)
249
        item.setText(_translate("CodeTableDialog", "1"))
250
        item = self.tableWidgetDictionary.horizontalHeaderItem(1)
251
        item.setText(_translate("CodeTableDialog", "2"))
252
        item = self.tableWidgetDictionary.horizontalHeaderItem(2)
253
        item.setText(_translate("CodeTableDialog", "3"))
254
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabDIctionary), _translate("CodeTableDialog", "Dictionary"))
255

  
228 256
import MainWindow_rc
257

  
258
if __name__ == "__main__":
259
    import sys
260
    app = QtWidgets.QApplication(sys.argv)
261
    CodeTableDialog = QtWidgets.QDialog()
262
    ui = Ui_CodeTableDialog()
263
    ui.setupUi(CodeTableDialog)
264
    CodeTableDialog.show()
265
    sys.exit(app.exec_())
266

  
DTI_PID/DTI_PID/Scripts/MSSQL/ID2.sql
1948 1948
    Description TEXT,
1949 1949
    Allowables  TEXT
1950 1950
);
1951

  
1952
CREATE TABLE Dictionary (
1953
    UID         VARCHAR (37) CONSTRAINT Dictionary_PK PRIMARY KEY
1954
                             NOT NULL,
1955
    Code        VARCHAR (32) NOT NULL
1956
                             UNIQUE,
1957
    Description TEXT,
1958
    Allowables  TEXT
1959
);
DTI_PID/DTI_PID/Scripts/SQLite_Project.tables.sql
1
CREATE TABLE IF NOT EXISTS `Dictionary` ( 
2
	`UID` varchar (37) NOT NULL,
3
	`Code` varchar (32) NOT NULL UNIQUE,
4
	`Description` TEXT,
5
	`Allowables` TEXT, PRIMARY KEY(`UID`)
6
);
DTI_PID/DTI_PID/TextItemFactory.py
48 48
            text = textInfo.getText()
49 49
            docData = AppDocData.instance()
50 50

  
51
            '''
51 52
            """ create normal text item if it is not in drawing area """
52 53
            area = docData.getArea('Drawing')
53 54
            if area is None or not area.contains([textInfo.getX(), textInfo.getY()]):
54 55
                item = QEngineeringTextItem()
55 56
                item.setToolTip(text)
56 57
                item.setPlainText(text)
58
            '''
57 59

  
58 60
            configs = docData.getConfigs('Size', 'Delimiter')
59 61
            sizeDelimiter = configs[0].value.upper() if 1 == len(configs) else None
......
133 135
                    item.setToolTip('Valve Operation Code = {}'.format(text))
134 136
                    item.setPlainText(text)
135 137
                else:
138
                    text = self.fix_dictionary_word(text)
136 139
                    item = QEngineeringTextItem()
137 140
                    item.setToolTip(text)
138 141
                    item.setPlainText(text)
......
350 353

  
351 354
        return True if found else False
352 355

  
356
    def fix_dictionary_word(self, text):
357
        """ fix if given text is in dictionary """
358
        from CodeTables import CodeTable
359

  
360
        found = CodeTable.instance('Dictionary').find_match_exactly(text)
361

  
362
        return found if found else text
363

  
353 364
    def is_reserved_word(self, text):
354 365
        """ check if given text is reserved words """
355 366
        from CodeTables import CodeTable
DTI_PID/DTI_PID/TrainingSymbolEditorDialog.py
237 237
            return
238 238

  
239 239
        label = self.ui.lineEditChar.text()
240
        if label != '' and label != 'None':
240
        if label == '' or label == 'None':
241 241
            return
242 242

  
243 243
        items[0].char = label
......
308 308
        xml.append(segmentedNode)
309 309

  
310 310
        labelContent = []
311
        counts = {}
311 312
        for item in items:
312 313
            if type(item) is QTrainingBoxItem:
313 314
                rect = item.rect()
314 315
                label, xMin, yMin, xMax, yMax = item.char, int(rect.x()), int(rect.y()), int(rect.x()) + int(rect.width()), int(rect.y()) + int(rect.height())
315 316

  
317
                if label == 'None' or label == '':
318
                    continue
316 319
                if label not in labelContent:
317 320
                    labelContent.append(label)
321
                    counts[label] = 1
322
                else:
323
                    counts[label] = counts[label] + 1
318 324

  
319 325
                objectNode = Element('object')
320 326
                nameNode = Element('name')
......
352 358
        modifiedTime = str(datetime.datetime.strptime(time.ctime(os.path.getmtime(self.trainingLabelPath)), "%a %b %d %H:%M:%S %Y"))
353 359
        self.dateItem.setText(modifiedTime)
354 360

  
355
        labels = ','.join(labelContent)
361
        labelCount = [label + ':' + str(counts[label]) for label in labelContent]
362
        labels = ','.join(labelCount)
356 363
        self.boxItem.setText(labels)
357 364

  
358 365
        self.isChanged = False
......
459 466
                self.ui.spinBoxWidth.setValue(self.ui.spinBoxWidth.value() + 1)
460 467
            elif event.key() == Qt.Key_Down:
461 468
                self.ui.spinBoxWidth.setValue(self.ui.spinBoxWidth.value() - 1)
462
            elif event.key() == Qt.Key_Return:
463
                pass
469
            elif event.key() == Qt.Key_Return and not self.ui.lineEditChar.hasFocus():
470
                if self.ui.tableWidget.selectedItems():
471
                    self.isChanged = True
472
                    self.onCharChanged(self.ui.tableWidget.selectedItems()[0].text())                    
464 473
        except Exception as ex:
465 474
            print('error occurred({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
466 475
            from App import App
DTI_PID/DTI_PID/TrainingSymbolImageListDialog.py
70 70
        self.ui.lineEditTargetLabel.setEnabled(True)
71 71
        self.ui.lineEditTargetLabel.setHidden(False)
72 72

  
73
        appDocData = AppDocData.instance()
74
        project = appDocData.getCurrentProject()
75
        dataList = appDocData.getTrainingSymbolFileList()
76

  
77 73
        # for reset chart
78
        self.labelList = []
79
        for labelCounts in self.labelList:
80
            labelCount = [labelCounts[0], labelCounts[1]]
81
            self.labelList.append(labelCount)
82
        for data in dataList:
83
            if data.find('.xml') is not -1:
84
                labelPath = os.path.join(project.getTrainingSymbolFilePath(), data)
85
                xml = parse(labelPath)
86
                root = xml.getroot()
87
                objects = list(root.iter('object'))
88
                for object_node in objects:
89
                    name = object_node.find('name').text
90
                    matches = [_label for _label in self.labelList if _label[0] == name]
91
                    if matches:
92
                        matches[0][1] = matches[0][1] + 1
93
                    else:
94
                        self.labelList.append([name, 1])
95 74
        self.makeChart()
96 75

  
97 76
    '''
......
131 110
                        self.ui.tableWidgetList.setItem(row, 2, QTableWidgetItem(modifiedTime))
132 111

  
133 112
                        labels = []
113
                        counts = {}
134 114
                        xml = parse(labelPath)
135 115
                        root = xml.getroot()
136 116
                        objects = list(root.iter('object'))
......
138 118
                            name = object_node.find('name').text
139 119
                            if name not in labels:
140 120
                                labels.append(name)
141
                        labelContent = QTableWidgetItem(','.join(labels))
121
                                counts[name] = 1
122
                            else:
123
                                counts[name] = counts[name] + 1
124
                        labelCount = [label + ':' + str(counts[label]) for label in labels]
125
                        labelContent = QTableWidgetItem(','.join(labelCount))
142 126
                        labelContent.setFont(QFont('Consolas', 9, QFont.Bold))
143 127
                        self.ui.tableWidgetList.setItem(row, 3, QTableWidgetItem(labelContent))
144 128
                        break
......
174 158
                    os.remove(labelName)
175 159
                self.ui.tableWidgetList.item(row, 2).setText('')
176 160
                self.ui.tableWidgetList.item(row, 3).setText('')
177
                #self.listUpdate()
161
                self.listUpdate()
178 162
        except Exception as ex:
179 163
            from App import App 
180 164
            from AppDocData import MessageType
......
207 191
                if os.path.isfile(labelName):
208 192
                    os.remove(labelName)
209 193
                self.ui.tableWidgetList.removeRow(row)
210
                #self.listUpdate()
194
                self.listUpdate()
211 195
        except Exception as ex:
212 196
            from App import App 
213 197
            from AppDocData import MessageType
......
316 300
            @date       2018.11.19
317 301
        '''
318 302
        try:
303
            appDocData = AppDocData.instance()
304
            project = appDocData.getCurrentProject()
305
            dataList = appDocData.getTrainingSymbolFileList()
306

  
307
            self.labelList = []
308
            for labelCounts in self.labelList:
309
                labelCount = [labelCounts[0], labelCounts[1]]
310
                self.labelList.append(labelCount)
311
            for data in dataList:
312
                if data.find('.xml') is not -1:
313
                    labelPath = os.path.join(project.getTrainingSymbolFilePath(), data)
314
                    xml = parse(labelPath)
315
                    root = xml.getroot()
316
                    objects = list(root.iter('object'))
317
                    for object_node in objects:
318
                        name = object_node.find('name').text
319
                        matches = [_label for _label in self.labelList if _label[0] == name]
320
                        if matches:
321
                            matches[0][1] = matches[0][1] + 1
322
                        else:
323
                            self.labelList.append([name, 1])
324

  
319 325
            barList = []
320 326
            categories = []
321 327
            for char in self.labelList:
......
412 418
        try:
413 419
            dialog = QTrainingSymbolEditorDialog(self, drawingPath, traininglabelPath, boundarySymbolData, self.ui.tableWidgetList.item(row, 2), self.ui.tableWidgetList.item(row, 3))
414 420
            dialog.exec_()
421
            self.makeChart()
415 422
        except Exception as ex:
416 423
            from App import App
417 424
            from AppDocData import MessageType
DTI_PID/DTI_PID/UI/CodeTable.ui
236 236
       </item>
237 237
      </layout>
238 238
     </widget>
239
     <widget class="QWidget" name="tab">
239
     <widget class="QWidget" name="tabValveOperCodes">
240 240
      <attribute name="title">
241 241
       <string>Valve Oper Codes</string>
242 242
      </attribute>
......
265 265
       </item>
266 266
      </layout>
267 267
     </widget>
268
     <widget class="QWidget" name="tab_2">
268
     <widget class="QWidget" name="tabEqpTagNames">
269 269
      <attribute name="title">
270 270
       <string>Eqp Tag Names</string>
271 271
      </attribute>
......
294 294
       </item>
295 295
      </layout>
296 296
     </widget>
297
     <widget class="QWidget" name="tab_3">
297
     <widget class="QWidget" name="tabReservedWord">
298 298
      <attribute name="title">
299 299
       <string>Reserved Words</string>
300 300
      </attribute>
......
327 327
       </item>
328 328
      </layout>
329 329
     </widget>
330
     <widget class="QWidget" name="tabDIctionary">
331
      <attribute name="title">
332
       <string>Dictionary</string>
333
      </attribute>
334
      <layout class="QGridLayout" name="gridLayout_25">
335
       <item row="0" column="0">
336
        <widget class="QGroupBox" name="groupBox_10">
337
         <property name="title">
338
          <string>Dictionary</string>
339
         </property>
340
         <layout class="QGridLayout" name="gridLayout_26">
341
          <item row="0" column="0">
342
           <widget class="QTableWidget" name="tableWidgetDictionary">
343
            <column>
344
             <property name="text">
345
              <string>1</string>
346
             </property>
347
            </column>
348
            <column>
349
             <property name="text">
350
              <string>2</string>
351
             </property>
352
            </column>
353
            <column>
354
             <property name="text">
355
              <string>3</string>
356
             </property>
357
            </column>
358
           </widget>
359
          </item>
360
         </layout>
361
        </widget>
362
       </item>
363
      </layout>
364
     </widget>
330 365
    </widget>
331 366
   </item>
332 367
   <item row="1" column="0">
ID2.wxs
595 595
          <Component Id="cmp9328CFFA10A72DCA6244A094882E743E" Directory="dir33A2F09B010813323099475AA1D7838F" Guid="AC86719D-15F2-4601-92DC-9B3E47BD5E99" Win64='yes'>
596 596
              <File Id="filB15D33FCA16268EADB7561290B6A042A" KeyPath="yes" Source=".\dist\App\Scripts\App.Configuration.sql" />
597 597
          </Component>
598
          <Component Id="cmp6D9CB04DA9E84CA5977C5A83C0B48674" Directory="dir33A2F09B010813323099475AA1D7838F" Guid="0E6C41F5-6BF1-4CD0-AD81-915EC9843E77" Win64='yes'>
599
              <File Id="filDB325694A01D417D8396804B50B0D978" KeyPath="yes" Source=".\dist\App\Scripts\SQLite_Project.tables.sql" />
600
          </Component>
598 601
          <Component Id="cmp6232EB62D3B54FC2A5CBD4347BDA0E5B" Directory="dir33A2F09B010813323099475AA1D7838F" Guid="2AE1098A-DB3D-444B-9290-6C6C2C2D67DD" Win64='yes'>
599 602
              <File Id="filB2A004E58F2B490EB6B6A46CDDCB385F" KeyPath="yes" Source=".\dist\App\Scripts\Project.Projects.sql" />
600 603
          </Component>

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)