프로젝트

일반

사용자정보

개정판 f730f5c4

IDf730f5c48c89cb403f19785b57af21ed74ca1aa1
상위 f93e6d5e
하위 48dae955

백흠경이(가) 약 5년 전에 추가함

issue #1437: 복사/붙여넣기

Change-Id: Ie5e540f941709824420f8bbddd95b57be7c693a8

차이점 보기:

HYTOS/HYTOS/QtImageViewer.py
512 512

  
513 513
            scenePos = self.mapToScene(event.pos())
514 514
            uid = event.mimeData().text()
515
            svg = self.createSymbolObject(uid)
515
            svg = self.scene.createSymbolObject(uid)
516 516
            if svg:
517
                self.place_symbol(svg, scenePos)
517
                self.scene.place_symbol(svg, scenePos)
518 518

  
519 519
            event.acceptProposedAction()
520 520
        except Exception as ex:
......
526 526
            App.mainWnd().addMessage.emit(MessageType.Error, message)
527 527

  
528 528
    '''
529
        @brief  drop create Symbol
530
        @author kyouho
531
        @date   2018.07.27
532
    '''
533
    def createSymbolObject(self, uid):
534
        from AppDocData import AppDocData
535
        import symbol
536
        
537
        app_doc_data = AppDocData.instance()
538
        symbol = app_doc_data.getSymbolByQuery('uid', uid)
539
        svgFileName = symbol.sName
540
        svgType = symbol.sType
541
        svgAngle = 0
542
        svgScale = 1
543
        svgOrigin = symbol.originalPoint
544
        svgFilePath = os.path.join(app_doc_data.symbol_file_path, symbol.getCategory(), symbol.getType(), svgFileName + '.svg')
545
        svg = SymbolSvgItem.createItem(symbol.getType(), None, owner=None, flip=0, symbol=uid)
546
        connPts = None
547
        strConnPts = symbol.connectionPoint
548
        if strConnPts is not None and strConnPts != '':
549
            connPts = [(float(x.split(',')[0]), float(x.split(',')[1])) if len(x.split(',')) == 2 else (x.split(',')[0], float(x.split(',')[1]), float(x.split(',')[2])) \
550
            for x in strConnPts.split('/')]
551

  
552
        svg.buildItem(svgFileName, svgType, svgAngle, svgScale, None, svgOrigin, connPts, uid)
553
        
554
        return svg
555

  
556
    '''
557
        @brief      match symbol to line
558
        @author     kyouho
559
        @date       2018.07.27
560
        @history    humkyung 2018.08.23 change scenePos to connector's center when symbol is placed on connector
561
    '''
562

  
563
    def place_symbol(self, svg, scenePos):
564
        from EngineeringConnectorItem import QEngineeringConnectorItem
565
        from CreateCommand import CreateCommand
566

  
567
        items = [item for item in self.scene.items(scenePos) if type(item) is not QGraphicsPixmapItem]
568
        if len(items) > 0 and type(items[0]) is QEngineeringConnectorItem:
569
            scenePos = QPointF(items[0].center()[0], items[0].center()[1])
570

  
571
        transform = QTransform()
572
        transform.translate(scenePos.x() - svg.symbolOrigin[0], scenePos.y() - svg.symbolOrigin[1])
573
        svg.setTransform(transform)
574
        svg.loc = [round(scenePos.x() - svg.symbolOrigin[0], 1), round(scenePos.y() - svg.symbolOrigin[1], 1)]
575
        svg.size = [svg.boundingRect().width(), svg.boundingRect().height()]
576
        svg.origin = [round(scenePos.x(), 1), round(scenePos.y(), 1)]
577
        self.scene.addItem(svg)
578

  
579
        self.scene.undo_stack.push(CreateCommand(self.scene, [svg, ]))
580

  
581
        svg.transfer.onRemoved.connect(self.mainWindow.on_item_removed)
582

  
583
        self.scene.clearFocus()
584
        for item in self.scene.selectedItems():
585
            item.setSelected(False)
