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);
            }
        }
예제 #2
0
        // 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");
        }