/// <summary> /// This is a javascript application. /// </summary> /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param> public Application(IApp page) { // X:\jsc.svn\examples\javascript\CanvasMarchinAntsExperiment\CanvasMarchinAntsExperiment\Application.cs // http://mattdesl.svbtle.com/drawing-lines-is-hard Native.body.Clear(); Native.body.style.margin = "0px"; Native.body.style.overflow = IStyle.OverflowEnum.hidden; // http://threejs.org/examples/webgl_lines_dashed.html var objects = new List <THREE.Line>(); var camera = new THREE.PerspectiveCamera(60, Native.window.aspect, 1, 200); camera.position.z = 150; var scene = new THREE.Scene(); scene.fog = new THREE.Fog(0x111111, 150, 200); var root = new THREE.Object3D(); var subdivisions = 6; var recursion = 1; var points = hilbert3D(new THREE.Vector3(), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7); Console.WriteLine( new { points.Length } ); #region spline var spline = new THREE.Spline(points); var geometrySpline = new THREE.Geometry(); for (var i = 0; i < points.Length * subdivisions; i++) { var index = (double)i / (points.Length * subdivisions); var position = spline.getPoint(index); geometrySpline.vertices[i] = new THREE.Vector3(position.x, position.y, position.z); Console.WriteLine( new { i, index, position.x, position.y, position.z } ); } #endregion var geometryCube = cube(50); geometryCube.computeLineDistances(); geometrySpline.computeLineDistances(); { var ogeometrySpline = new THREE.Line(geometrySpline, new THREE.LineDashedMaterial( new { color = 0xffffff, dashSize = 1, gapSize = 0.5 } ), THREE.LineStrip); objects.Add(ogeometrySpline); scene.add(ogeometrySpline); ogeometrySpline.AttachTo(scene); } { var ogeometryCube = new THREE.Line(geometryCube, new THREE.LineDashedMaterial( new { color = 0xffaa00, dashSize = 3, gapSize = 1, linewidth = 2 } ), THREE.LinePieces); objects.Add(ogeometryCube); ogeometryCube.AttachTo(scene); } { var geometry = new THREE.Geometry { vertices = new[] { new THREE.Vector3(0, 0, 0), new THREE.Vector3(100, 0, 0) } }; var oline = new THREE.Line(geometry, new THREE.LineDashedMaterial( new { color = 0x00aaff, dashSize = 3, gapSize = 3, linewidth = 20 } ), THREE.LinePieces); objects.Add(oline); //scene.add(o); oline.AttachTo(scene); } var renderer = new THREE.WebGLRenderer(new { antialias = true }); renderer.setClearColor(0x111111); //renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( Native.window.Width, Native.window.Height ); renderer.domElement.AttachToDocument(); var controls = new THREE.OrbitControls(camera, renderer.domElement); var sw = Stopwatch.StartNew(); Native.window.onframe += delegate { //var time = sw.ElapsedMilliseconds * 0.001; //for (var i = 0; i < objects.Count; i++) //{ // var o = objects[i]; // //object.rotation.x = 0.25 * time * ( i%2 == 1 ? 1 : -1); // o.rotation.x = 0.25 * time; // o.rotation.y = 0.25 * time; //} controls.update(); camera.position = controls.center.clone(); renderer.render(scene, camera); }; //var ze = new ZeProperties //{ // //() => renderer //}; //ze.Show(); //ze.treeView1.Nodes.Clear(); //ze.Add(() => renderer); //ze.Add(() => controls); //ze.Add(() => scene); //ze.Left = 0; }
/// <summary> /// This is a javascript application. /// </summary> /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param> public Application(IApp page) { // X:\jsc.svn\examples\javascript\CanvasMarchinAntsExperiment\CanvasMarchinAntsExperiment\Application.cs // http://mattdesl.svbtle.com/drawing-lines-is-hard Native.body.Clear(); Native.body.style.margin = "0px"; Native.body.style.overflow = IStyle.OverflowEnum.hidden; // http://threejs.org/examples/webgl_lines_dashed.html var objects = new List<THREE.Line>(); var camera = new THREE.PerspectiveCamera(60, Native.window.aspect, 1, 200); camera.position.z = 150; var scene = new THREE.Scene(); scene.fog = new THREE.Fog(0x111111, 150, 200); var root = new THREE.Object3D(); var subdivisions = 6; var recursion = 1; var points = hilbert3D(new THREE.Vector3(), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7); Console.WriteLine( new { points.Length } ); #region spline var spline = new THREE.Spline(points); var geometrySpline = new THREE.Geometry(); for (var i = 0; i < points.Length * subdivisions; i++) { var index = (double)i / (points.Length * subdivisions); var position = spline.getPoint(index); geometrySpline.vertices[i] = new THREE.Vector3(position.x, position.y, position.z); Console.WriteLine( new { i, index, position.x, position.y, position.z } ); } #endregion var geometryCube = cube(50); geometryCube.computeLineDistances(); geometrySpline.computeLineDistances(); { var ogeometrySpline = new THREE.Line(geometrySpline, new THREE.LineDashedMaterial( new { color = 0xffffff, dashSize = 1, gapSize = 0.5 } ), THREE.LineStrip); objects.Add(ogeometrySpline); scene.add(ogeometrySpline); ogeometrySpline.AttachTo(scene); } { var ogeometryCube = new THREE.Line(geometryCube, new THREE.LineDashedMaterial( new { color = 0xffaa00, dashSize = 3, gapSize = 1, linewidth = 2 } ), THREE.LinePieces); objects.Add(ogeometryCube); ogeometryCube.AttachTo(scene); } { var geometry = new THREE.Geometry { vertices = new[] { new THREE.Vector3(0, 0, 0), new THREE.Vector3(100, 0, 0) } }; var oline = new THREE.Line(geometry, new THREE.LineDashedMaterial( new { color = 0x00aaff, dashSize = 3, gapSize = 3, linewidth = 20 } ), THREE.LinePieces); objects.Add(oline); //scene.add(o); oline.AttachTo(scene); } var renderer = new THREE.WebGLRenderer(new { antialias = true }); renderer.setClearColor(0x111111); //renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( Native.window.Width, Native.window.Height ); renderer.domElement.AttachToDocument(); var controls = new THREE.OrbitControls(camera, renderer.domElement); var sw = Stopwatch.StartNew(); Native.window.onframe += delegate { //var time = sw.ElapsedMilliseconds * 0.001; //for (var i = 0; i < objects.Count; i++) //{ // var o = objects[i]; // //object.rotation.x = 0.25 * time * ( i%2 == 1 ? 1 : -1); // o.rotation.x = 0.25 * time; // o.rotation.y = 0.25 * time; //} controls.update(); camera.position = controls.center.clone(); renderer.render(scene, camera); }; //var ze = new ZeProperties //{ // //() => renderer //}; //ze.Show(); //ze.treeView1.Nodes.Clear(); //ze.Add(() => renderer); //ze.Add(() => controls); //ze.Add(() => scene); //ze.Left = 0; }