/// <summary> /// Called when the filter parametrisation is finished. /// </summary> /// <param name="sender">Is null.</param> /// <param name="args">Is null.</param> private void FilterArea_CloseArea(object sender, System.EventArgs args) { if (!(FilterArea.AreaResult is float value)) { return; } FilterArea.CloseArea -= FilterArea_CloseArea; AreaContent.SetActive(false); FilterArea.gameObject.SetActive(false); _loadingTask = Task.Run(async() => { try { if (_scripts == null || !_scripts.Any()) { _snackBar.ShowError("Connectivity error"); return; } _snackBar.ClearError(); var targetFile = Path.Combine(_persistentPath, "reduced.obj"); //var scriptToUse = _scripts.FirstOrDefault(s => s.FileName.Equals("QuadricEdgeCollapseDecimation.mlx")).LstFilters.FirstOrDefault(f => f.Name.Equals("Simplification: Quadric Edge Collapse Decimation")); var scriptToUse = _scripts.FirstOrDefault(s => s.LstFilters.Any(f => f.Name.Equals("Simplification: Quadric Edge Collapse Decimation"))); if (scriptToUse == null) { _snackBar.ShowError("No suitable script on server!"); return; } var filter = scriptToUse.LstFilters.FirstOrDefault(f => f.Name.Equals("Simplification: Quadric Edge Collapse Decimation")); if (filter == null) { _snackBar.ShowError("No suitable script on server!"); return; } var param = filter.LstParameters.FirstOrDefault(p => p.Name.Equals("TargetPerc")); if (param == null) { _snackBar.ShowError("No suitable script on server!"); return; } else { _snackBar.ClearError(); } var paramValue = (double)value; paramValue = Math.Round(paramValue, 2); param.DefaultValue = paramValue.ToString(CultureInfo.InvariantCulture); var stream = File.Open(_fileToReduce, FileMode.Open); var fileName = _fileToReduce.Substring(_fileToReduce.LastIndexOf(Path.DirectorySeparatorChar) + 1); FileParameter file = new FileParameter(stream, fileName); var paramList = new List <ScriptParameterFilter>(); var dictionary = new Dictionary <string, string> { { param.Name, param.DefaultValue } }; paramList.Add(new ScriptParameterFilter { FilterName = filter.Name, FilterParameter = dictionary }); var paramJson = JsonConvert.SerializeObject(paramList); var jobResult = await _client.UploadJobAsync(file, paramJson, scriptToUse.FileName, "1"); if (jobResult == null || jobResult.ResultCode.Number != 0) { _snackBar.ShowError("Connectivity error"); return; } _snackBar.ClearError(); _snackBar.UpdateInfo(jobResult); var reducedResult = await _client.DownloadJobFileResultAsync(jobResult.FileResultName, jobResult.JobId); if (reducedResult == null) { _snackBar.ShowError("Connectivity error"); return; } if (File.Exists(targetFile)) { File.Delete(targetFile); } using (reducedResult.Stream) using (var resultStream = File.Open(targetFile, FileMode.CreateNew)) { await reducedResult.Stream.CopyToAsync(resultStream); _controller.MeshFile = targetFile; } } catch (Exception e) { Debug.Log($"Exception Occurred: {e}"); } }); }