【Word VBA】樹木曲線描画マクロ▽ソースコード

記事
IT・テクノロジー
HC231117A.png

Option Explicit
Option Base 0
Public Sub 樹木曲線描画マクロ()
    Const TREESTAX = 200         '描画開始位置X
    Const TREESTAY = 300         '                  Y
    Const TREESTAL = 50           '幹の長さ
    Const TREEBRAN = 5            '枝分かれ回数
    '---------------------------------------------------------------------------
    Dim intBp(1) As Integer
    '
    intBp(0) = TREESTAX: intBp(1) = TREESTAY
    樹木曲線描画_再帰 TREEBRAN, intBp(), TREESTAL, 90
End Sub
'============================================
Public Sub 樹木曲線描画_再帰(intNo As Integer, intCp() As Integer,  _
                                           intLn As Integer, sngAn As Single)
    Const TREEPAIV = 3.14159265358979        'π
    Const TREESITA = (TREEPAIV / 180)           '1°
    '
    Const TREEBANG = 20                               '枝の曲がり率
    '
    Const TREELNCL = &H2A2AA5                   '描画色
    Const TREELNWT = 2                                '線の太さ
    '---------------------------------------------------------------------------
    Dim intDp(1) As Integer
    '
    If intNo > 0 Then
       intDp(0) = intCp(0) + intLn * Cos(TREESITA * sngAn)
       intDp(1) = intCp(1) - intLn * Sin(TREESITA * sngAn)
       '*枝(直線)描画
       With ActiveDocument.Shapes.AddLine( _
            intCp(0), intCp(1), intDp(0), intDp(1)).Line
           .ForeColor.RGB = TREELNCL               '←線色
           .Weight = TREELNWT                        '←線の太さ
       End With
       '
       intLn = intLn - intNo / 3
       '*自らを呼び出し
       樹木曲線描画_再帰 intNo - 1, intDp(), intLn, sngAn - TREEBANG
       樹木曲線描画_再帰 intNo - 1, intDp(), intLn, sngAn + TREEBANG
    End If
End Sub

《蛇足》
 再帰手続きを流れ図で表すと、次のようになります。
HC231117B.png



サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す