Add Background Bitmap

Demonstrates how to add a background bitmap to a Rhino model at a user-specified location.

partial class Examples
{
  public static Rhino.Commands.Result AddBackgroundBitmap(Rhino.RhinoDoc doc)
  {
    Rhino.RhinoApp.WriteLine ("hey");
    // Allow the user to select a bitmap file
    Rhino.UI.OpenFileDialog fd = new Rhino.UI.OpenFileDialog();
    fd.Filter = "Image Files (*.bmp;*.png;*.jpg)|*.bmp;*.png;*.jpg";
    if (!fd.ShowDialog())
      return Rhino.Commands.Result.Cancel;

    // Verify the file that was selected
    System.Drawing.Image image;
    try
    {
      image = System.Drawing.Image.FromFile(fd.FileName);
    }
    catch (Exception)
    {
      return Rhino.Commands.Result.Failure;
    }

    // Allow the user to pick the bitmap origin
    Rhino.Input.Custom.GetPoint gp = new Rhino.Input.Custom.GetPoint();
    gp.SetCommandPrompt("Bitmap Origin");
    gp.ConstrainToConstructionPlane(true);
    gp.Get();
    if (gp.CommandResult() != Rhino.Commands.Result.Success)
      return gp.CommandResult();

    // Get the view that the point was picked in.
    // This will be the view that the bitmap appears in.
    Rhino.Display.RhinoView view = gp.View();
    if (view == null)
    {
      view = doc.Views.ActiveView;
      if (view == null)
        return Rhino.Commands.Result.Failure;
    }

    // Allow the user to specify the bitmap with in model units
    Rhino.Input.Custom.GetNumber gn = new Rhino.Input.Custom.GetNumber();
    gn.SetCommandPrompt("Bitmap width");
    gn.SetLowerLimit(1.0, false);
    gn.Get();
    if (gn.CommandResult() != Rhino.Commands.Result.Success)
      return gn.CommandResult();

    // Cook up some scale factors
    double w = gn.Number();
    double image_width = image.Width;
    double image_height = image.Height;
    double h = w * (image_height / image_width);

    Rhino.Geometry.Plane plane = view.ActiveViewport.ConstructionPlane();
    plane.Origin = gp.Point();
    view.ActiveViewport.SetTraceImage(fd.FileName, plane, w, h, false, false);
    view.Redraw();
    return Rhino.Commands.Result.Success;
  }
}
Partial Friend Class Examples
  Public Shared Function AddBackgroundBitmap(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
	Rhino.RhinoApp.WriteLine("hey")
	' Allow the user to select a bitmap file
	Dim fd As New Rhino.UI.OpenFileDialog()
	fd.Filter = "Image Files (*.bmp;*.png;*.jpg)|*.bmp;*.png;*.jpg"
	If Not fd.ShowDialog() Then
	  Return Rhino.Commands.Result.Cancel
	End If

	' Verify the file that was selected
	Dim image As System.Drawing.Image
	Try
	  image = System.Drawing.Image.FromFile(fd.FileName)
	Catch e1 As Exception
	  Return Rhino.Commands.Result.Failure
	End Try

	' Allow the user to pick the bitmap origin
	Dim gp As New Rhino.Input.Custom.GetPoint()
	gp.SetCommandPrompt("Bitmap Origin")
	gp.ConstrainToConstructionPlane(True)
	gp.Get()
	If gp.CommandResult() <> Rhino.Commands.Result.Success Then
	  Return gp.CommandResult()
	End If

	' Get the view that the point was picked in.
	' This will be the view that the bitmap appears in.
	Dim view As Rhino.Display.RhinoView = gp.View()
	If view Is Nothing Then
	  view = doc.Views.ActiveView
	  If view Is Nothing Then
		Return Rhino.Commands.Result.Failure
	  End If
	End If

	' Allow the user to specify the bitmap with in model units
	Dim gn As New Rhino.Input.Custom.GetNumber()
	gn.SetCommandPrompt("Bitmap width")
	gn.SetLowerLimit(1.0, False)
	gn.Get()
	If gn.CommandResult() <> Rhino.Commands.Result.Success Then
	  Return gn.CommandResult()
	End If

	' Cook up some scale factors
	Dim w As Double = gn.Number()
	Dim image_width As Double = image.Width
	Dim image_height As Double = image.Height
	Dim h As Double = w * (image_height / image_width)

	Dim plane As Rhino.Geometry.Plane = view.ActiveViewport.ConstructionPlane()
	plane.Origin = gp.Point()
	view.ActiveViewport.SetTraceImage(fd.FileName, plane, w, h, False, False)
	view.Redraw()
	Return Rhino.Commands.Result.Success
  End Function
End Class
import Rhino
import scriptcontext
import System.Windows.Forms.DialogResult
import System.Drawing.Image

def AddBackgroundBitmap():
    # Allow the user to select a bitmap file
    fd = Rhino.UI.OpenFileDialog()
    fd.Filter = "Image Files (*.bmp;*.png;*.jpg)|*.bmp;*.png;*.jpg"
    if not fd.ShowDialog():
        return Rhino.Commands.Result.Cancel

    # Verify the file that was selected
    image = None
    try:
        image = System.Drawing.Image.FromFile(fd.FileName)
    except:
        return Rhino.Commands.Result.Failure

    # Allow the user to pick the bitmap origin
    gp = Rhino.Input.Custom.GetPoint()
    gp.SetCommandPrompt("Bitmap Origin")
    gp.ConstrainToConstructionPlane(True)
    gp.Get()
    if gp.CommandResult()!=Rhino.Commands.Result.Success:
        return gp.CommandResult()

    # Get the view that the point was picked in.
    # This will be the view that the bitmap appears in.
    view = gp.View()
    if view is None:
        view = scriptcontext.doc.Views.ActiveView
        if view is None: return Rhino.Commands.Result.Failure

    # Allow the user to specify the bitmap with in model units
    gn = Rhino.Input.Custom.GetNumber()
    gn.SetCommandPrompt("Bitmap width")
    gn.SetLowerLimit(1.0, False)
    gn.Get()
    if gn.CommandResult()!=Rhino.Commands.Result.Success:
        return gn.CommandResult()

    # Cook up some scale factors
    w = gn.Number()
    h = w * (image.Width / image.Height)

    plane = view.ActiveViewport.ConstructionPlane()
    plane.Origin = gp.Point()
    view.ActiveViewport.SetTraceImage(fd.FileName, plane, w, h, False, False)
    view.Redraw()
    return Rhino.Commands.Result.Success

if __name__=="__main__":
    AddBackgroundBitmap()