async void AddScene_Click(object sender, RoutedEventArgs e)
        {
            SceneSettingsDlg settingsDlg = new SceneSettingsDlg();

            settingsDlg.Owner = this.Parent as Window;

            settingsDlg.ShowDialog();

            if (!settingsDlg.DialogResult.HasValue || !settingsDlg.DialogResult.Value)
            {
                return;
            }

            ReCapPhotosceneOptionsBuilder options =
                new ReCapPhotosceneOptionsBuilder(
                    settingsDlg.MeshQuality,
                    settingsDlg.MeshFormat);

            var id = await CreateNewPhotoscene(
                settingsDlg.SceneName,
                options);

            if (id != string.Empty)
            {
                ShowProgressDlg(settingsDlg.SceneName, id);
            }
        }
        async void NewScene_Click(object sender, EventArgs e)
        {
            SceneSettingsForm settingsForm = new SceneSettingsForm(
                "ADN - " + GetTimeStamp());

            if (settingsForm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }

            ReCapPhotosceneOptionsBuilder options =
                new ReCapPhotosceneOptionsBuilder(
                    settingsForm.MeshQuality,
                    settingsForm.MeshFormat);

            var id = await CreateNewPhotoscene(
                settingsForm.SceneName,
                options);

            if (id != string.Empty)
            {
                var sceneWithInfo = await RetrieveSceneInfo(id);

                if (sceneWithInfo != null)
                {
                    var root = _TreeViewScenes.Nodes[0];

                    TreeNode node =
                        root.Nodes.Add(
                            sceneWithInfo.PhotosceneId,
                            sceneWithInfo.SceneName,
                            2, 2);

                    node.Tag = sceneWithInfo;
                }

                ShowProgressForm(settingsForm.SceneName, id);
            }
        }
        async void AddScene_Click(object sender, RoutedEventArgs e)
        {
            SceneSettingsDlg settingsDlg = new SceneSettingsDlg();

            settingsDlg.Owner = this.Parent as Window;

            settingsDlg.ShowDialog();

            if (!settingsDlg.DialogResult.HasValue || !settingsDlg.DialogResult.Value)
            {
                return;
            }

            ReCapPhotosceneOptionsBuilder options =
                new ReCapPhotosceneOptionsBuilder(
                    settingsDlg.MeshQuality,
                    settingsDlg.MeshFormat);

            var id = await CreateNewPhotoscene(
                settingsDlg.SceneName,
                options);

            if (id != string.Empty)
            {
                var sceneWithInfo = await RetrieveSceneInfo(id);

                if (sceneWithInfo != null)
                {
                    RootNode.AddNode(
                        new ReCapTreeItem(
                            sceneWithInfo,
                            Properties.Resources.file));
                }

                ShowProgressDlg(settingsDlg.SceneName, id);
            }
        }
        CreatePhotosceneAsync(
            string sceneName,
            ReCapPhotosceneOptionsBuilder options)
        {
            var request = new RestRequest("photoscene", Method.POST);

            request.AddParameter("clientID", _clientId);
            request.AddParameter("scenename", sceneName);
            request.AddParameter("json", 1);

            if (options != null)
            {
                var opts = options.ToPhotosceneOptions();

                foreach (var entry in opts)
                {
                    request.AddParameter(entry.Key, entry.Value);
                }
            }

            return(_restClient.ExecuteAsync
                   <ReCapPhotosceneResponse>(
                       request));
        }
        async Task <string> CreateNewPhotoscene(
            string sceneName,
            ReCapPhotosceneOptionsBuilder options)
        {
            string[] files = UIHelper.FileSelect(
                "Select Pictures",
                "(*.jpg)|*.jpg",
                true);

            if (files == null)
            {
                return(string.Empty);
            }

            // Step 1 - Create a new Photoscene

            var createResult = await _reCapClient.CreatePhotosceneAsync(
                sceneName,
                options);

            if (!createResult.IsOk())
            {
                OnLogReCapError(createResult.Error);

                return(string.Empty);
            }

            OnLogMessage("New scene created: " + sceneName +
                         " [Id: " + createResult.Photoscene.PhotosceneId + "]");

            var sceneWithInfo = await RetrieveSceneInfo(
                createResult.Photoscene.PhotosceneId);

            if (sceneWithInfo != null)
            {
                RootNode.AddNode(
                    new ReCapTreeItem(
                        sceneWithInfo,
                        Properties.Resources.file));
            }

            // Step 2 - Upload pictures

            OnLogMessage("Uploading " + files.Length +
                         " images for scene: " + sceneName);

            string photosceneId = createResult.Photoscene.PhotosceneId;

            var uploadResultArray = await _reCapClient.UploadFilesAsync(
                photosceneId,
                files);

            foreach (var uploadResult in uploadResultArray)
            {
                if (!uploadResult.IsOk())
                {
                    OnLogReCapError(uploadResult.Error);

                    //return;
                }
            }

            OnLogMessage("Files uploaded for scene: " + sceneName);

            // Step 3 - start processing the Photoscene

            var processResult = await _reCapClient.ProcessPhotosceneAsync(
                photosceneId);

            if (!processResult.IsOk())
            {
                OnLogReCapError(processResult.Error);

                return(photosceneId);
            }

            OnLogMessage("Start processing for scene: " + sceneName);

            return(photosceneId);
        }
        async Task <string> CreateNewPhotoscene(
            string sceneName,
            ReCapPhotosceneOptionsBuilder options)
        {
            string[] files = UIHelper.FileSelect(
                "Select Pictures",
                "(*.jpg)|*.jpg",
                true);

            if (files == null)
            {
                return(string.Empty);
            }

            // Step 1 - Create a new Photoscene

            var createResult = await _reCapClient.CreatePhotosceneAsync(
                sceneName,
                options);

            if (!createResult.IsOk())
            {
                OnLogReCapError(createResult.Error);

                return(string.Empty);
            }

            OnLogMessage("New scene created: " + sceneName);

            // Step 2 - Upload pictures

            string photosceneId = createResult.Photoscene.PhotosceneId;

            var uploadResult = await _reCapClient.UploadFilesAsync(
                photosceneId,
                files);

            if (!uploadResult.IsOk())
            {
                OnLogReCapError(uploadResult.Error);

                return(string.Empty);
            }

            OnLogMessage("Files uploaded for scene: " + sceneName);

            // Step 3 - start processing the Photoscene

            var processResult = await _reCapClient.ProcessPhotosceneAsync(
                photosceneId);

            if (!processResult.IsOk())
            {
                OnLogReCapError(processResult.Error);

                return(string.Empty);
            }

            OnLogMessage("Start processing for scene: " + sceneName);

            return(photosceneId);
        }