コード例 #1
0
        public Rect CalcSize(XdObjectJson xdObject, Rect rect)
        {
            var svg    = SvgUtil.CreateSvg(xdObject, null);
            var bounds = SvgUtil.CalcBounds(svg);

            return(bounds);
        }
コード例 #2
0
        public static Rect CalcSize(XdObjectJson xdObject)
        {
            var position      = Vector2.zero;
            var size          = Vector2.zero;
            var scaleBehavior = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.ScaleBehavior ?? "fill";

            var xdObjectShape = xdObject.Shape;
            var shapeType     = xdObjectShape.Type;

            if (SvgUtil.Types.Contains(shapeType))
            {
                var svg    = SvgUtil.CreateSvg(xdObject, null, true);
                var bounds = SvgUtil.CalcBounds(svg);
                if (bounds.width > 0.0001f && bounds.height > 0.0001f)
                {
                    size     = new Vector2(bounds.width, bounds.height);
                    position = new Vector2(bounds.x, bounds.y);
                }
            }

            if (scaleBehavior == "cover" && size.x > 0.0001f && size.y > 0.0001f)
            {
                var imageWidth  = xdObject.Style?.Fill?.Pattern?.Width ?? 1f;
                var imageHeight = xdObject.Style?.Fill?.Pattern?.Height ?? 1f;
                var imageSize   = new Vector2(imageWidth, imageHeight);
                var imageAspect = imageSize.x / imageSize.y;
                var offsetX     = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.OffsetX ?? 0f;
                var offsetY     = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.OffsetY ?? 0f;
                var scale       = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.Scale ?? 1.0f; // Widthに対するスケール

                var originalSize     = size;
                var originalPosition = position;

                size = new Vector2(
                    originalSize.x * scale,
                    originalSize.x * scale / imageAspect
                    );
                position = new Vector2(
                    originalPosition.x + (originalSize.x / 2f - size.x / 2f) + originalSize.x * offsetX,
                    originalPosition.y + (originalSize.y / 2f - size.y / 2f) + originalSize.x / imageAspect * offsetY
                    );
            }

            return(new Rect(position, size));
        }
コード例 #3
0
        public static Rect CalcSize(XdObjectJson xdObject)
        {
            var position      = Vector2.zero;
            var size          = Vector2.zero;
            var scaleBehavior = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.ScaleBehavior ?? "fill";

            var shapeType = xdObject.Shape?.Type;

            if (shapeType == "rect")
            {
                size = new Vector2(xdObject.Shape.Width, xdObject.Shape.Height);
            }
            else if (SvgUtil.Types.Contains(shapeType))
            {
                var svg    = SvgUtil.CreateSvg(xdObject, null);
                var bounds = SvgUtil.CalcBounds(svg);
                if (bounds.width > 0.0001f && bounds.height > 0.0001f)
                {
                    size     = new Vector2(bounds.width, bounds.height);
                    position = new Vector2(bounds.x, bounds.y);
                }
            }

            if (scaleBehavior == "cover" && size.x > 0.0001f && size.y > 0.0001f)
            {
                var imageWidth     = xdObject.Style?.Fill?.Pattern?.Width ?? 0f;
                var imageHeight    = xdObject.Style?.Fill?.Pattern?.Height ?? 0f;
                var imageSize      = new Vector2(imageWidth, imageHeight);
                var imageAspect    = imageSize.x / imageSize.y;
                var instanceAspect = size.x / size.y;
                var offsetX        = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.OffsetX ?? 0f;
                var offsetY        = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.OffsetY ?? 0f;
                var scale          = xdObject.Style?.Fill?.Pattern?.Meta?.Ux?.Scale ?? 1.0f;

                if (imageAspect > instanceAspect)
                {
                    var prev = size.x;
                    size.x      = size.y * (imageSize.x / imageSize.y);
                    position.x -= (size.x - prev) / 2f;

                    position.x += offsetX * xdObject.Shape.Width * imageAspect / instanceAspect;
                    position.y += offsetY * xdObject.Shape.Height;
                }
                else
                {
                    var prev = size.y;
                    size.y      = size.x * (imageSize.y / imageSize.x);
                    position.y -= (size.y - prev) / 2f;

                    position.x += offsetX * xdObject.Shape.Width;
                    position.y += offsetY * xdObject.Shape.Height * imageAspect / instanceAspect;
                }

                {
                    var prev = size;
                    size     *= scale;
                    position -= (size - prev) / 2f;
                }
            }

            return(new Rect(position, size));
        }