# DisplayConduit class

Namespace: [Rhino.Display](https://developer.rhino3d.com/api/rhinocommon/namespace/rhino.display.md) · Assembly: [RhinoCommon](https://developer.rhino3d.com/api/rhinocommon/assembly/rhinocommon.md)

```cs
public abstract class DisplayConduit
```

## Constructors

- [DisplayConduit](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/ctor.md)

## Properties

- [Enabled](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/enabled.md)
- [GeometryFilter](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/geometryfilter.md): The geometry filter will ensure that your conduit's per-object functions will only be called for objects that are of certain geometry type
- [SpaceFilter](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/spacefilter.md): If you want this conduit to only work in a specific space (model or page), then set this filter to that specific space. The default is None meaning no filter is applied

## Methods

- [Bind](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/bind.md): Bind this conduit to a specific viewport
- [CalculateBoundingBox](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/calculateboundingbox.md): Library developers should override this function to increase the bounding box of scene so it includes the geometry that you plan to draw in the "Draw" virtual functions. The default implementation does nothing.
- [CalculateBoundingBoxZoomExtents](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/calculateboundingboxzoomextents.md): If you want to participate in the Zoom Extents command with your display conduit, then you will need to override ZoomExtentsBoundingBox. Typically you could just call your CalculateBoundingBox override, but you may also want to spend a little more time here and compute a tighter bounding box for your conduit geometry if that is needed. The default implementation does nothing.
- [DrawForeground](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/drawforeground.md): Called after all non-highlighted objects have been drawn and PostDrawObjects has been called. Depth writing and testing are turned OFF. If you want to draw with depth writing/testing, see PostDrawObjects. The default implementation does nothing.
- [DrawOverlay](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/drawoverlay.md): If Rhino is in a feedback mode, the draw overlay call allows for temporary geometry to be drawn on top of everything in the scene. This is similar to the dynamic draw routine that occurs with custom get point. The default implementation does nothing.
- [ExclusiveBind](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/exclusivebind.md): Exclusively bind this conduit to a specific viewport
- [GetSelectionFilter](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/getselectionfilter.md): The selection filter will make per-object conduit functions only be called for selected objects (when the filter is turned on)
- [ObjectCulling](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/objectculling.md): The default implementation does nothing.
- [OnEnable](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/onenable.md): Called when the enabled state changes for this class instance
- [PostDrawObjects](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/postdrawobjects.md): Called after all non-highlighted objects have been drawn. Depth writing and testing are still turned on. If you want to draw without depth writing/testing, see DrawForeground. The default implementation does nothing.
- [PostProcessFrameBuffer](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/postprocessframebuffer.md): Called after the frame has been drawn, with the finished frame available to be read. Use this to record or stream a viewport: reading the frame here copies the one that was just drawn, and never redraws the scene. Overriding this makes every frame cost an extra frame buffer read back for as long as the conduit is enabled, whether or not the override reads anything. The override runs on the thread that drew the frame and holds up the next one. Copy the pixels here and do the rest of the work somewhere else. The default implementation does nothing.
- [PreDrawObject](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/predrawobject.md): Called before every object in the scene is drawn.
- [PreDrawObjects](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/predrawobjects.md): Called before objects are been drawn. Depth writing and testing are on. The default implementation does nothing.
- [SetObjectIdFilter](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/setobjectidfilter.md): (2 overloads) Set an object Id that this conduit's per-object functions will only be called for
- [SetSelectionFilter](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/setselectionfilter.md): The selection filter will make per-object conduit functions only be called for selected objects (when the filter is turned on)
- [UnbindAll](https://developer.rhino3d.com/api/rhinocommon/type/rhino.display.displayconduit/unbindall.md): Remove viewport bindings
