Skip to content
Snippets Groups Projects
Commit 6d46ef13 authored by R. Keoni Garcia's avatar R. Keoni Garcia
Browse files

Merge remote-tracking branch 'origin/feature-camera-updates' into develop

parents 42b393d1 01e1de6d
No related branches found
No related tags found
No related merge requests found
...@@ -732,7 +732,7 @@ class Main(QtGui.QMainWindow): ...@@ -732,7 +732,7 @@ class Main(QtGui.QMainWindow):
# self.animation_slider_jump_frame(None) # self.animation_slider_jump_frame(None)
# self.behaviorLayersList.select([info[INFO.UUID]]) # self.behaviorLayersList.select([info[INFO.UUID]])
def __init__(self, workspace_dir=None, workspace_size=None, glob_pattern=None, border_shapefile=None): def __init__(self, workspace_dir=None, workspace_size=None, glob_pattern=None, border_shapefile=None, center=None):
super(Main, self).__init__() super(Main, self).__init__()
self.ui = Ui_MainWindow() self.ui = Ui_MainWindow()
self.ui.setupUi(self) self.ui.setupUi(self)
...@@ -749,6 +749,7 @@ class Main(QtGui.QMainWindow): ...@@ -749,6 +749,7 @@ class Main(QtGui.QMainWindow):
self.scene_manager = SceneGraphManager(doc, self.workspace, self.queue, self.scene_manager = SceneGraphManager(doc, self.workspace, self.queue,
glob_pattern=glob_pattern, glob_pattern=glob_pattern,
border_shapefile=border_shapefile, border_shapefile=border_shapefile,
center=center,
parent=self) parent=self)
self.ui.mainWidgets.addTab(self.scene_manager.main_canvas.native, 'Mercator') self.ui.mainWidgets.addTab(self.scene_manager.main_canvas.native, 'Mercator')
...@@ -984,6 +985,8 @@ def main(): ...@@ -984,6 +985,8 @@ def main():
help="Specify alternative coastline/border shapefile") help="Specify alternative coastline/border shapefile")
parser.add_argument("--glob-pattern", default=os.environ.get("TIFF_GLOB", None), parser.add_argument("--glob-pattern", default=os.environ.get("TIFF_GLOB", None),
help="Specify glob pattern for input images") help="Specify glob pattern for input images")
parser.add_argument("-c", "--center", nargs=2, type=float,
help="Specify center longitude and latitude for camera")
parser.add_argument('-v', '--verbose', dest='verbosity', action="count", default=int(os.environ.get("VERBOSITY", 2)), parser.add_argument('-v', '--verbose', dest='verbosity', action="count", default=int(os.environ.get("VERBOSITY", 2)),
help='each occurrence increases verbosity 1 level through ERROR-WARNING-INFO-DEBUG (default INFO)') help='each occurrence increases verbosity 1 level through ERROR-WARNING-INFO-DEBUG (default INFO)')
args = parser.parse_args() args = parser.parse_args()
...@@ -999,7 +1002,8 @@ def main(): ...@@ -999,7 +1002,8 @@ def main():
workspace_dir=args.workspace, workspace_dir=args.workspace,
workspace_size=args.space, workspace_size=args.space,
glob_pattern=args.glob_pattern, glob_pattern=args.glob_pattern,
border_shapefile=args.border_shapefile border_shapefile=args.border_shapefile,
center=args.center,
) )
window.show() window.show()
print("running") print("running")
......
...@@ -32,6 +32,10 @@ from pyproj import Proj ...@@ -32,6 +32,10 @@ from pyproj import Proj
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
if sys.platform.startswith("win"):
PREFERRED_SCREEN_TO_TEXTURE_RATIO = 1.0 # screenpx:texturepx that we want to keep, ideally, by striding
else:
PREFERRED_SCREEN_TO_TEXTURE_RATIO = 0.5 # screenpx:texturepx that we want to keep, ideally, by striding
# http://home.online.no/~sigurdhu/WGS84_Eng.html # http://home.online.no/~sigurdhu/WGS84_Eng.html
...@@ -47,7 +51,6 @@ DEFAULT_Y_PIXEL_SIZE = -7566.684931505724307 ...@@ -47,7 +51,6 @@ DEFAULT_Y_PIXEL_SIZE = -7566.684931505724307
DEFAULT_ORIGIN_X = -20037508.342789247632027 DEFAULT_ORIGIN_X = -20037508.342789247632027
DEFAULT_ORIGIN_Y = 15496570.739723727107048 DEFAULT_ORIGIN_Y = 15496570.739723727107048
PREFERRED_SCREEN_TO_TEXTURE_RATIO = 0.5 # screenpx:texturepx that we want to keep, ideally, by striding
DEFAULT_PROJECTION = "+proj=merc +datum=WGS84 +ellps=WGS84" DEFAULT_PROJECTION = "+proj=merc +datum=WGS84 +ellps=WGS84"
DEFAULT_PROJ_OBJ = p = Proj(DEFAULT_PROJECTION) DEFAULT_PROJ_OBJ = p = Proj(DEFAULT_PROJECTION)
C_EQ = p(180, 0)[0] - p(-180, 0)[0] C_EQ = p(180, 0)[0] - p(-180, 0)[0]
......
...@@ -29,6 +29,7 @@ import numpy as np ...@@ -29,6 +29,7 @@ import numpy as np
from vispy.scene import PanZoomCamera, BaseCamera from vispy.scene import PanZoomCamera, BaseCamera
from vispy.util.keys import SHIFT from vispy.util.keys import SHIFT
from vispy.geometry import Rect
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
...@@ -53,6 +54,53 @@ class PanZoomProbeCamera(PanZoomCamera): ...@@ -53,6 +54,53 @@ class PanZoomProbeCamera(PanZoomCamera):
# BaseCamera.viewbox_mouse_event(self, event) # BaseCamera.viewbox_mouse_event(self, event)
# event.handled = False # event.handled = False
def __init__(self, *args, **kwargs):
self._pan_limits = kwargs.pop("pan_limits", None)
self._zoom_limits = kwargs.pop("zoom_limits", None)
super(PanZoomProbeCamera, self).__init__(*args, **kwargs)
@property
def rect(self):
""" The rectangular border of the ViewBox visible area, expressed in
the coordinate system of the scene.
Note that the rectangle can have negative width or height, in
which case the corresponding dimension is flipped (this flipping
is independent from the camera's ``flip`` property).
"""
return self._rect
@rect.setter
def rect(self, args):
if isinstance(args, tuple):
rect = Rect(*args)
else:
rect = Rect(args)
# Limit how far we can pan and zoom out
if self._pan_limits is not None:
new_left = np.clip(rect.left, self._pan_limits[0], self._pan_limits[2])
new_right = np.clip(rect.right, self._pan_limits[0], self._pan_limits[2])
new_bottom = np.clip(rect.bottom, self._pan_limits[1], self._pan_limits[3])
new_top = np.clip(rect.top, self._pan_limits[1], self._pan_limits[3])
else:
new_left = rect.left
new_right = rect.right
new_bottom = rect.bottom
new_top = rect.top
# Limit how far we can zoom in
new_size_x = new_right - new_left
new_size_y = new_top - new_bottom
if self._zoom_limits is not None:
new_size_x = max(new_size_x, self._zoom_limits[0])
new_size_y = max(new_size_y, self._zoom_limits[1])
rect = Rect(new_left, new_bottom, new_size_x, new_size_y)
if self._rect != rect:
self._rect = rect
self.view_changed()
def viewbox_mouse_event(self, event): def viewbox_mouse_event(self, event):
""" """
The SubScene received a mouse event; update transform The SubScene received a mouse event; update transform
......
...@@ -333,7 +333,8 @@ class SceneGraphManager(QObject): ...@@ -333,7 +333,8 @@ class SceneGraphManager(QObject):
newProbePoint = pyqtSignal(object, object) newProbePoint = pyqtSignal(object, object)
newProbePolygon = pyqtSignal(object, object) newProbePolygon = pyqtSignal(object, object)
def __init__(self, doc, workspace, queue, border_shapefile=None, glob_pattern=None, parent=None, texture_shape=(4, 16)): def __init__(self, doc, workspace, queue, border_shapefile=None, glob_pattern=None, parent=None,
texture_shape=(4, 16), center=None):
super(SceneGraphManager, self).__init__(parent) super(SceneGraphManager, self).__init__(parent)
self.didRetilingCalcs.connect(self._set_retiled) self.didRetilingCalcs.connect(self._set_retiled)
...@@ -364,7 +365,7 @@ class SceneGraphManager(QObject): ...@@ -364,7 +365,7 @@ class SceneGraphManager(QObject):
np.array([0., 0., 0., 0.], dtype=np.float32), # transparent np.array([0., 0., 0., 0.], dtype=np.float32), # transparent
] ]
self.setup_initial_canvas() self.setup_initial_canvas(center)
self.pending_polygon = PendingPolygon(self.main_map) self.pending_polygon = PendingPolygon(self.main_map)
def frame_changed(self, frame_info): def frame_changed(self, frame_info):
...@@ -388,18 +389,16 @@ class SceneGraphManager(QObject): ...@@ -388,18 +389,16 @@ class SceneGraphManager(QObject):
vis = dict((u,tfu(u)) for u in uuids) vis = dict((u,tfu(u)) for u in uuids)
self.didChangeLayerVisibility.emit(vis) self.didChangeLayerVisibility.emit(vis)
def setup_initial_canvas(self): def setup_initial_canvas(self, center=None):
center = center or (0, 0)
self.main_canvas = CspovMainMapCanvas(parent=self.parent()) self.main_canvas = CspovMainMapCanvas(parent=self.parent())
self.main_view = self.main_canvas.central_widget.add_view() self.main_view = self.main_canvas.central_widget.add_view()
# Camera Setup # Camera Setup
self.pz_camera = PanZoomProbeCamera(name="pz_camera", aspect=1) self.pz_camera = PanZoomProbeCamera(name="pz_camera", aspect=1, pan_limits=(-1., -1., 1., 1.), zoom_limits=(0.0015, 0.0015))
self.main_view.camera = self.pz_camera self.main_view.camera = self.pz_camera
self.main_view.camera.flip = (False, False, False) self.main_view.camera.flip = (False, False, False)
# FIXME: these ranges just happen to look ok, but I'm not really sure the 'best' way to set these
self.main_view.camera.set_range(x=(-10.0, 10.0), y=(-10.0, 10.0), margin=0)
self.main_view.camera.zoom(0.1, (0, 0))
# FIXME: These cameras are no longer needed # FIXME: These cameras are no longer needed
# Point Probe Mode/Camera # Point Probe Mode/Camera
...@@ -434,6 +433,17 @@ class SceneGraphManager(QObject): ...@@ -434,6 +433,17 @@ class SceneGraphManager(QObject):
self.latlon_grid = self._init_latlon_grid_layer(color=self._color_choices[self._latlon_grid_color_idx]) self.latlon_grid = self._init_latlon_grid_layer(color=self._color_choices[self._latlon_grid_color_idx])
self.latlon_grid.transform = STTransform(translate=(0, 0, 45)) self.latlon_grid.transform = STTransform(translate=(0, 0, 45))
# Make the camera center on Guam
center = (144.8, 13.5)
p = Proj(DEFAULT_PROJECTION)
zoom_factor = 0.2
# Not sure why its 15 and 50 degrees off, but eh for now
x, y = p(center[0] + 15., center[1] - 45.0)
# x, y = p(144.8 + 15, 13.5)
# x, y = p(center[0] - x_offset, center[1] - y_offset)
cam_center = self.borders.transforms.get_transform(map_to="scene").map([(x, y)])[0]
self.main_view.camera.zoom(zoom_factor, cam_center)
def _init_latlon_grid_layer(self, color=None, resolution=5.): def _init_latlon_grid_layer(self, color=None, resolution=5.):
"""Create a series of line segments representing latitude and longitude lines. """Create a series of line segments representing latitude and longitude lines.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment