Merge remote-tracking branch 'origin/dev-eagle'

This commit is contained in:
copper 2022-05-31 13:04:48 +08:00
commit 7efba2619a
4 changed files with 111 additions and 9 deletions

89
rscder/gui/eagle_eye.py Normal file
View File

@ -0,0 +1,89 @@
from PyQt5.QtCore import QSettings, QUrl, pyqtSignal, Qt, QVariant
from PyQt5.QtWidgets import QMessageBox, QWidget, QHBoxLayout
from PyQt5.QtGui import QColor, QDragEnterEvent, QDropEvent
from qgis.core import QgsGeometry, QgsRectangle
from qgis.gui import QgsMapCanvas,QgsRubberBand,QgsMapToolEmitPoint
from qgis.core import QgsRectangle,QgsPoint
from rscder.utils.project import BasicLayer, PairLayer, Project
class RectangleMapTool(QgsMapToolEmitPoint):
def __init__(self, canvas,color,witdth):
self.canvas = canvas
QgsMapToolEmitPoint.__init__(self, self.canvas)
self.rubberBand = QgsRubberBand(self.canvas, True)
self.rubberBand.setColor(color)
self.rubberBand.setWidth(witdth)
self.reset()
self.Extent=0
def reset(self):
self.startPoint = self.endPoint = None
self.isEmittingPoint = False
self.rubberBand.reset(True)
def draw_extent(self,extent):
point1 = QgsPoint(extent.xMinimum(), extent.yMinimum())
point2 = QgsPoint(extent.xMaximum(), extent.yMinimum())
point3 = QgsPoint(extent.xMaximum(), extent.yMaximum())
point4 = QgsPoint(extent.xMinimum(), extent.yMaximum())
points=[point1,point2,point3,point4,point1]
self.rubberBand.setToGeometry(QgsGeometry.fromPolyline(points), None)
self.rubberBand.show()
class eagleEye(QgsMapCanvas):
extent=pyqtSignal(object)
def __init__(self, parent):
super().__init__(parent)
self.layers = []
self.grid_layers = []
self.is_main = False
self.setCanvasColor(Qt.white)
self.enableAntiAliasing(True)
self.setAcceptDrops(False)
self.Extent=0
self.changing=False
self.rubber=RectangleMapTool(self,Qt.yellow,1)
def update_layer(self):
layers = Project().layers
layer_list_1 = []
for layer in layers.values():
if layer.enable:
for sub_layer in layer.layers:
if sub_layer.enable:
if sub_layer.view_mode == BasicLayer.LEFT_VIEW:
layer_list_1.append(sub_layer.layer)
elif sub_layer.view_mode == BasicLayer.BOATH_VIEW:
layer_list_1.append(sub_layer.layer)
self.setLayers(layer_list_1)
self.zoomToFeatureExtent(layer_list_1[0].extent())
def draw_extent(self,extent):
self.Extent=extent
self.rubber.draw_extent(self.Extent)
def reset_extent(self,center):
if not self.Extent:
return
center=self.rubber.toMapCoordinates(center)
x=(self.Extent.xMaximum()-self.Extent.xMinimum())//2
y=(self.Extent.yMaximum()-self.Extent.yMinimum())//2
self.Extent=QgsRectangle(center.x()-x,center.y()-y,center.x()+x,center.y()+y)
self.draw_extent(self.Extent)
def mousePressEvent(self,e):
if not self.Extent:
return
self.changing=True
self.reset_extent(e.pos())
self.extent.emit(self.Extent)
def mouseMoveEvent(self,e):
if self.changing:
self.reset_extent(e.pos())
self.extent.emit(self.Extent)
def mouseReleaseEvent(self,e):
self.changing=False
def wheelEvent(self,e):
pass

View File

