RosettaCodeData/Task/Fractal-tree/AutoHotkey/fractal-tree.ahk
2014-04-02 16:56:35 +00:00

66 lines
2 KiB
AutoHotkey

#SingleInstance, Force
#NoEnv
SetBatchLines, -1
; Uncomment if Gdip.ahk is not in your standard library
; #Include, Gdip.ahk
FileOut := A_Desktop "\MyNewFile.png"
TreeColor := 0xff0066ff ; ARGB
TrunkWidth := 10 ; Pixels
TrunkLength := 80 ; Pixels
Angle := 60 ; Degrees
ImageWidth := 670 ; Pixels
ImageHeight := 450 ; Pixels
Branches := 13
Decrease := 0.81
Angle := (Angle * 0.01745329252) / 2
, Points := {}
, Points[1, "Angle"] := 0
, Points[1, "X"] := ImageWidth // 2
, Points[1, "Y"] := ImageHeight - TrunkLength
if (!pToken := Gdip_Startup()) {
MsgBox, 48, Gdiplus error!, Gdiplus failed to start. Please ensure you have Gdiplus on your system.
ExitApp
}
OnExit, Exit
pBitmap := Gdip_CreateBitmap(ImageWidth, ImageHeight)
, G := Gdip_GraphicsFromImage(pBitmap)
, Gdip_SetSmoothingMode(G, 4)
, pBrush := Gdip_BrushCreateSolid(0xff000000)
, Gdip_FillRectangle(G, pBrush, -5, -5, ImageWidth + 10, ImageHeight + 10)
, Gdip_DeleteBrush(pBrush)
, pPen := Gdip_CreatePen(TreeColor, TrunkWidth/Decrease)
, Gdip_DrawLine(G, pPen, Points.1.X, Points.1.Y, Points.1.X, ImageHeight)
, Gdip_DeletePen(pPen)
Loop, % Branches {
NewPoints := {}
pPen := Gdip_CreatePen(TreeColor, TrunkWidth)
for Each, Point in Points {
N1 := A_Index * 2
, N2 := (A_Index * 2) + 1
, NewPoints[N1, "X"] := Point.X + (TrunkLength * Sin(NewPoints[N1, "Angle"] := Point.Angle - Angle))
, NewPoints[N1, "Y"] := Point.Y - (TrunkLength * Cos(NewPoints[N1].Angle))
, NewPoints[N2, "X"] := Point.X + (TrunkLength * Sin(NewPoints[N2, "Angle"] := Point.Angle + Angle))
, NewPoints[N2, "Y"] := Point.Y - (TrunkLength * Cos(NewPoints[N2].Angle))
, Gdip_DrawLine(G, pPen, Point.X, Point.Y, NewPoints[N1].X, NewPoints[N1].Y)
, Gdip_DrawLine(G, pPen, Point.X, Point.Y, NewPoints[N2].X, NewPoints[N2].Y)
}
TrunkWidth *= Decrease
, TrunkLength *= Decrease
, Points := NewPoints
, Gdip_DeletePen(pPen)
}
Gdip_SaveBitmapToFile(pBitmap, FileOut)
, Gdip_DisposeImage(pBitmap)
, Gdip_DeleteGraphics(G)
Run, % FileOut
Exit:
Gdip_Shutdown(pToken)
ExitApp