586

  
587
    '''
588 529
        @brief  find item by uid (SymbolSvgItem 기반, QEngineeringConnectorItem 제외, QEngineeringLineItem 포함)
589 530
        @author kyouho
590 531
        @date   2018.07.31
HYTOS/HYTOS/QtImageViewerScene.py
42 42
        QGraphicsScene.removeItem(self, item)
43 43
        self.contents_changed.emit()
44 44

  
45
    def to_xml(self, selectItems):
46
        from xml.etree import ElementTree
47
        from AppDocData import AppDocData
48
        from SymbolBase import SymbolBase
49
        from SymbolSvgItem import SymbolSvgItem
50

  
51
        import uuid
52
        app_doc_data = AppDocData.instance()
53
        root = ElementTree.Element("DATA")
54
        for selectItem in selectItems:
55
            if issubclass(type(selectItem), SymbolSvgItem):
56
                parent = ElementTree.Element("SYMBOL")
57
                root.append(parent)
58
                symboTemplate = app_doc_data.getTemplateSymbol(selectItem.dbUid)
59
                symbolBase = SymbolBase(selectItem.uid,
60
                                        selectItem.name,
61
                                        selectItem.category,
62
                                        selectItem.type,
63
                                        symboTemplate[0][2],
64
                                        symboTemplate[0][3])
65

  
66
                uidElement = ElementTree.SubElement(parent, "uid")
67
                uidElement.text = str(symbolBase.uid)
68

  
69
                dbUidElement = ElementTree.SubElement(parent, "dbUid")
70
                dbUidElement.text = str(selectItem.dbUid)
71

  
72
                nameElement = ElementTree.SubElement(parent, "name")
73
                nameElement.text = str(symbolBase.sName)
74

  
75
                categoryElement = ElementTree.SubElement(parent, "category")
76
                categoryElement.text = str(symbolBase.sCategory)
77

  
78
                typeElement = ElementTree.SubElement(parent, "type")
79
                typeElement.text = str(symbolBase.sType)
80

  
81
                scaleElement = ElementTree.SubElement(parent, "scale")
82
                scaleElement.text = str(selectItem._scale)
83

  
84
                angleElement = ElementTree.SubElement(parent, "angle")
85
                angleElement.text = str(selectItem.angle)
86

  
87
                originalPointElement = ElementTree.SubElement(parent, "originalPoint")
88
                originalPointElement.text = str(symbolBase.originalPoint)
89

  
90
                connectionPointElement = ElementTree.SubElement(parent, "connectionPoint")
91
                connectionPointElement.text = str(symbolBase.connectionPoint)
92

  
93
        tree = ElementTree.ElementTree(root)
94

  
95
        tree.write("filename.xml", xml_declaration=True, encoding='utf-8')
96

  
97
        return root
98

  
45 99
    def keyPressEvent(self, event):
46 100
        """delete selected items when press delete key"""
47 101
        from SymbolSvgItem import SymbolSvgItem
......
56 110
                        (issubclass(type(item), QGraphicsPathItem))]
57 111

  
58 112
            self._undo_stack.push(DeleteCommand(self, selected))
113
        elif event.key() == Qt.Key_C and event.modifiers() & Qt.ControlModifier:
114
            from xml.etree import ElementTree
115
            selected = self.to_xml([item for item in self.selectedItems()
116
                                           if issubclass(type(item), SymbolSvgItem)])
117
            if selected:
118
                xmlStr = str(ElementTree.tostring(selected, encoding='utf-8', method='xml'))
119
                xmlStr = xmlStr[xmlStr.find('<DATA>'):xmlStr.find('</DATA>') + 7]
120
                QApplication.clipboard().setText(xmlStr)
121
        elif event.key() == Qt.Key_V and event.modifiers() & Qt.ControlModifier:
122
            clipBoardText = QApplication.clipboard().text()
123
            if clipBoardText.find('<DATA>') > -1 and clipBoardText.find('</DATA>') > -1:
124
                from xml.etree import ElementTree
125
                from SymbolBase import SymbolBase
126
                elementXml = ElementTree.fromstring(clipBoardText)
127
                for elementSymbol in elementXml.findall('SYMBOL'):
128

  
129
                    symbolUID = str(elementSymbol.find('uid').text)
130
                    symboldbUid = str(elementSymbol.find('dbUid').text)
131
                    symbolType = str(elementSymbol.find('type').text)
132
                    symbolName = str(elementSymbol.find('name').text)
133
                    symbolCategory = str(elementSymbol.find('category').text)
134
                    angle = str(elementSymbol.find('angle').text)
135
                    scale = str(elementSymbol.find('scale').text)
136
                    symbolOriginalPoint = str(elementSymbol.find('originalPoint').text)
137
                    symbolConnectionPoint = str(elementSymbol.find('connectionPoint').text)
138
                    symbol = SymbolBase(symboldbUid, symbolName, symbolCategory, symbolType, symbolOriginalPoint,
139
                                        symbolConnectionPoint)
140

  
141
                    svg = self.createSymbolObject(symboldbUid, scale, angle)
142
                    if svg:
143
                        pt = self.views()[0].mapFromGlobal(QCursor.pos())
144
                        pt = self.views()[0].mapToScene(pt)
145
                        self.place_symbol(svg, pt)
59 146
        elif event.key() == Qt.Key_Z and event.modifiers() & Qt.ControlModifier:
60 147
            self._undo_stack.undo()
61 148
        elif event.key() == Qt.Key_R and event.modifiers() & Qt.ControlModifier:
......
82 169
        self._pressed_position = None
83 170
        super(QtImageViewerScene, self).mouseReleaseEvent(event)
84 171

  
172
    '''
