Exemplo n.º 1
0
        /// <summary>
        ///     Updates the view bounds.
        /// </summary>
        private void UpdateViewBounds()
        {
            Vector2 tl = Vector2.Zero;
            Vector2 br = new Vector2(_renderControl.Width, _renderControl.Height);

            tl = Vector2.Transform(tl, InverseViewMatrix);
            br = Vector2.Transform(br, InverseViewMatrix);

            _bounds = Numerics.Rectangle.ContainingPoints(tl, br);
            if (!_layoutSuspended)
            {
                ViewBoundsChanged?.Invoke(this, EventArgs.Empty);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        ///     Gets the transform matricies used for printing.
        /// </summary>
        /// <param name="bounds">The bounds.</param>
        /// <param name="transform">The transform.</param>
        /// <param name="inverseTransform">The inverse transform.</param>
        /// <exception cref="System.ArgumentOutOfRangeException"></exception>
        private void GetPrintTransform(
            Numerics.Rectangle bounds,
            out Matrix3x2 transform,
            out Matrix3x2 inverseTransform)
        {
            float minDim = Math.Min(bounds.Width, bounds.Height);

            Vector2 center = bounds.Center;

            Matrix3x2 scale    = Matrix3x2.CreateScale((minDim * _zoom) / 10000f, center);
            Matrix3x2 invScale = Matrix3x2.CreateScale(10000f / (minDim * _zoom), center);

            Matrix3x2 centerTranslate    = Matrix3x2.CreateTranslation(center);
            Matrix3x2 invCenterTranslate = Matrix3x2.CreateTranslation(-center);

            Matrix3x2 translate, invTranslate;

            switch (_printDocument.PrintMode)
            {
            case TilingPrintMode.TilingFull:
            case TilingPrintMode.TilingLines:
                translate    = Matrix3x2.CreateTranslation(_bounds.Center);
                invTranslate = Matrix3x2.CreateTranslation(-_bounds.Center);
                break;

            case TilingPrintMode.SingleTileFull:
            case TilingPrintMode.SingleTileLines:
                Debug.Assert(_printDocument.Tile != null, "_printDocument.Tile != null");

                Vector2 centroid = _printDocument.Tile.Centroid;

                translate    = Matrix3x2.CreateTranslation(centroid);
                invTranslate = Matrix3x2.CreateTranslation(-centroid);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            transform        = centerTranslate * translate * scale;
            inverseTransform = invScale * invTranslate * invCenterTranslate;
        }