protected override void OnRectChanged(MapEditor mapEditor, Rect previousScreenRect, Rect newScreenRect) { base.OnRectChanged(mapEditor, previousScreenRect, newScreenRect); var rectBase = new Vector2(Mathf.RoundToInt(newScreenRect.x + 0.5f * newScreenRect.width), Mathf.RoundToInt(newScreenRect.y + newScreenRect.height)); transformManagerDataControl["Position"] = mapEditor.PixelToLatLon(mapEditor.RelativeToAbsolute(rectBase.ToVector2d())); }
private static void Center(MapEditor mapEditor, MapElementDataControl mapElement) { var extElementReference = mapElement as ExtElementRefDataControl; var geoElementReference = mapElement as GeoElementRefDataControl; if (extElementReference != null) { var sprite = ScenesWindowElementReference.ReferenceComponent.GetSprite(extElementReference); if (!sprite) { mapEditor.Center = (Vector2d)extElementReference.TransformManager["Position"]; } else { var texture = sprite.texture; var rect = new RectD(new Vector2d(-0.5f * texture.width, -texture.height), new Vector2d(texture.width, texture.height)); var previousTransformManager = mapEditor.PositionManager; mapEditor.PositionManager = extElementReference.TransformManager.GUIMapPositionManager; var relativeRect = mapEditor.ToRelative(rect.ToPoints()).ToRectD(); mapEditor.PositionManager = previousTransformManager; var boundingBox = relativeRect.ToPoints() .Select(p => mapEditor.PixelToLatLon(mapEditor.RelativeToAbsolute(p))) .ToArray() .ToRectD(); mapEditor.ZoomToBoundingBox(boundingBox); mapEditor.Center = boundingBox.Center; } } else if (geoElementReference != null) { var geoElement = geoElementReference.ReferencedDataControl as GeoElementDataControl; var geometry = geoElement.GMLGeometries[geoElement.SelectedGeometry]; mapEditor.ZoomToBoundingBox(geometry.BoundingBox); mapEditor.Center = geometry.BoundingBox.Center; } }