Browse Source

grid viewer : add zoom and coordinates labels

olinox 9 years ago
parent
commit
cd605bcf5b

+ 1 - 1
tests/geometry/test_line.py

@@ -29,7 +29,7 @@ class Test(unittest.TestCase):
  
         line = gline.line2d(grid_shape, 3,0,3,3)
         self.assertEqual(line, [(3,0), (3,1), (3,2), (3,3)] )
- 
+        
         
     def test_squ_line(self):
         """ 2d line on square grid """

+ 17 - 2
tests/gridviewer/GridViewer.py

@@ -23,7 +23,6 @@ class GridViewer(QMainWindow):
 
     def __init__(self):
         super (GridViewer, self).__init__()
-        
         self.cells = {}
         self.selection = []
         self.createWidgets()
@@ -34,7 +33,7 @@ class GridViewer(QMainWindow):
         
         self._scene = QGraphicsScene()
         self.ui.view.setScene(self._scene)
-        self.ui.view.scale(0.25, 0.25)
+        self.ui.view.scale(0.5, 0.5)
         self.ui.view.centerOn(QPointF(0,0))
         self.ui.view.setDragMode(QGraphicsView.NoDrag)
         
@@ -43,6 +42,10 @@ class GridViewer(QMainWindow):
         self.ui.btn_make.clicked.connect(self.make_grid)
         self.ui.btn_updateSelection.clicked.connect(self.update_selected_cells)
         self.ui.btn_toClipboard.clicked.connect(self.to_clipboard)
+        self.ui.btn_zoom_plus.clicked.connect(self.zoom_plus)
+        self.ui.btn_zoom_minus.clicked.connect(self.zoom_minus)
+        
+        self.ui.chk_displayCoords.toggled.connect(self.update_cell_labels)
         
         self.make_grid()
         
@@ -100,6 +103,18 @@ class GridViewer(QMainWindow):
         app.clipboard().setMimeData(data)
 
 
+    def update_cell_labels(self):
+        for cell in self.cells.values():
+            cell.show_label( bool(self.ui.chk_displayCoords.isChecked()) )
+
+    def zoom_plus(self):
+        self.ui.view.scale(1.1, 1.1)
+
+    def zoom_minus(self):
+        self.ui.view.scale(0.9, 0.9)
+
+
+
 if __name__ == "__main__":
     
     app = QApplication(sys.argv)

+ 25 - 6
tests/gridviewer/GridViewerCell.py

