Transforms.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports System.Numerics
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' グラフィックの変形(GcPdfGraphics.Transform プロパティ)の使用方法を示します。
Public Class Transforms
    '' 塗りつぶされたボックスにテキストを描画するヘルパーメソッドです。
    Private Sub DrawBox(ByVal text As String, ByVal g As GcGraphics, ByVal box As RectangleF)
        g.FillRectangle(box, Color.FromArgb(80, 0, 184, 204))
        g.DrawRectangle(box, Color.FromArgb(0, 193, 213), 1)
        box.Inflate(-6, -6)
        g.DrawString(text, New TextFormat() With {.FontName = "Yu Gothic", .FontSize = 14}, box)
    End Sub

    Function CreatePDF(ByVal stream As Stream) As Integer
        Const baseTxt = "座標[0,36][4×2インチ]の原型" & vbCrLf
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics
        Dim box = New RectangleF(0, 36, 72 * 4, 72 * 2)
        '' #1:
        DrawBox($"Box 1: {baseTxt}変形なし", g, box)
        ''
        Dim translate0 = Matrix3x2.CreateTranslation(72 * 1, 72 * 4)
        Dim scale0 = Matrix3x2.CreateScale(0.5F)

        '' 変換は最後から順に適用されます。

        '' #2:
        g.Transform =
            scale0 *
            translate0
        DrawBox($"Box 2: {baseTxt}スケール50% \n移動[X軸=1:Y軸=4インチ]", g, box)
        '' #3:
        g.Transform =
            translate0 *
            scale0
        DrawBox($"Box 3: {baseTxt}移動[X軸=1:Y軸=4インチ] \nスケール50%", g, box)
        ''
        Dim translate1 = Matrix3x2.CreateTranslation(72 * 3, 72 * 5)
        Dim scale1 = Matrix3x2.CreateScale(0.7F)
        Dim rotate0 = Matrix3x2.CreateRotation((-70 * Math.PI) / 180.0F) '' 70 degrees CCW
        '' #4:
        g.Transform =
            rotate0 *
            translate1 *
            scale1
        DrawBox($"Box 4: {baseTxt}回転[反時計70°] 移動[X軸=3:Y軸=7インチ] \nスケール70%", g, box)
        '' #5:
        g.Transform =
            Matrix3x2.CreateTranslation(36, 72) *
            g.Transform
        DrawBox($"Box 5: {baseTxt}「Box 4」の変更を適用後 \n移動[X軸=0.5:Y軸=1インチ]", g, box)
        '' #6:
        g.Transform =
            Matrix3x2.CreateSkew((-45 * Math.PI) / 180.0F, (20 * Math.PI) / 180.0F) *
            Matrix3x2.CreateTranslation(72 * 3, 72 * 7)
        DrawBox($"Box 6: {baseTxt}移動[X軸=3:Y軸=7インチ] \n歪み[X軸=-45°:Y軸=20°]", g, box)
        '' #7:
        g.Transform =
            Matrix3x2.CreateRotation(Math.PI) *
            Matrix3x2.CreateTranslation(page.Size.Width - 72, page.Size.Height - 72)
        DrawBox($"Box 7: {baseTxt}移動[X軸=7.5:Y軸=10インチ] \n回転[180°]", g, box)
        '' グラフィックス上の変形をすべて削除することができます。
        g.Transform = Matrix3x2.Identity
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class