/// <summary> /// REnder the given layout /// </summary> /// <param name="layout"></param> public void Render(IEnumerable<Pixel> pixelsToRender) { //Process only changed pixels. This will speed up the performance //All pixels with the same color are grouped List<List<Pixel>> ChangedPixels = pixelsToRender.Where(x=>x.IsChanged) .GroupBy(x => x.PixelColor) .Select(grp => grp.ToList()).ToList(); string RenderOptions = ""; for (int i=0; i<= ChangedPixels.Count -1; i++) { //To minimize the calls to the python webservice, all changed pixels and colors are //transferred in one batch. The string has following format: //ColorRed:ColorGreen:ColorBlue:pixel1,pixel2-Segment with new color RenderOptions += ChangedPixels[i].First().PixelColor.R.ToString() + ":"; RenderOptions += ChangedPixels[i].First().PixelColor.G.ToString() + ":"; RenderOptions += ChangedPixels[i].First().PixelColor.B.ToString() + ":"; RenderOptions += String.Join(",", ChangedPixels[i].Select(x => x.PixelID)) + "-"; } //Transfer the changed pixels in one batch to the python webservice //The layout is rendered immediately PixelService.setPixelAndRender Renderer = new PixelService.setPixelAndRender(); Renderer.renderString = RenderOptions.TrimEnd('-'); m_Application.setPixelAndRender(Renderer); }
/// <remarks/> public void setPixelAndRenderAsync(setPixelAndRender setPixelAndRender1, object userState) { if ((this.setPixelAndRenderOperationCompleted == null)) { this.setPixelAndRenderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnsetPixelAndRenderOperationCompleted); } this.InvokeAsync("setPixelAndRender", new object[] { setPixelAndRender1}, this.setPixelAndRenderOperationCompleted, userState); }
/// <remarks/> public void setPixelAndRenderAsync(setPixelAndRender setPixelAndRender1) { this.setPixelAndRenderAsync(setPixelAndRender1, null); }