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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
        public static string GetLogDisplayString(LogDisplayModel logDisplay)
        {
            var array = logDisplay.GetArrayCopy();

            return(JsonConvert.SerializeObject(array, Formatting.Indented, JsonSerializerSettings));
        }
示例#5
0
        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);
 }