private static void EndRender(LogDisplayModel logDisplay, int maxIterations, TimeSpan elapsed, RenderActionsModel renderActions, string message, bool draftMode, int renderId) { Debug.WriteLine($"EndRender [{renderId}]"); IsRendering = false; if (draftMode) { renderActions.ActionMessage?.Invoke($"draft render ends in {elapsed:hh\\:mm\\:ss}"); return; } Display = logDisplay; _iterations = maxIterations; _renderTime = elapsed; renderActions.ActionRenderState?.Invoke(StateRenderEnded, true); renderActions.ActionMessage?.Invoke(message); }
private void InitPost() { if (!_currentLoaderSaverProvider.Result) { return; } var flameModel = _currentLoaderSaverProvider.Flame; GetGradientModel(flameModel, out var gradientModel, out var gradientValues); if (gradientModel != null) { _postModel.GradientModel = gradientModel; _postModel.GradientValues = gradientValues; RadioGradient = true; } _postModel.BackColor = flameModel.BackColor; _postModel.TransformColors = flameModel.FunctionColors.ToArray(); _postModel.DisplayArray = _currentLoaderSaverProvider.DisplayArray; _displayModel = new LogDisplayModel(_postModel.DisplayArray, _postModel.BackColor); }
private async void DeleteControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { string strErrorMsg = string.Empty; try { List <int> idList = new List <int>(); for (int i = 0; i < gvLog.SelectedItems.Count; i++) { LogDisplayModel logDisplayModel = (LogDisplayModel)gvLog.SelectedItems[i]; idList.Add(logDisplayModel.Id); } if (idList.Count > 0) { bool isDel = await logAsyncProxy.CallAsync(c => c.DeleteByIdList(idList)); BindGridLog(); } else { //await DialogManager.ShowMessageAsync(this, UIResources.MsgError, "删除选中日志失败!原因:" + strErrorMsg, MessageDialogStyle.Affirmative, null); } #region //for (int rowCounter = 0; rowCounter < gvLog.Items.Count; rowCounter++) //{ // object o = gvLog.Items[rowCounter]; // GridViewRow grdLogRow = (GridViewRow)gvLog.ItemContainerGenerator.ContainerFromItem(o); // if (grdLogRow != null) // { // CheckBox chkLogChecked = grdLogRow.Cells[0].FindChildByType<CheckBox>(); // if (chkLogChecked.IsChecked == true) // { // //grdLogRow.Cells[1] // LogDisplayModel logDisplayModel = (LogDisplayModel)gvLog.Items[rowCounter]; // idList.Add(logDisplayModel.Id); // } // } //} //if (idList.Count > 0) //{ // bool isDel = await asyncProxy.CallAsync(c => c.DeleteByIdList(idList)); //} #endregion } catch (TimeoutException timeProblem) { strErrorMsg = timeProblem.Message + UIResources.TimeOut + timeProblem.Message; } catch (FaultException <LCFault> af) { strErrorMsg = af.Detail.Message; } catch (FaultException unknownFault) { strErrorMsg = UIResources.UnKnowFault + unknownFault.Message; } catch (CommunicationException commProblem) { strErrorMsg = UIResources.ConProblem + commProblem.Message + commProblem.StackTrace; } catch (Exception ex) { strErrorMsg = ex.Message; } if (strErrorMsg != string.Empty) { //await DialogManager.ShowMessageAsync(this, UIResources.MsgError, "删除选中日志失败!原因:" + strErrorMsg, MessageDialogStyle.Affirmative, null); } }
public static string GetLogDisplayString(LogDisplayModel logDisplay) { var array = logDisplay.GetArrayCopy(); return(JsonConvert.SerializeObject(array, Formatting.Indented, JsonSerializerSettings)); }
public static void Estimation(LogDisplayModel display, double minKernelRadius, double maxKernelRadius, double alpha, out LogDisplayModel newDisplay) { Debug.WriteLine($"Estimation START"); var maxShots = display.Max; var avgShots = display.GetAvgShots(); var array = display.GetArrayCopy(); var newArray = new uint[array.GetLength(0), array.GetLength(1), display.ColorCount]; var width = display.Width; var height = display.Height; Algebra.DividePlane(width, height, Environment.ProcessorCount, out var dic); var length = dic.Count; const double gamma = 1.0 / 1.1; Parallel.For(0, length, i => { var d = dic[i]; for (var y = d[1]; y < d[1] + d[3]; y++) { for (var x = d[0]; x < d[0] + d[2]; x++) { var countShots = CountShots(array, x, y); // var kernelWidth = (int) maxKernelRadius; var kernelWidth = 0; if (countShots > 0) { // var density = 1.0 - Math.Pow(Math.Log(countShots + 1.0, maxShots), gamma); //var kernelWidth = GetKernelWidth(density, maxKernelRadius, minKernelRadius, alpha); //var density = maxShots / countShots; //kernelWidth = (int) (maxKernelRadius / Math.Pow(countShots, alpha)); var density = 1.0 - Math.Pow(Math.Log(countShots + 1.0, avgShots), gamma); kernelWidth = (int)Math.Round(density * maxKernelRadius); kernelWidth = Math.Max(0, kernelWidth); } if (kernelWidth > 0) { const double weight = 1.2; var kernel = GetKernel(kernelWidth, weight); var k = K(kernel, array, x, y); Copy(x, y, k, newArray); } else { Copy(x, y, array, newArray); } } } }); newDisplay = new LogDisplayModel(newArray, display.BackColor) { RenderColorMode = display.RenderColorMode }; Debug.WriteLine($"Estimation END"); }
private static RenderSequenceModel PrepareRsm(RenderPackModel renderPack, RenderActionsModel renderActionsPack, int renderId, bool draftMode = true, bool continueRender = false) { var cores = Environment.ProcessorCount; var symmetry = renderPack.ViewSettings.Symmetry; var totalPointsPerIteration = renderPack.RenderSettings.ShotsPerIteration; var imageSize = new Size(renderPack.ViewSettings.ImageWidth, renderPack.ViewSettings.ImageHeight); var renderColorMode = renderPack.RenderSettings.RenderColorMode; var translationMatrix = Matrix.FromViewSettings(renderPack.ViewSettings); var colorCount = renderPack.Transformations.Length; var iterators = new IteratorModel[cores]; for (var i = 0; i < cores; i++) { iterators[i] = new IteratorModel(renderPack); } var sector = Math.PI * 2.0 / symmetry; LogDisplayModel display; if (continueRender && HasRender) { display = Display; } else { display = new LogDisplayModel((int)imageSize.Width, (int)imageSize.Height, renderPack.Transformations.Length, renderPack.ViewSettings.BackColor); } display.RenderColorMode = renderColorMode; _transformationColors = new Color[colorCount]; _transformationGradientValues = new double[colorCount]; for (var i = 0; i < colorCount; i++) { _transformationColors[i] = renderPack.Transformations[i].Color; } for (var i = 0; i < colorCount; i++) { _transformationGradientValues[i] = renderPack.Transformations[i].ColorPosition; } _gradModel = renderPack.GradModelCopy; var rsm = new RenderSequenceModel { TotalIterations = renderPack.RenderSettings.Iterations, Cores = cores, Iterators = iterators, TotalPointsPerCore = totalPointsPerIteration / cores / symmetry, Symmetry = symmetry, TranslationArray = translationMatrix.Array, CenterPoint = new Point(renderPack.ViewSettings.HalfWidth, renderPack.ViewSettings.HalfHeight), ImageSize = imageSize, Display = display, RenderActionsPack = renderActionsPack, RenderId = renderId, DraftMode = draftMode, RenderPack = renderPack, IsDrawingIntermediate = false, SectorCos = Math.Cos(sector), SectorSin = Math.Sin(sector) }; return(rsm); }
public static void LoadDisplay(uint[,,] display, Color backColor) { Display = new LogDisplayModel(display, backColor); }