diku-dk / diku-canvas Goto Github PK
View Code? Open in Web Editor NEWSimple canvas library for F# (2d-drawing, loading/saving of image files, using SDL2)
Home Page: https://diku-dk.github.io/diku-canvas/
License: MIT License
Simple canvas library for F# (2d-drawing, loading/saving of image files, using SDL2)
Home Page: https://diku-dk.github.io/diku-canvas/
License: MIT License
The following code is expected to show a white canvas:
let bug =
let canvas = Canvas.create 120 108
Canvas.runApp "Opps" 120 108
(fun w h _ -> Canvas.scale canvas w h) (fun _ _ -> None) ()
However some garbled data is shown:
May be related to #13
We have found that on windows 10/11 certain examples results in stack overflow. Adjusting the drawLines examples to show 100 lines instead of 1000 solves the issue.
Tested examples are: https://github.com/diku-dk/diku-canvas/blob/main/examples/drawLines.fsx
And circles (Slide 9 on 2.4Lecture.pdf):
#r "nuget:DIKU.Canvas, 2.0.0"
open Canvas
open Color
open System
let w = 400
let R = 100.0
let c = 200.0
let point R c0 c1 t =
let s = t*System.Math.PI/180.0
(c0+R*cos s, c1+R*sin s)
let rec makeCircle p0 t1 =
if t1 <= 360.0 then
let p1 = point R c c t1
let line = piecewiseAffine blue 1.0 [p0;p1]
let line2 = (makeCircle p1 (t1+0.1))
onto line line2
else
emptyTree
let draw =
let p0 = point R c c 0.0
let tree = makeCircle p0 0.1
make tree
render "Circle" w w draw
Error message from Windows 10:
Stack overflow.
at SixLabors.ImageSharp.Drawing.Processing.SolidBrush..ctor(SixLabors.ImageSharp.Color)
at SixLabors.ImageSharp.Drawing.Processing.SolidPen..ctor(SixLabors.ImageSharp.Color, Single)
at SixLabors.ImageSharp.Drawing.Processing.Pens.Solid(SixLabors.ImageSharp.Color, Single)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.compile(Int32, Boolean, PrimitiveTree)
at Canvas.make(PrimitiveTree)
at <StartupCode$FSI_0002>.$FSI_0002.main@()
at System.RuntimeMethodHandle.InvokeMethod(System.Object, Void**, System.Signature, Boolean)
at System.Reflection.MethodInvoker.Invoke(System.Object, IntPtr*, System.Reflection.BindingFlags)
at System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
at System.RuntimeType.InvokeMember(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object, System.Object[], System.Reflection.ParameterModifier[], System.Globalization.CultureInfo, System.String[])
at System.Type.InvokeMember(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object, System.Object[], System.Globalization.CultureInfo)
at [email protected](Microsoft.FSharp.Core.Unit)
at FSharp.Compiler.Interactive.Shell.arg10@2041(FsiDynamicCompiler, DiagnosticsLogger, Microsoft.FSharp.Core.FSharpRef`1<Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1<System.Exception>>>>, Microsoft.FSharp.Core.Unit)
at FSharp.Compiler.Interactive.Shell+FsiDynamicCompiler.ProcessCodegenResults(Internal.Utilities.Library.CompilationThreadToken, DiagnosticsLogger, FsiDynamicCompilerState, IncrementalOptimizationEnv, TcState, TcConfig, Microsoft.FSharp.Collections.FSharpList`1<FSharp.Compiler.Syntax.Ident>, Boolean, Boolean, System.String, Microsoft.FSharp.Collections.FSharpList`1<CheckedImplFile>, IlxAssemblyGenerator, IlxGenResults, FSharp.Compiler.Text.Range)
at FSharp.Compiler.Interactive.Shell+FsiDynamicCompiler.ProcessInputs(Internal.Utilities.Library.CompilationThreadToken, DiagnosticsLogger, FsiDynamicCompilerState, Microsoft.FSharp.Collections.FSharpList`1<FSharp.Compiler.Syntax.ParsedInput>, Boolean, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1<FSharp.Compiler.Syntax.Ident>, FSharp.Compiler.Text.Range)
at FSharp.Compiler.Interactive.Shell+FsiDynamicCompiler.EvalParsedDefinitions(Internal.Utilities.Library.CompilationThreadToken, DiagnosticsLogger, FsiDynamicCompilerState, Boolean,
Boolean, Microsoft.FSharp.Collections.FSharpList`1<FSharp.Compiler.Syntax.SynModuleDecl>)
at FSharp.Compiler.Interactive.Shell.loop@3847-108(FsiInteractionProcessor, DiagnosticsLogger, Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState, InteractionGroup)
at System.Runtime.CompilerServices.RuntimeHelpers.DispatchTailCalls(IntPtr, Void (IntPtr, Byte ByRef, System.Runtime.CompilerServices.PortableTailCallFrame*), Byte ByRef)
at [email protected](FsiDynamicCompilerState)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.InteractiveCatch[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](DiagnosticsLogger, Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,System.Tuple`2<System.__Canon,FsiInteractionStepStatus>>, System.__Canon)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.ExecuteParsedInteractionInGroups(Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState, Microsoft.FSharp.Core.FSharpOption`1<FSharp.Compiler.Syntax.ParsedScriptInteraction>, DiagnosticsLogger, Microsoft.FSharp.Core.FSharpOption`1<FsiValue>, System.Threading.CancellationToken)
at System.Runtime.CompilerServices.RuntimeHelpers.DispatchTailCalls(IntPtr, Void (IntPtr, Byte ByRef, System.Runtime.CompilerServices.PortableTailCallFrame*), Byte ByRef)
at [email protected](Microsoft.FSharp.Core.FSharpOption`1<FsiValue>, FsiDynamicCompilerState)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.ExecuteParsedInteraction(Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState, Microsoft.FSharp.Core.FSharpOption`1<FSharp.Compiler.Syntax.ParsedScriptInteraction>, DiagnosticsLogger, Microsoft.FSharp.Core.FSharpOption`1<FsiValue>, System.Threading.CancellationToken)
at System.Runtime.CompilerServices.RuntimeHelpers.DispatchTailCalls(IntPtr, Void (IntPtr, Byte ByRef, System.Runtime.CompilerServices.PortableTailCallFrame*), Byte ByRef)
at [email protected](Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState)
at FSharp.Compiler.Interactive.Shell+clo@4017-584[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Invoke()
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.mainThreadProcessAction[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.__Canon, Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,System.Tuple`2<System.__Canon,FsiInteractionStepStatus>>>, System.__Canon)
at [email protected](Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState)
at FSharp.Compiler.Interactive.Shell+ParseAndExecuteInteractionFromLexbuf@4112.Invoke(FsiDynamicCompilerState)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.InteractiveCatch[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](DiagnosticsLogger, Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,System.Tuple`2<System.__Canon,FsiInteractionStepStatus>>, System.__Canon)
at FSharp.Compiler.Interactive.Shell.run@4154-1(FsiInteractionProcessor, DiagnosticsLogger, Internal.Utilities.Library.CompilationThreadToken, LexFilter, FsiDynamicCompilerState)
at [email protected](Microsoft.FSharp.Core.Unit)
at FSharp.Compiler.Interactive.Shell.WithImplicitHome[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](TcConfigBuilder, System.String, Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit,System.__Canon>)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.EvalIncludedScript(Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState, System.String, FSharp.Compiler.Text.Range, DiagnosticsLogger)
at [email protected](FsiDynamicCompilerState)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.InteractiveCatch[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](DiagnosticsLogger, Microsoft.FSharp.Core.FSharpFunc`2<System.__Canon,System.Tuple`2<System.__Canon,FsiInteractionStepStatus>>, System.__Canon)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.EvalIncludedScripts(Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState, Microsoft.FSharp.Collections.FSharpList`1<System.String>, DiagnosticsLogger)
at FSharp.Compiler.Interactive.Shell.consume@4178-1(FsiInteractionProcessor, DiagnosticsLogger, Internal.Utilities.Library.CompilationThreadToken, FsiDynamicCompilerState, Microsoft.FSharp.Collections.FSharpList`1<System.Tuple`2<System.String,Boolean>>)
at FSharp.Compiler.Interactive.Shell+FsiInteractionProcessor.LoadInitialFiles(Internal.Utilities.Library.CompilationThreadToken, DiagnosticsLogger)
at FSharp.Compiler.Interactive.Shell+FsiEvaluationSession.Run()
at Sample.FSharp.Compiler.Interactive.Main.evaluateSession(System.String[])
at Sample.FSharp.Compiler.Interactive.Main.MainMain(System.String[])
The stated unit of time in the documentation of the interact function is microseconds, while it actually expects milliseconds. (1000 milliseconds to a second)
img-util-fs
img-util-fs
diku-dk
orgExecuting interact and holding down any button will repeatedly fire KeyPress events for that button. If a second button is pressed at the same time then KeyPress events for the second button will fire repeatedly, however KeyPress events for the first button will stop.
E.g. holding down first DownArrow then UpArrow at the same time will result in the following events firing:
...
DownArrow
DownArrow
DownArrow
DownArrow
DownArrow
UpArrow
UpArrow
UpArrow
UpArrow
UpArrow
...
When these events should supposedly be firing:
...
DownArrow
DownArrow
DownArrow
DownArrow
DownArrow
UpArrow
DownArrow
UpArrow
DownArrow
UpArrow
DownArrow
UpArrow
DownArrow
UpArrow
...
Demonstrative snippet:
#r "nuget:DIKU.Canvas, 2.0"
open Canvas
open Color
let tree = ellipse darkCyan 2.0 85.0 64.0 |> translate 128.0 128.0
let draw _ = make tree
let react _ e = printfn "%A" e; None
interact "Render an image" 256 256 (Some 1000) draw react 0
There is no way to draw round/curvy shapes.
For circular shapes:
val strokeArc : canvas -> color -> (x:int, y:int) -> (radius:int) -> (startAngle:int) -> (endAngle:int) -> unit
val fillArc : canvas -> color -> (x:int, y:int) -> (radius:int) -> (startAngle:int) -> (endAngle:int) -> unit
For a circular arc with color color
centered at (x, y)
with a radius of radius
. The path starts at startAngle
, ends at endAngle
, and travels in clockwise direction, angles are given in radians. Thus, to draw a full blue circle (moon) at position (42, 69) with a radius of 20:
fillArc canvas blue (42,69) 20 0 (2 * int(2.0 * System.Math.PI))
Similar for elliptical shapes:
val strokeEllipse : canvas -> color -> (x, y) -> radiusX -> radiusY -> rotation -> startAngle -> endAngle -> unit
val fillEllipse : canvas -> color -> (x, y) -> radiusX -> radiusY -> rotation -> startAngle -> endAngle -> unit
For an elliptical arc centred at (x, y)
with the radii radiusX
and radiusY
. Starts at startAngle
and ends at endAngle
, and travels in clockwise direction.
#7 adds support for window titles.
There might be problems with Windows, since the title is currently marshalled as a utf-8 string (required by SDL), but who knows what a windows user will come up with.
(If I recall correctly, UTF16-LE is the internal encoding used in dotnet on all platforms).
This is a fantastic library. It would be great if it was possible to display the generated image directly into a Jupyter or a .NET notebook. I don't think this is currently possible; you get an error when you try to render. You can do it if you render it as a file and then use the method described here: https://stackoverflow.com/questions/68753968/how-do-i-view-an-image-in-dotnet-interactive
The order of the title and canvas argument for show
should be the same as for runApp
and runSimpleApp
.
This is a feature request and not at all urgent.
Request
Add support for animations, i.e. a sequence of draw events that will execute in a fixed time-step
Problems
The current structure is:
drawLoop()
functionreact
to update the statedrawLoop()
recursivelyNot so easy fix
It should be possible to write a state: 's
that incorporates a small state-machine.
example:
type State = Waiting of 'a | Drawing of 'a * int
let draw w h s =
let bmp = Canvas.create w h
match s with
| Drawing (s, framesLeft) ->
// somehow update the state based on the last state
// update the state. (Can we? If it is a ref, we should be able to)
| Waiting (s) -> // "Normal" draw stuff
It is not pretty to do state-updates in both the react
function and the draw
function, but I think it would require no or minimal changes to the library.
The hard part of this is:
Hard fix
Rewrite the API, so it becomes frame based instead of reactive - i.e. just do things the SDL/GameEngine way.
I believe this would require major changes to the Canvas-API and, although nice, is probably not what Jon wants for the library wrt. the PoP-course.
When reading through the code I notice that most of the functions use int * int types everywhere whilst a point type is defined down near "interp", is there a reason not to change this and make the code more readable?
When running dotnet fsi someFile.fsx
on ubuntu 20.04 with dotnet-sdk installed via snap, SDL2 is not found. Neither the shipped SDL2.so or a user-installed SDL2, through libsdl2-dev
.
The problem seems to be related to ld
not finding GLIBC
. The system were the issue was discovered has glibc-2.35, confirmed by ldd --version
.
An abbreviated output from LD_DEBUG=libs dotnet fis someFile.fsx
is seen below:
> grep SDL2 lddebug\ \(1\).log
50390: find library=SDL2.so [0]; searching
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../lib/x86_64-linux-gnu/SDL2.so
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../usr/lib/x86_64-linux-gnu/SDL2.so
50390: trying file=/snap/dotnet-sdk/177/usr/lib/x86_64-linux-gnu/SDL2.so
50390: trying file=/snap/dotnet-sdk/177/lib/x86_64-linux-gnu/SDL2.so
50390: trying file=/lib/x86_64-linux-gnu/SDL2.so
50390: trying file=/usr/lib/x86_64-linux-gnu/SDL2.so
50390: trying file=/lib/SDL2.so
50390: trying file=/usr/lib/SDL2.so
50390: find library=libSDL2.so [0]; searching
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../lib/x86_64-linux-gnu/libSDL2.so
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../usr/lib/x86_64-linux-gnu/libSDL2.so
50390: trying file=/snap/dotnet-sdk/177/usr/lib/x86_64-linux-gnu/libSDL2.so
50390: trying file=/snap/dotnet-sdk/177/lib/x86_64-linux-gnu/libSDL2.so
50390: trying file=/lib/x86_64-linux-gnu/libSDL2.so
50390: /snap/dotnet-sdk/177/lib/x86_64-linux-gnu/libm.so.6: error: version lookup error: version `GLIBC_2.29' not found (required by /lib/x86_64-linux-gnu/libSDL2.so) (fatal)
50390: find library=SDL2 [0]; searching
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../lib/x86_64-linux-gnu/SDL2
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../usr/lib/x86_64-linux-gnu/SDL2
50390: trying file=/snap/dotnet-sdk/177/usr/lib/x86_64-linux-gnu/SDL2
50390: trying file=/snap/dotnet-sdk/177/lib/x86_64-linux-gnu/SDL2
50390: trying file=/lib/x86_64-linux-gnu/SDL2
50390: trying file=/usr/lib/x86_64-linux-gnu/SDL2
50390: trying file=/lib/SDL2
50390: trying file=/usr/lib/SDL2
50390: find library=libSDL2 [0]; searching
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../lib/x86_64-linux-gnu/libSDL2
50390: trying file=/snap/dotnet-sdk/177/shared/Microsoft.NETCore.App/6.0.8/../../../usr/lib/x86_64-linux-gnu/libSDL2
50390: trying file=/snap/dotnet-sdk/177/usr/lib/x86_64-linux-gnu/libSDL2
50390: trying file=/snap/dotnet-sdk/177/lib/x86_64-linux-gnu/libSDL2
50390: trying file=/lib/x86_64-linux-gnu/libSDL2
50390: trying file=/usr/lib/x86_64-linux-gnu/libSDL2
50390: trying file=/lib/libSDL2
50390: trying file=/usr/lib/libSDL2
50390: /snap/dotnet-sdk/177/lib/x86_64-linux-gnu/libc.so.6: error: version lookup error: version `GLIBC_2.33' not found (required by /home/peter/.nuget/packages/diku.canvas/1.0.0/runtimes/linux-x64/native/libSDL2.so) (fatal)
System.DllNotFoundException: Unable to load shared library 'SDL2' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libSDL2: cannot open shared object file: No such file or directory
Adding support for mouse events does not seem too complicated and would greatly increase the possibilities for "reactive programming" - one of the things we "lost" when WinForms-support was removed from Mono.
The SDL_MouseButtonEvent looks a lot like the key-event (at least complexity-wise).
https://wiki.libsdl.org/SDL_MouseButtonEvent
// Edit
Having looked a bit into it, "not too complicated" is an understatement.
Currently we define the SDL_KeyboardEvent struct, and assume all events are keyboard-events (or that we only need the event type).
To handle SDL_MouseButtonEvent as well, (I think) we need to implement support for SDL_Event, a union of event-structs.
Since the SDL_KeyboardEvent and SDL_MouseButtonEvent structs have overlapping fields, they are hard to convert to managed code. I am not experienced enough with PInvoke/Interop-stuff to see a good solution to this.
I guess it might be possible to marshall all events into a byte array of fixed size and construct the managed objects we need manually.
Currently saving a canvas to png works in these cases:
ld
/dyld
.SDL2_image
attempts to load SDL2
but can not find the bundled SDL2.{so,dylib}
.
My best proposed fix, which will also solve other problems (and bring more, yay!):
New problems:
Mac
Build
a custom SDL2_image.dylib
either as a fat lib or as two separate libs for x64 and arm64.install_name_tool
to edit RPATH of the library.Linux
SDL2_image.so
.patchelf
to change the RPATH.Version 2.26.0 of SDL2 is now released.
We should keep a log of changes as the API develops.
The type ImgUtilKey
should be renamed to CanvasKey
or something.
Alas, this is a breaking API change.
Currently there is no easy way to work with multiple images. For instance, sprites in a game.
I think we need a separate Image
type and support API, perhaps something like:
type Image
val dimensions : Image -> {width : int; height : int}
val loadImage : string -> Image
val saveImage : Image -> string -> unit
val drawImage : canvas -> Image -> (int*int) -> unit
val toImage : canvas -> Image
Calling the piecewiseAffine function such that it would draw no line crashes the program.
The issue only appears when all elements in the list are equal.
Calling piecewiseAffine white 1 [(0,0);(0,0);(0,0)] will crash, but piecewiseAffine white 1 [(0,0);(0,0);(0,1)] will not.
When giving the interact function a react function that is slower to evaluate than the time it takes for a new event to appear, new events flood the queue, meaning that the evaluation of new events get further and further behind.
The problem is also dependent on the speed of the system, e.g. some systems won't experience it while slower ones might.
An example would be the 10g reference solution: https://github.com/diku-dk/PoP/blob/main/referenceSolutions/2023/10g/AsteroidApp.fs
If the draw
argument for runApp
returns a canvas that's to small or to big wrt the given arguments, the result is strange.
For instance, the following program:
#r "nuget:DIKU.Canvas, 1.0.0"
let bug =
Canvas.runApp "Opps" 42 69
(fun _ _ _ -> Canvas.create 420 4220) (fun _ _ -> None) ()
Will give an System.ArgumentException: Destination array was not long enough
error.
Likewise, the following program:
#r "nuget:DIKU.Canvas, 1.0.0"
let bug =
let apple = Canvas.fromFile "apple.jpg"
Canvas.runApp "Oh no" (Canvas.height apple) (Canvas.width apple) // width and height is swapped
(fun _ _ _ -> apple) (fun _ _ -> None) ()
Where the width
and height
arguments to runApp
are swapped, results in garbled output.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.