public MainPage() { InitializeComponent(); string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal); string databaseFilePath = Path.Combine(path, "Scene.db"); db = new SQLiteConnection(databaseFilePath); renderedImage = new SKBitmap((int)DeviceDisplay.MainDisplayInfo.Width / 4, ((int)DeviceDisplay.MainDisplayInfo.Height - 125) / 4); sc = new SceneHandler(GetCameraFromEntry(), db); renderTimer = new Timer(); renderTimer.Interval = 100; renderTimer.Elapsed += RenderTimer_Elapsed; renderTimer.Start(); BindingContext = this; LoadShapesIntoOC(); LoadLightsIntoOC(); TypePicker.SelectedIndex = 0; shapeOptions.IsVisible = true; shapeOptions.IsEnabled = true; optionsView.Content = shapeOptions; #region Reset Table /*db.DropTable<SceneDescription>(); * db.DropTable<Shape>(); * db.DropTable<Light>(); * db.CreateTable<SceneDescription>(); * db.CreateTable<Shape>(); * db.CreateTable<Light>(); * sc.LoadRandomScene(); * sc.SaveScene("RandomShapes"); * sc.SingleSphereInfrontOfCamera(); * sc.SaveScene("OneSphere"); * sc.shapes = new List<Shape>(); * sc.lights = new List<Light>();*/ //ha mindent shapeként mentesz akkor szar lesz a SDF mert nincs a shapenek SDF-je /*db.DropTable<SceneDescription>(); * db.DropTable<Shape>(); * db.DropTable<Light>(); * db.DropTable<Torus>(); * db.DropTable<Box>(); * db.DropTable<Sphere>(); * db.DropTable<Plane>();*/ db.CreateTable <SceneDescription>(); db.CreateTable <Light>(); db.CreateTable <Torus>(); db.CreateTable <Box>(); db.CreateTable <Sphere>(); db.CreateTable <Plane>(); sc.LoadRandomScene(); sc.SaveScene("RandomShapes"); sc.SingleSphereInfrontOfCamera(); sc.SaveScene("OneSphere"); sc.shapes = new List <Shape>(); sc.lights = new List <Light>(); //sc.SingleSphereInfrontOfCamera(); #endregion }
async void OnCanvasViewTapped(object sender, EventArgs e) { List <string> scenes = new List <string>(); string action = await DisplayActionSheet("What to do?", null, null, "Load Scene", "Save Scene", "Delete Scene", "Render Scene"); if (action == "Load Scene") { var sceneDescs = db.Table <SceneDescription>(); foreach (var item in sceneDescs) { scenes.Add(item.sceneName); } string whatToLoad = await DisplayActionSheet("Which scene to load?", null, null, scenes.ToArray()); if (whatToLoad != null) { sc.LoadScene(whatToLoad); sc.SetMainCamera(GetCameraFromEntry()); LoadShapesIntoOC(); LoadLightsIntoOC(); } } else if (action == "Save Scene") { string sceneName = await DisplayPromptAsync("Save Scene", "Scene name:"); sc.SaveScene(sceneName); } else if (action == "Delete Scene") { var sceneDescs = db.Table <SceneDescription>(); foreach (var item in sceneDescs) { scenes.Add(item.sceneName); } string whatToDelete = await DisplayActionSheet("Which scene to load?", null, null, scenes.ToArray()); if (whatToDelete != null) { sc.DeleteScene(whatToDelete); } } else if (action == "Render Scene") { bigImage = new SKBitmap(1024, 1024); sc.mainCamera.finishedRendering = false; sc.mainCamera.Render(bigImage); Toast.MakeText(Android.App.Application.Context, "Rendering, please wait! (it may take a loooong time)", ToastLength.Long).Show(); while (!sc.mainCamera.finishedRendering) { Console.WriteLine("still busy"); await Task.Delay(25); } try { using (MemoryStream ms = new MemoryStream()) { using (SKManagedWStream wstream = new SKManagedWStream(ms)) { bigImage.Encode(wstream, SKEncodedImageFormat.Png, 100); byte[] data = ms.ToArray(); var status = await CrossPermissions.Current.CheckPermissionStatusAsync <StoragePermission>(); if (status != Plugin.Permissions.Abstractions.PermissionStatus.Granted) { await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Plugin.Permissions.Abstractions.Permission.Storage); status = await CrossPermissions.Current.RequestPermissionAsync <StoragePermission>(); } if (status == Plugin.Permissions.Abstractions.PermissionStatus.Granted) { string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png"; if (!Directory.Exists(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/DCIM/xTracer")) { Directory.CreateDirectory(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/DCIM/xTracer"); } if (File.Exists(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/DCIM/xTracer/" + filename)) { File.Delete(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/DCIM/xTracer/" + filename); } using (var stream = File.Create(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/DCIM/xTracer/" + filename)) { stream.Write(data, 0, data.Length); Toast.MakeText(Android.App.Application.Context, "Finished rendering!, saved to " + Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/DCIM/xTracer/" + filename, ToastLength.Long).Show(); } } } } } catch (Exception) { throw; } } }