Redraw DrawOverlay without the rest of the conduit

Hi all, as stated in the title, I’m looking for a way to call/update the Conduit.DrawOverlay in a custom conduit without redrawing the entire View. Is this possible?

I’m working on an update to the LINK_Dashboards plugin and I would like to update the mouse over tooltip as i move the mouse around. However as my current method uses the RhinoDoc.ActiveDoc.Views.Redraw(); then this gets heavy if the display is crowded with geometry. And all I want to do is update some DisplayPipeline.DrawRectangles etc.

Moved to Developer category

Hi. I am also trying to do the same thing. Is there any way around it?
@stevebaer

There currently isn’t a good way to do this. I’ve added this to the wishlist at
https://mcneel.myjetbrains.com/youtrack/issue/RH-75014/Redraw-only-overlay

@sonderskovmathias, I made an interesting discovery today. It seems that redrawing only the active view is instantaneous.

Rhino.RhinoDoc.ActiveDoc.Views.Redraw(); // 10-12ms
Rhino.RhinoDoc.ActiveDoc.Views.ActiveView.Redraw(); // 0 ms

Hi Mariusz,

Thanks for this discovery! I didnt get it to work untll i read the docs. Depending on the usage, the last sentence is important :slight_smile:

// Remarks:
// If you change something in “this” view like the projection, construction plane,
// background bitmap, etc., then you need to call RhinoView.Redraw() to redraw “this”
// view./ The other views will not be changed. If you change something in the document
// (like adding new geometry to the model), then you need to call RhinoDoc.Views.Redraw()
// to redraw all the views

@stevebaer, or maybe @jeff is it possible to solve this from the c++ SDK? Or sending draw calls directly to OpenGL?

I don’t mind going low level if it’s necessary.

Not really; this requires changes in how our C++ code works