【Word VBA】ベジェ曲線による花描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
Public Sub Test1()
    Const CIRCXPOS = 200           '輪の中心位置 X
    Const CIRCYPOS = 160         '               Y
    Const CIRCRADI = 50           '輪の半径
    '
    Const PETACONT = 12          '花びらの数
    Const PISTRADI = 20                            'めしべの半径
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer, intAng As Integer
    Dim intXp As Integer, intYp As Integer, dblRd As Double
    Dim sngBas(0 To 6, 0 To 1) As Single
    Dim sngWrk(0 To 6, 0 To 1) As Single
    '
    '花びらのベジェ曲線ベースデータ
    sngBas(0, 0) = 30: sngBas(0, 1) = 0
    sngBas(1, 0) = 0: sngBas(1, 1) = 25
    sngBas(2, 0) = 0: sngBas(2, 1) = 50
    sngBas(3, 0) = 30: sngBas(3, 1) = 80
    sngBas(4, 0) = 60: sngBas(4, 1) = 60
    sngBas(5, 0) = 40: sngBas(5, 1) = 25
    sngBas(6, 0) = 30: sngBas(6, 1) = 0
 '
    dblRd = (4 * Atn(1)) / 180: intAng = 360 \ PETACONT
    For Ip = 0 To PETACONT - 1
        intXp = CIRCRADI * Cos(dblRd * (intAng * Ip)) + CIRCXPOS
        intYp = CIRCRADI * Sin(dblRd * (intAng * Ip)) + CIRCYPOS
        '花びらのベジェ曲線データ作成
        For Jp = LBound(sngBas, 1) To UBound(sngBas, 1)
            sngWrk(Jp, 0) = sngBas(Jp, 0) + intXp - (60 \ 2)
            sngWrk(Jp, 1) = sngBas(Jp, 1) + intYp - (80 \ 2)
        Next Jp
        With ActiveDocument.Shapes.AddCurve(sngWrk)
             .Fill.ForeColor.RGB = RGB(255, 20, 147) '濃いピンク
             .Line.ForeColor.RGB = vbBlack
             .Rotation = intAng * Ip + 90
       End With
       '*めしべ描画
       With ActiveDocument.Shapes.AddShape(msoShapeOval, _
                CIRCXPOS - PISTRADI, CIRCYPOS - PISTRADI, _
                   PISTRADI * 2, PISTRADI * 2)
                .Fill.Patterned msoPatternSolidDiamond
                .Fill.BackColor.RGB = vbYellow
                .Fill.ForeColor.RGB = vbBlack
                .Line.ForeColor.RGB = vbRed
        End With
  Next Ip
End Sub

蛇足
時期的、桜にしたいと思ったか、ベジェ曲線で描くには、僕は技量不足!

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