@@ -4,9 +4,11 @@ Created on 26 nov. 2016
 @author: olinox
 '''
 from PyQt5.QtCore import QPointF, pyqtSignal, QObject
-from PyQt5.QtGui import QPolygonF, QPen, QBrush, QColor
-from PyQt5.QtWidgets import QGraphicsPolygonItem, QGraphicsItem
+from PyQt5.QtGui import QPolygonF, QPen, QBrush, QColor, QFont
+from PyQt5.QtWidgets import QGraphicsPolygonItem, QGraphicsItem, \
+    QGraphicsSimpleTextItem
 
+from core import geometry
 from core.graphic.cells import polygon
 
 
@@ -19,10 +21,9 @@ class GridViewerCell(QGraphicsPolygonItem):
         self.y = y
         self.selected = False
         
-    def generate(self, shape):
-        
-        points = [QPointF(xp, yp) for xp, yp in polygon(shape, self.x, self.y)]
+    def generate(self, shape, scale=120):
         
+        points = [QPointF(xp, yp) for xp, yp in polygon(shape, self.x, self.y, scale)]
         qpolygon = QPolygonF( points )
         
         self.setPolygon(qpolygon)
@@ -33,6 +34,20 @@ class GridViewerCell(QGraphicsPolygonItem):
         
         self.setFlag(QGraphicsItem.ItemIsFocusable)   
         
+        self.label = QGraphicsSimpleTextItem("{}-{}".format(self.x, self.y), parent=self)
+        k = 0
+        if (self.x % 2) != 0: 
+            k = 0.5
+            
+        if shape == geometry.HEX:
+            self.label.setPos(QPointF(((self.x*0.866)+0.2886)*scale,  (self.y+k+0.5)*scale))
+        else:
+            self.label.setPos(QPointF(self.x*scale,  self.y*scale))
+        
+        font = QFont()
+        font.setPointSize(20)
+        self.label.setFont( font )
+        
     def select(self):
         self.setBrush( QBrush( QColor(200,0,0, 100) ) )
         self.selected = True
@@ -49,4 +64,8 @@ class GridViewerCell(QGraphicsPolygonItem):
             self.unselect()
         else:
             self.select()
-             
+    
+    def show_label(self, visible):
+        self.label.setVisible(visible)
+        
+    

+ 25 - 2
tests/gridviewer/main.py

@@ -81,6 +81,25 @@ class Ui_window(object):
         self.btn_make.setObjectName("btn_make")
         self.horizontalLayout_2.addWidget(self.btn_make)
         self.verticalLayout.addLayout(self.horizontalLayout_2)
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1)
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.label_3 = QtWidgets.QLabel(self.centralwidget)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout_4.addWidget(self.label_3)
+        self.btn_zoom_plus = QtWidgets.QToolButton(self.centralwidget)
+        self.btn_zoom_plus.setObjectName("btn_zoom_plus")
+        self.horizontalLayout_4.addWidget(self.btn_zoom_plus)
+        self.btn_zoom_minus = QtWidgets.QToolButton(self.centralwidget)
+        self.btn_zoom_minus.setObjectName("btn_zoom_minus")
+        self.horizontalLayout_4.addWidget(self.btn_zoom_minus)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_4.addItem(spacerItem)
+        self.chk_displayCoords = QtWidgets.QCheckBox(self.centralwidget)
+        self.chk_displayCoords.setChecked(True)
+        self.chk_displayCoords.setObjectName("chk_displayCoords")
+        self.horizontalLayout_4.addWidget(self.chk_displayCoords)
+        self.verticalLayout.addLayout(self.horizontalLayout_4)
         self.horizontalLayout.addLayout(self.verticalLayout)
         self.verticalLayout_2 = QtWidgets.QVBoxLayout()
         self.verticalLayout_2.setContentsMargins(0, -1, -1, -1)
@@ -93,8 +112,8 @@ class Ui_window(object):
         self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
         self.horizontalLayout_3.setContentsMargins(-1, 10, -1, -1)
         self.horizontalLayout_3.setObjectName("horizontalLayout_3")
-        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout_3.addItem(spacerItem)
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_3.addItem(spacerItem1)
         self.btn_updateSelection = QtWidgets.QToolButton(self.centralwidget)
         self.btn_updateSelection.setMinimumSize(QtCore.QSize(132, 35))
         self.btn_updateSelection.setMaximumSize(QtCore.QSize(132, 1000))
@@ -135,6 +154,10 @@ class Ui_window(object):
         self.opt_square.setText(_translate("window", "Square grid"))
         self.label_2.setText(_translate("window", "X"))
         self.btn_make.setText(_translate("window", ">>"))
+        self.label_3.setText(_translate("window", "Zoom"))
+        self.btn_zoom_plus.setText(_translate("window", "+"))
+        self.btn_zoom_minus.setText(_translate("window", "-"))
+        self.chk_displayCoords.setText(_translate("window", "Display coordinates"))
         self.btn_updateSelection.setText(_translate("window", "Update selection"))
         self.btn_toClipboard.setText(_translate("window", "To clipboard"))
         self.menuFichier.setTitle(_translate("window", "Fichier"))

+ 51 - 0
tests/gridviewer/main.ui

@@ -209,6 +209,57 @@
         </item>
        </layout>
       </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QLabel" name="label_3">
+          <property name="text">
+           <string>Zoom</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QToolButton" name="btn_zoom_plus">
+          <property name="text">
+           <string>+</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QToolButton" name="btn_zoom_minus">
+          <property name="text">
+           <string>-</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="chk_displayCoords">
+          <property name="text">
+           <string>Display coordinates</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
      </layout>
     </item>
     <item>