Merge remote-tracking branch 'origin/dev-eagle'
This commit is contained in:
commit
7efba2619a
89
rscder/gui/eagle_eye.py
Normal file
89
rscder/gui/eagle_eye.py
Normal 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
|
@ -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("检测流程"))
|
||||
|
@ -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('')
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user