class DrawClippingPlanesConduit : Rhino.Display.DisplayConduit { private readonly ClipGumballBox d_box; private readonly Point3d[] d_corners; private readonly Point3d d_center; private readonly Point3d XplusCenter; private readonly Vector3d XplusVec; private readonly Point3d XminusCenter; private readonly Vector3d XminusVec; private readonly BoundingBox m_bbox; public DrawClippingPlanesConduit(ClipGumballBox box) { d_box = box; //edge_lines = d_box.BoundingBox.GetEdges(); m_bbox = d_box.box.BoundingBox; d_corners = d_box.box.GetCorners(); d_center = d_box.Center; Plane planeXplus = new Plane(d_corners[2], d_corners[1], d_corners[6]); XplusCenter = planeXplus.ClosestPoint(d_center); XplusVec = new Vector3d(d_center - XplusCenter); Plane planeXminus = new Plane(d_corners[0], d_corners[3], d_corners[4]); XminusCenter = planeXminus.ClosestPoint(d_center); XminusVec = new Vector3d(d_center - XminusCenter); } protected override void CalculateBoundingBox(CalculateBoundingBoxEventArgs e) { base.CalculateBoundingBox(e); e.IncludeBoundingBox(m_bbox); } protected override void PreDrawObjects(DrawEventArgs e) { base.PreDrawObjects(e); e.Display.AddClippingPlane(XplusCenter, XplusVec); e.Display.AddClippingPlane(XminusCenter, XminusVec); } -------------------------------------------------------- public class ClippingBox : Rhino.Commands.TransformCommand { public Box basebox; static DrawClippingPlanesConduit m_draw_clipping_planes; protected override Result RunCommand(RhinoDoc doc, RunMode mode) { /// to do program here /// m_draw_clipping_planes = new DrawClippingPlanesConduit(base_box); m_draw_clipping_planes.Enabled = true;