protected override Text CreateAdvancedText(string text, AdvancedDrawing.Graphics graphics)
        {
            var font = CreateFont(graphics);
            var dpi  = graphics.DpiX;

            var pathBoundedText = new PathBoundedText(text, font)
            {
                Alignment = VOAligmnentToAdvanced(Alignment),
                Underline = Underline,
                Tracking  = Tracking,
                Leading   = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading,
                Paragraph =
                {
                    FirstLineIndent = ParagraphSettings.FirstLineIndent,
                    SpaceAfter      = ParagraphSettings.SpaceAfter,
                    SpaceBefore     = ParagraphSettings.SpaceBefore,
                    OverlapLines    = true
                },
                Vertical = IsVertical
            };

            foreach (var boundingPath in GetTransformedPaths().Select(p => p.ToAdvancedPath()))
            {
                using (var matrix = new Matrix())
                {
                    if (!Utils.EqualsOfFloatNumbers(dpi, 72))
                    {
                        matrix.Scale(dpi / 72, dpi / 72, MatrixOrder.Append);
                    }

                    if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale))
                    {
                        matrix.Scale(1 / HorizontalScale, 1 / VerticalScale, MatrixOrder.Append);
                    }

                    boundingPath.ApplyTransform(matrix);
                }

                pathBoundedText.BoundingPaths.Add(boundingPath);
            }

            if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale))
            {
                pathBoundedText.Transform.Scale(HorizontalScale, VerticalScale);
            }

            var wrappingPath = GetWrappingPath(dpi);

            if (wrappingPath.Points.Count > 0)
            {
                pathBoundedText.WrappingPaths.Add(wrappingPath);
            }

            return(pathBoundedText);
        }
    /// <summary>
    /// Creates a text object.
    /// </summary>
    private static PathBoundedText CreateText(float fontSize, Graphics graphics)
    {
        var str = "Since 2001, Aurigma have helped software developers add imaging functionality to their applications in a variety of industries. Our image processing Software Development Kit for .NET, Graphics Mill, is a truly powerful product we are proud to have developed.";

        var text = new PathBoundedText(str, graphics.CreateFont("Verdana", fontSize));

        var bounds = new Path();

        bounds.DrawEllipse(0, 0, graphics.Width, graphics.Height);

        text.BoundingPaths.Add(bounds);

        return(text);
    }
Example #3
0
    /// <summary>
    /// Draw text which flows from one area to another
    /// </summary>
    private static void DrawPathBoundedText()
    {
        using (var bitmap = new Bitmap(600, 300, PixelFormat.Format24bppRgb, RgbColor.White))
            using (var graphics = bitmap.GetAdvancedGraphics())
            {
                var dummyText = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " +
                                "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim " +
                                "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " +
                                "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum " +
                                "dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, " +
                                "sunt in culpa qui officia deserunt mollit anim id est laborum.";

                var boundingPath = new Path();

                var pathBoundedText = new PathBoundedText(dummyText, graphics.CreateFont("Verdana", 18f),
                                                          new SolidBrush(RgbColor.Black));

                // Adding text areas. When the first text area runs out of space,
                // text will automatically flow to the next one.
                var boundingPath1 = new Path();
                boundingPath1.DrawRectangle(20, 20, 260, 260);
                pathBoundedText.BoundingPaths.Add(boundingPath1);

                var boundingPath2 = new Path();
                boundingPath2.DrawRectangle(320, 20, 260, 260);
                pathBoundedText.BoundingPaths.Add(boundingPath2);

                // Adding paths which you need to wrap with the text
                var wrappingPath = new Path();
                wrappingPath.DrawEllipse(200, 100, 200, 100);
                pathBoundedText.WrappingPaths.Add(wrappingPath);

                graphics.DrawText(pathBoundedText);

                // Drawing frames around text blocks (for demonstration purposes)
                graphics.FillPath(new SolidBrush(RgbColor.LightGreen), wrappingPath);

                var pen = new Pen(RgbColor.Red);
                graphics.DrawPath(pen, boundingPath1);
                graphics.DrawPath(pen, boundingPath2);

                graphics.DrawLine(new Pen(RgbColor.Blue, 2f), 280f, 280f, 320f, 20f);

                bitmap.Save("../../../../_Output/DrawPathBoundedText.png");
            }
    }