Conduit Draw Shaded Mesh

Demonstrates how to draw a shaded mesh using a display conduit.

public class DrawShadedMeshConduit : Rhino.Display.DisplayConduit
{
  public Rhino.Geometry.Mesh Mesh { get; set; }

  protected override void CalculateBoundingBox(Rhino.Display.CalculateBoundingBoxEventArgs e)
  {
    if (null != Mesh)
    {
      Rhino.Geometry.BoundingBox bbox = Mesh.GetBoundingBox(false);
      // Unites a bounding box with the current display bounding box in
      // order to ensure dynamic objects in "box" are drawn.
      e.IncludeBoundingBox(bbox);
    }
  }

  protected override void PostDrawObjects(Rhino.Display.DrawEventArgs e)
  {
    if (null != Mesh)
    {
      Rhino.Display.DisplayMaterial material = new Rhino.Display.DisplayMaterial();
      material.Diffuse = System.Drawing.Color.Blue;
      e.Display.DrawMeshShaded(Mesh, material);
    }
  }
}

partial class Examples
{
  public static Rhino.Commands.Result ConduitDrawShadedMesh(Rhino.RhinoDoc doc)
  {
    Rhino.Geometry.Mesh mesh = MeshBox(100, 500, 10);
    if (null == mesh)
      return Rhino.Commands.Result.Failure;

    DrawShadedMeshConduit conduit = new DrawShadedMeshConduit();
    conduit.Mesh = mesh;
    conduit.Enabled = true;
    doc.Views.Redraw();

    string outputString = string.Empty;
    Rhino.Input.RhinoGet.GetString("Press <Enter> to continue", true, ref outputString);

    conduit.Enabled = false;
    doc.Views.Redraw();

    return Rhino.Commands.Result.Success;
  }

  public static Rhino.Geometry.Mesh MeshBox(double x, double y, double z)
  {
    Rhino.Geometry.Mesh mesh = new Rhino.Geometry.Mesh();
    mesh.Vertices.Add(0, 0, 0);
    mesh.Vertices.Add(x, 0, 0);
    mesh.Vertices.Add(x, y, 0);
    mesh.Vertices.Add(0, y, 0);
    mesh.Vertices.Add(0, 0, z);
    mesh.Vertices.Add(x, 0, z);
    mesh.Vertices.Add(x, y, z);
    mesh.Vertices.Add(0, y, z);
    mesh.Faces.AddFace(3, 2, 1, 0);
    mesh.Faces.AddFace(4, 5, 6, 7);
    mesh.Faces.AddFace(0, 1, 5, 4);
    mesh.Faces.AddFace(1, 2, 6, 5);
    mesh.Faces.AddFace(2, 3, 7, 6);
    mesh.Faces.AddFace(3, 0, 4, 7);
    mesh.Normals.ComputeNormals();
    mesh.Compact();
    if (mesh.IsValid)
      return mesh;
    return null;
  }
}
# No Python sample available