using System; using System.Collections.Generic; using System.Linq; using System.Text; using Blacklight.Core; using Blacklight.Core.Drawables; using Blacklight.Core.Cameras; using Azimuth; using Annulus.CSG; using Annulus; using Polygon = Blacklight.Core.Drawables.Polygon; namespace Blacklight.Testbed { public class World { Blacklight.Core.Cameras.MicroscopeCamera camera = null; Scene scene = new Scene(); Cel cel = new Cel(); Entity entity = new Entity(); Collage collage = new Collage(); WindowHandle viewport = null; public World() { scene.Cels.Add(cel); entity.drawable = collage; entity.modelToWorld = Matrix.Identity; cel.AddEntity(entity); Matrix transform; DrawPrimitive primitive; Matrix rotateBy45degrees = new Matrix(Math.PI / 2, Vector.Zero); { primitive = new Rectangle(); primitive.InsideColor = new Blacklight.Core.Color(1, 0, 0.5, 1); primitive.ShellColor = new Blacklight.Core.Color(0, 1, 0.5, 1); primitive.ShellModelSpaceThickness = 0.1; primitive.ShellPixelThickness = 3; transform = new Matrix(.7, new Vector(50, 50), 10); primitive.Antialiased = true; transform.M00 *= 1.112233; transform.M01 *= 3; transform.M10 *= 4; transform.M11 *= 10; transform = rotateBy45degrees * transform; collage.AddDrawable(primitive, transform); } { primitive = new Rectangle(); primitive.InsideColor = new Blacklight.Core.Color(1, 0, 0.5, 1); primitive.ShellColor = new Blacklight.Core.Color(0, 1, 0.5, 1); primitive.ShellPixelThickness = 20; transform = new Matrix(.7, new Vector(-150, -150), 10); transform.M00 *= 1.112233; transform.M01 *= 3; transform.M10 *= 4; transform.M11 *= 10; transform = rotateBy45degrees * transform; primitive.Antialiased = true; collage.AddDrawable(primitive, transform); } { primitive = new Ellipse(); primitive.InsideColor = new Blacklight.Core.Color(1, 0, 0.5, 1); primitive.ShellColor = new Blacklight.Core.Color(0, 1, 0.5, 1); //primitive.ShellModelSpaceThickness = 0.1; primitive.ShellPixelThickness = 2; transform = new Matrix(0, new Vector(50, -200), 10); primitive.Antialiased = true; //transform.M00 *= 1.001; //transform.M10 *= 2; //transform.M01 *= 0.3; //transform.M11 *= 0.3; /*transform.M00 *= 1.112233; transform.M01 *= 3; transform.M10 *= 4; transform.M11 *= 10;*/ //transform = rotateBy45degrees * transform; collage.AddDrawable(primitive, transform); } { primitive = new Ellipse(); primitive.InsideColor = new Blacklight.Core.Color(1, 0, 0, 0); primitive.ShellColor = new Blacklight.Core.Color(0, 1, 0.5, 1); primitive.ShellPixelThickness = 2; //primitive.ShellModelSpaceThickness = 0.1; transform = new Matrix(.7, new Vector(50, -400), 10); transform.M00 *= 1.112233; transform.M01 *= 3; transform.M10 *= 4; transform.M11 *= 10; transform = rotateBy45degrees * transform; primitive.Antialiased = true; collage.AddDrawable(primitive, transform); } { const int levels = 31; ulong runningSum = 0; const ulong divisor = 0x1 << (levels / 2); int j = levels - 1; for (int i = levels / 2; i >= -levels / 2; --i, --j) { ulong currentLevel = (ulong)(0x1 << j); double radius = (double)(currentLevel) / (double)(divisor); primitive = new Ellipse(); primitive.InsideColor = new Blacklight.Core.Color(1, 1, 0, 0.5); primitive.ShellColor = new Blacklight.Core.Color(0, 1, 1, 0.5); //primitive.ShellPixelThickness = ; primitive.ShellModelSpaceThickness = 0.5; transform = new Matrix(0, new Vector(250 + (double)runningSum / (double)divisor + radius, 150), radius); primitive.Antialiased = true; collage.AddDrawable(primitive, transform); runningSum += 2 * currentLevel; } } // Test polygon { var vertices = new PerforatedPolygon(new SimplePolygon(new Vector[] { new Vector(-2, 3), new Vector(2, 3), new Vector(2, -3), new Vector(-2, -3), }), new SimplePolygon[] { new SimplePolygon(new Vector[] { new Vector(1, 1), new Vector(1, 2), new Vector(-1, 2), new Vector(-1, 1), }), new SimplePolygon(new Vector[] { new Vector(1, -2), new Vector(1, -1), new Vector(-1, -1), new Vector(-1, -2), })}); { Polygon poly = new Polygon(vertices); primitive = poly; primitive.InsideColor = new Blacklight.Core.Color(0.33, 0, 0.33, 1); primitive.ShellColor = new Blacklight.Core.Color(0.66, 0, 0.66, 1); primitive.ShellPixelThickness = 3; primitive.ShellModelSpaceThickness = 0; transform = new Matrix(0.7, new Vector(0, 0), 10); primitive.Antialiased = true; collage.AddDrawable(primitive, transform); } } } public void BindToViewport(WindowHandle handle) { camera = new Blacklight.Core.Cameras.MicroscopeCamera(handle); this.viewport = handle; viewport.Invalidated += delegate(object sender, EventArgs e) { DrawScene(); }; } public void DrawScene() { viewport.DrawScene(scene, camera); } } }