protected override Result Render(RhinoDoc doc, RunMode mode, bool fastPreview) { // initialise our render context MockingRenderContext rc = new MockingRenderContext(this, doc); // initialise our pipeline implementation RenderPipeline pipeline = new MockingRenderPipeline(doc, mode, this, rc); // query for render resolution var renderSize = RenderPipeline.RenderSize(doc); // set up view info ViewInfo viewInfo = new ViewInfo(doc.Views.ActiveView.ActiveViewport); // set up render window rc.RenderWindow = pipeline.GetRenderWindow(); // add a wireframe channel for curves/wireframes/annotation etc. rc.RenderWindow.AddWireframeChannel(doc, viewInfo.Viewport, renderSize, new Rectangle(0, 0, renderSize.Width, renderSize.Height)); // set correct size rc.RenderWindow.SetSize(renderSize); // prime the ChangeQueue. We do it here, since this *has* to // happen on the main thread. rc.ChangeQueue.CreateWorld(); // now fire off render thread. var renderCode = pipeline.Render(); // note that the rendering isn't complete yet, rather the pipeline.Render() // call starts a rendering thread. Here we essentially check whether // starting that thread went ok. if (renderCode != RenderPipeline.RenderReturnCode.Ok) { RhinoApp.WriteLine("Rendering (mockingbird modal+changequeue) failed:" + rc.ToString()); return(Result.Failure); } // all ok, so we are apparently rendering. return(Result.Success); }
public MockingRenderPipeline(RhinoDoc doc, RunMode mode, RenderPlugIn plugin, MockingRenderContext rc) : base(doc, mode, plugin, RenderSize(doc), "MockingBird (modal)", Rhino.Render.RenderWindow.StandardChannels.RGBA, false, false) { m_rc = rc; }