@ -1,5 +1,5 @@
import pdb
from PyQt5.QtWidgets import QWidget, QApplication, QMainWindow, QToolBox
from PyQt5.QtWidgets import QWidget, QApplication, QMainWindow, QToolBox,QVBoxLayout
from PyQt5.QtCore import Qt, QSize, QSettings, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5 import QtGui
@ -14,7 +14,7 @@ from rscder.utils import Settings
from rscder.utils.icons import IconInstance
from rscder.utils.project import Project
from rscder.gui.layercombox import LayerCombox
from rscder.gui.eagle_eye import eagleEye
import skimage
import numpy as np
import sys
@ -37,7 +37,9 @@ class MainWindow(QMainWindow):
self.double_map,
self.layer_tree,
self.message_box,
self.result_box)
self.result_box,
self.eye
)
self.result_box.on_item_click.connect(self.double_map.zoom_to_extent)
@ -92,6 +94,11 @@ class MainWindow(QMainWindow):
self.follow_box = QWidget(self)
self.eye_box = QWidget(self)
self.eye=eagleEye(self)
self.double_map.extent.connect(self.eye.draw_extent)
eyeLayout=QVBoxLayout()
eyeLayout.addWidget(self.eye,Qt.AlignCenter)
self.eye_box.setLayout(eyeLayout)
left_tool_box.setContextMenuPolicy(Qt.CustomContextMenu)
left_tool_box.addItem(self.layer_tree, self.tr("图层控制"))
left_tool_box.addItem(self.follow_box, self.tr("检测流程"))

View File

@ -25,7 +25,7 @@ from rscder.utils.project import BasicLayer, PairLayer, Project
class DoubleCanvas(QWidget):
corr_changed = pyqtSignal(str)
scale_changed = pyqtSignal(str)
extent=pyqtSignal(object)
def __init__(self, parent = None) -> None:
super().__init__(parent)
self.setAcceptDrops(False)
@ -44,10 +44,11 @@ class DoubleCanvas(QWidget):
def set_map2_extent():
if self.mapcanva1.is_main:
self.mapcanva2.set_extent(self.mapcanva1.extent())
def sent_extent():
self.extent.emit(self.mapcanva1.extent())
self.mapcanva1.extentsChanged.connect(set_map2_extent)
self.mapcanva2.extentsChanged.connect(set_map1_extent)
self.mapcanva1.extentsChanged.connect(sent_extent)
self.set_pan_tool(True)
self.mapcanva1.update_scale_text.connect(self.scale_changed)
@ -88,7 +89,7 @@ class DoubleCanvas(QWidget):
layer_list_2 = []
for layer in layers.values():
if layer.enable:
if layer.grid.enable and self.grid_show:
if layer.grid.enable :
layer_list_1.append(layer.grid.layer)
layer_list_2.append(layer.grid.layer)
@ -128,6 +129,7 @@ class CanvasWidget(QgsMapCanvas):
self.layers.insert(0, layer)
self.setLayers(self.layers)
self.zoomToFeatureExtent(layer.extent())
self.refresh()
def add_grid_layer(self, layer):
self.grid_layers.append(layer)
@ -160,7 +162,8 @@ class CanvasWidget(QgsMapCanvas):
if self.is_main:
return
else:
self.zoomToFeatureExtent(extent)
self.setExtent(extent)
self.refresh()#zoomToFeatureExtent 源码里是rect.scale( 1.05 );setExtent( rect );放大1.05倍
def clear(self) -> None:
self.setTheme('')

View File

@ -83,7 +83,8 @@ class Project(QObject):
pair_canvas,
layer_tree,
message_box,
result_table):
result_table,
eye):
self.pair_canvas = pair_canvas
self.layer_tree = layer_tree
self.message_box = message_box
@ -91,6 +92,8 @@ class Project(QObject):
IconInstance(self)
self.layer_tree_update.connect(layer_tree.update_layer)
self.layer_show_update.connect(pair_canvas.update_layer)
self.layer_show_update.connect(eye.update_layer)
eye.extent.connect(pair_canvas.zoom_to_extent)
self.layer_tree_update.connect(self.run_auto_save)
self.layer_show_update.connect(self.run_auto_save)