庭園の歩道内にタイルを描く

drawtiles サブルーチンと drow サブルーチンは、歩道の円形タイルの作成と計算に使用します。

円形タイルの列を描く

円形タイルは、1 番目の引数で指定された歩道に沿って指定された距離に描画され、列は 2 番目の引数で指定された距離だけ歩道に垂直にオフセットされます。各円形タイルは、gpuser サブルーチンで取得され、前に定義したグローバル変数に格納された値に基づいて、庭園の歩道の輪郭内に描画されます。タイルの各列が描画されるにつれて、描画される後続の列それぞれが、より多くの空間を埋め、より整った配列となるようにオフセットされて描画されます。

  1. コード ウィンドウで、drawout サブルーチンの End Sub 文の後ろをクリックし、[Enter]を 2 回押します。
  2. 次のコードを入力します。
    ' Place one row of tiles the given distance along path
    ' and possibly offset it
    Private Sub drow(pd As Double, offset As Double)
      Dim pfirst(0 To 2) As Double
      Dim pctile(0 To 2) As Double
      Dim pltile(0 To 2) As Double
      Dim cir As AcadCircle
    
      Dim varRet As Variant
      varRet = ThisDrawing.Utility.PolarPoint(sp, pangle, pd)
      pfirst(0) = varRet(0)
      pfirst(1) = varRet(1)
      pfirst(2) = varRet(2)
    
      varRet = ThisDrawing.Utility.PolarPoint(pfirst, angp90, offset)
      pctile(0) = varRet(0)
      pctile(1) = varRet(1)
      pctile(2) = varRet(2)
    
      pltile(0) = pctile(0)
      pltile(1) = pctile(1)
      pltile(2) = pctile(2)
    
      Do While distance(pfirst, pltile) < (hwidth - trad)
        Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
        varRet = ThisDrawing.Utility.PolarPoint(pltile, angp90, (tspac + trad + trad))
        pltile(0) = varRet(0)
        pltile(1) = varRet(1)
        pltile(2) = varRet(2)
      Loop
    
      varRet = ThisDrawing.Utility.PolarPoint(pctile, angm90, tspac + trad + trad)
      pltile(0) = varRet(0)
      pltile(1) = varRet(1)
      pltile(2) = varRet(2)
    
      Do While distance(pfirst, pltile) < (hwidth - trad)
        Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
        varRet = ThisDrawing.Utility.PolarPoint( _
        pltile, angm90, (tspac + trad + trad))
        pltile(0) = varRet(0)
        pltile(1) = varRet(1)
        pltile(2) = varRet(2)
      Loop
    End Sub
  3. プロジェクトを保存します。

円形タイルの列数を計算する

drow サブルーチンは、円形タイルを 1 列だけ描画しますが、While ループとともに使用することで、円形タイルのすべての列を繰り返し描画するようにすることができます。上の図に示すように、隣り合った列のタイルは正三角形を形成します。これらの正三角形の辺の長さは、タイルの半径の 2 倍とタイル間の間隔の和と等しくなっています。したがって、三角法では、歩道上の列の間隔は 60°の正弦にこの値を掛けた値となり、奇数列のオフセットは 60°の余弦にこの値を掛けた値となります。

If 文は、1 列おきに強制的にオフセットするために使用されています。offset 変数が 0 (ゼロ)の場合、前に説明したように、実際のオフセットはタイルの中心間の距離と 60°の余弦の積に設定されます。offset 変数が 0 でない場合、オフセットは 0 に設定されます。このサブルーチンによって自由にタイルのオフセットを設定できます。

  1. コード ウィンドウで、drow サブルーチンの End Sub 文の後ろをクリックし、[Enter]を 2 回押します。
  2. 次のコードを入力します。
    ' Draw the rows of tiles
    Private Sub drawtiles()
      Dim pdist As Double
      Dim offset As Double
      pdist = trad + tspac
      offset = 0
    
      Do While pdist <= (plength - trad)
        drow pdist, offset
        pdist = pdist + ((tspac + trad + trad) * Sin(dtr(60)))
    
        If offset = 0 Then
          offset = (tspac + trad + trad) * Cos(dtr(60))
        Else
          offset = 0
        End If
      Loop
    End Sub
  3. プロジェクトを保存します。