173
            @brief  drop create Symbol
174
            @author kyouho
175
            @date   2018.07.27
176
        '''
177

  
178
    def createSymbolObject(self, uid, scale, angle):
179
        from AppDocData import AppDocData
180
        from SymbolSvgItem import SymbolSvgItem
181
        import symbol
182

  
183
        app_doc_data = AppDocData.instance()
184
        symbol = app_doc_data.getSymbolByQuery('uid', uid)
185
        svgFileName = symbol.sName
186
        svgType = symbol.sType
187
        svgAngle = 0
188
        svgScale = 1
189
        svgOrigin = symbol.originalPoint
190
        svgFilePath = os.path.join(app_doc_data.symbol_file_path, symbol.getCategory(), symbol.getType(),
191
                                   svgFileName + '.svg')
192
        svg = SymbolSvgItem.createItem(symbol.getType(), None, owner=None, flip=0, symbol=uid)
193
        connPts = None
194
        strConnPts = symbol.connectionPoint
195
        if strConnPts is not None and strConnPts != '':
196
            connPts = [(float(x.split(',')[0]), float(x.split(',')[1])) if len(x.split(',')) == 2 else (
197
            x.split(',')[0], float(x.split(',')[1]), float(x.split(',')[2])) \
198
                       for x in strConnPts.split('/')]
199

  
200
        svg.buildItem(svgFileName, svgType, svgAngle, svgScale, None, svgOrigin, connPts, uid)
201

  
202
        return svg
203

  
204
    '''
205
            @brief      match symbol to line
206
            @author     kyouho
207
            @date       2018.07.27
208
            @history    humkyung 2018.08.23 change scenePos to connector's center when symbol is placed on connector
209
        '''
210

  
211
    def place_symbol(self, svg, scenePos):
212
        from EngineeringConnectorItem import QEngineeringConnectorItem
213
        from CreateCommand import CreateCommand
214

  
215
        items = [item for item in self.items(scenePos) if type(item) is not QGraphicsPixmapItem]
216
        if len(items) > 0 and type(items[0]) is QEngineeringConnectorItem:
217
            scenePos = QPointF(items[0].center()[0], items[0].center()[1])
218

  
219
        transform = QTransform()
220
        transform.translate(scenePos.x() - svg.symbolOrigin[0], scenePos.y() - svg.symbolOrigin[1])
221
        svg.setTransform(transform)
222
        svg.loc = [round(scenePos.x() - svg.symbolOrigin[0], 1), round(scenePos.y() - svg.symbolOrigin[1], 1)]
223
        svg.size = [svg.boundingRect().width(), svg.boundingRect().height()]
224
        svg.origin = [round(scenePos.x(), 1), round(scenePos.y(), 1)]
225
        self.addItem(svg)
226

  
227
        self.undo_stack.push(CreateCommand(self, [svg, ]))
228

  
229
        svg.transfer.onRemoved.connect(self.parent().on_item_removed)
230

  
231
        self.clearFocus()
232
        for item in self.selectedItems():
233
            item.setSelected(False)
234

  
85 235
    """
86 236
    def rectForTile(self, x, y):
87 237
        # Return the rectangle for the tile at position (x, y).

내보내기 Unified diff

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