public void Renderer() { MyAsyncRenderContext aRC = this; RenderWindow rw = aRC.RenderWindow; if (null != rw) { Size size = rw.Size(); using (RenderWindow.Channel channel = rw.OpenChannel(Rhino.Render.RenderWindow.StandardChannels.RGBA)) { for (int x = 0; x < size.Width; x++) { for (int y = 0; y < size.Height; y++) { Rhino.Display.Color4f color = new Rhino.Display.Color4f(y / (float)size.Width, x / (float)size.Height, 1.0f, 1.0f); channel.SetValue(x, y, color); rw.Invalidate(); Thread.Sleep(0); } float progress = x / (float)size.Width; rw.SetProgress(String.Format("Rendering C# rendering {0:d}% complete", (int)(progress * 100.0f)), progress); Thread.Sleep(1); if (aRC.CancelRender) { break; } } rw.SetProgress("Rendering complete", 1.0f); Thread.Sleep(10); } rw.EndAsyncRender(RenderWindow.RenderSuccessCode.Completed); } }
// our main rendering function. public void Renderer() { RhinoApp.WriteLine("Starting modal MockingBird"); Paused = false; Done = false; using (var channel = RenderWindow.OpenChannel(RenderWindow.StandardChannels.RGBA)) { var size = RenderWindow.Size(); var max = (float)size.Width * size.Height; var rendered = 0; for (var x = 0; x < size.Width; x++) { for (var y = 0; y < size.Height; y++) { channel.SetValue(x, y, Color4f.FromArgb(1.0f, 1.0f, 0.75f, 0.5f)); rendered++; if (Cancel) { break; } RenderWindow.SetProgress("rendering...", rendered / max); } do { Thread.Sleep(10); } while (Paused && !Cancel); if (Cancel) { break; } } } // must set progress to 1.0f to signal RenderWindow (and pipeline/rc) // that rendering is now done. RenderWindow.SetProgress("MockingBird Modal done", 1.0f); // and send completion signal RenderWindow.EndAsyncRender(RenderWindow.RenderSuccessCode.Completed); Done = true; RhinoApp.WriteLine("... done"); }