Ahora que se ha desarrollado la subrutina de entrada de datos de usuario y la subrutina para dibujar el contorno, ya se puede rellenar el camino con losetas circulares. Esta tarea requiere algo de geometría.
En VBA IDE, escriba el siguiente código en la ventana Código, después de la rutina drawout:
' Colocación de una hilera de losetas a lo largo de la distancia dada del camino
' y posiblemente desfase de ésta
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
' Dibujo de las hileras de losetas
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
Para comprender cómo funcionan estas subrutinas, consulte la siguiente ilustración. La subrutina drow dibuja una hilera de losetas a una distancia dada a lo largo del camino especificada por su primer argumento, y desfasa la hilera perpendicularmente al camino con una distancia especificada por el segundo argumento. Se desea desfasar las losetas en hileras alternas para que cubran más espacio y se distribuyan de forma más estética.
La subrutina drow halla la ubicación de la primera hilera mediante el método PolarPoint para desplazarla a lo largo del camino con la distancia especificada por el primer argumento. La subrutina vuelve a utilizar entonces el método PolarPoint para desplazarse perpendicularmente al camino para efectuar el desfase. La subrutina utiliza la instrucción While para continuar dibujando círculos hasta que se encuentra el final del camino. El método PolarPoint de la primera instrucción While se desplaza a la siguiente posición de loseta creando un espacio equivalente a dos radios de loseta (trad) más un espacio entre losetas (tspac). El segundo bucle while dibuja entonces las losetas de la hilera en la otra dirección hasta que se encuentra el otro borde.
La subrutina drawtiles invoca drow repetidamente hasta que se dibujan todas las hileras de losetas. La subrutina While loop recorre paso a paso el camino, invocando drow para cada hilera. Las losetas de las hileras adyacentes forman triángulos equiláteros, tal como se muestra en la ilustración anterior. Las aristas de estos triángulos equivalen al doble del radio de la loseta más el espacio entre losetas. Por lo tanto, por la trigonometría, la distancia a lo largo del camino entre hileras es el seno de 60 grados multiplicado por esta cantidad, y el desfase de las hileras impares es el coseno sesenta grados multiplicado por esta cantidad.
La instrucción If se utiliza en drawtiles para desfasar hileras alternas. Si el desfase es igual a 0, defínalo como el espacio entre los centros de las hileras multiplicadas por el coseno de 60 grados, tal como se explicó anteriormente. Si el desfase no es igual a 0, establézcalo en 0. Esto alterna el desfase de las hileras de la forma deseada.