Exemple #1
0
        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
        }
Exemple #2
0
        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;
                }
            }
        }