Skip to main content

How to add a raster object?

DWG and DXF specification provides the Image entity that represents a raster object in the drawing. CAD .NET allows adding raster images. You can find the corresponding demo in the AddEntities project included into the CAD .NET demo package.

In this example we will add a raster image to the Entities.dxf file. You can find it in CAD .NET 14\Files.

By default, the CAD .NET folder is unpacked to Documents.

Entities.dxf

Entities.dxf by default

  1. Add the using directive with the CADImport and CADImport.FaceModule namespaces.
using CADImport;
using CADImport.FaceModule;
More information about CADPictureBox

The CADPictureBox class is the basic implementation of the control element for displaying vector drawings. Visually CADPictureBox includes only area for drawing visualization and can be extended by the required control elements in the project under development.
To get more information about the CAD .NET controls, see What controls does CAD .NET have?

  1. Use the control element of the CADPictureBox class:
    • Set the Location property as new Point(12, 41).
    • Set the BackColor property as Color.Black.
    • Set the Size property as new Size(776, 620).
    • Finally, add it to the form.
...

CADPictureBox pictureBox1 = new CADPictureBox(){
Location = new Point(10, 30),
BackColor = Color.Black,
Size = new Size(995, 500),
}

public Form1()
{
Controls.Add(pictureBox1);
InitializeComponent();
}
  1. Add a new button. Name it AddRasterImage. Then create the AddRasterImage_Click function to add a raster object to a CAD drawing by click.
 private void AddRasterImage_Click(object sender, EventArgs e){
  1. Create a new instance of the CADImage class. Also, change the BackgroundColor property of this CADImage instance.
  CADImage vDrawing = CADImage.CreateImageByExtension(@"Entities.dxf");
vDrawing.LoadFromFile(@"Entities.dxf");
vDrawing.BackgroundColor = Color.Azure;
  1. Declare the local string variable fileName. In this example we use the logo.png raster image.
  string sFileName = "logo.png";
  1. Create a new instance of the CADImageDef class. Set the FileName property as the sFileName variable.
  CADImageDef vImageDef = new CADImageDef();
vImageDef.FileName = sFileName;
  1. Add vImageDef to the current layout of vDrawing using the AddEntity method. Use the Loads method to fill the internal data of the entity to prepare it for drawing.
  if (new Bitmap(vImageDef.FileName) != null)
{
vDrawing.CurrentLayout.AddEntity(vImageDef);
vDrawing.Converter.Loads(vImageDef);

  1. Create a new instance of the CADImageEnt class. Set its properties:
    • Add this entity to the current layout of vDrawing using the AddEntity method.
    • Set the ImageDef property as vImageDef.
    • Set the Point property with DPoint.
    • Set the UVector property as CADConst.XOrtAxis.
    • Set the VVector property as CADConst.YOrtAxis.
    • Set the Size property with DPoint.
    • Use the Loads method to fill the internal data of the entity to prepare it for drawing.
CADImageEnt vImageEnt = new CADImageEnt();
vDrawing.CurrentLayout.AddEntity(vImageEnt);
vImageEnt.ImageDef = vImageDef;
vImageEnt.Point = new DPoint(30, 14, 0);
vImageEnt.UVector = CADConst.XOrtAxis;
vImageEnt.VVector = CADConst.YOrtAxis;
vImageEnt.Size = new DPoint(43,23.23, 0);
vDrawing.Converter.Loads(vImageEnt);
  1. Use the GetExtents method to recalculate drawing extents.
    vDrawing.GetExtents();
  1. Declare the local variable vRect and specify RectangleF as its type. This variable stores four floating values that represent the location and size of a CAD file. Use the following code to fit the CAD file to pictureBox1. Finally, render the drawing with the Draw method.
  RectangleF vRect;
double vRatio = (double)(vDrawing.AbsHeight * pictureBox1.ClientSize.Width) / (vDrawing.AbsWidth * pictureBox1.ClientSize.Height);
if (vRatio > 1)
vRect = new RectangleF(0, 0, (float)(pictureBox1.ClientSize.Width / vRatio), (float)pictureBox1.ClientSize.Height);
else
vRect = new RectangleF(0, 0, (float)pictureBox1.ClientSize.Width, (float)(pictureBox1.ClientSize.Height * vRatio));
vDrawing.Draw(pictureBox1.CreateGraphics(), vRect);
}

The following picture illustrates the result.

Add a raster

Entities.dxf with the added raster image

You have created the function to add a raster image to CAD files.

The full code listing.

...
using CADImport;
using CADImport.FaceModule;

namespace WindowsFormsApp1
{
public partial class Form1 : Form

{
CADPictureBox pictureBox1 = new CADPictureBox()
{
Location = new Point(12, 41),
TabIndex = 10,
BackColor = Color.Black,
Size = new Size(776, 620)
};
public Form1()
{
Controls.Add(pictureBox1);
InitializeComponent();
}
private void AddRasterImage_Click(object sender, EventArgs e)
{
CADImage vDrawing = CADImage.CreateImageByExtension(@"Entities.dxf");
vDrawing.LoadFromFile(@"Entities.dxf");
vDrawing.BackgroundColor = Color.Azure;
vDrawing.CurrentLayout = vDrawing.Layouts[0];
string sFileName = "logo.png";
CADImageDef vImageDef = new CADImageDef();
vImageDef.FileName = sFileName;
if (new Bitmap(vImageDef.FileName) != null)
{
vDrawing.CurrentLayout.AddEntity(vImageDef);
vDrawing.Converter.Loads(vImageDef);
CADImageEnt vImageEnt = new CADImageEnt();
vDrawing.CurrentLayout.AddEntity(vImageEnt);
vImageEnt.ImageDef = vImageDef;
vImageEnt.Point = new DPoint(30, 14, 0);
vImageEnt.UVector = CADConst.XOrtAxis;
vImageEnt.VVector = CADConst.YOrtAxis;
vImageEnt.Size = new DPoint(43,23.23, 0);
vDrawing.Converter.Loads(vImageEnt);
vDrawing.GetExtents();
RectangleF vRect;
double vRatio = (double)(vDrawing.AbsHeight * pictureBox1.ClientSize.Width) / (vDrawing.AbsWidth * pictureBox1.ClientSize.Height);
if (vRatio > 1)
vRect = new RectangleF(0, 0, (float)(pictureBox1.ClientSize.Width / vRatio), (float)pictureBox1.ClientSize.Height);
else
vRect = new RectangleF(0, 0, (float)pictureBox1.ClientSize.Width, (float)(pictureBox1.ClientSize.Height * vRatio));
vDrawing.Draw(pictureBox1.CreateGraphics(), vRect);
}
}
}
}