Skip to main content

How to change a font style of existing text entities?

It is possible to change a font style of existing text entities with the CADStyle class. In this example we will use the Entities.dxf file. You can find it in ...\CAD .NET 14\Files.

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

The following picture illustrates this file.

Entities.dxf

Entities.dxf by default

Let's create a function to change the font style of existing text entities.

  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(10, 30).
    • Set the BackColor property as Color.Black.
    • Set the Size property as new Size(995, 500).
    • 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 ChangeFontOfExistingEnt. Then create the ChangeFontOfExistingEnt_Click function to create a new CAD drawing by click.
 private void ChangeFontOfExistingEnt_Click(object sender, EventArgs e){
  1. Create a new instance of the CADImage class.
  CADImage vDrawing = CADImage.CreateImageByExtension(@"Entities.dxf");
vDrawing.LoadFromFile(@"Entities.dxf");
Tip

We recommend creating a new drawing object using CreateImageByExtension in case of importing from an existing file or stream.

  1. Set the CurrentLayout property as vDrawing.Layouts[0].
vDrawing.CurrentLayout = vDrawing.Layouts[0];
  1. The text style named "STANDARD" is added by default to any drawing created with CAD .NET. Create an instance of the CADStyle class and define it as vDrawing.Converter.StyleByName("STANDARD").
CADStyle vStyle = vDrawing.Converter.StyleByName("STANDARD");
  1. Set the FontName and PrimaryFont as Courier New and cour.ttf. Load vStyle to the specified vDrawing.Converter with the Loaded method.
  vStyle.FontName = "Courier New";
vStyle.PrimaryFont = "cour.ttf";
vStyle.Loaded(vDrawing.Converter);
  1. Create a cycle to change the font style of all existing CADText entities:
    • Create a cycle to search for entities on the current layout of vDrawing.
    • Find the CADText entities with the if/else statement.
    • Find the CADText entities which style is "STANDARD".
  for (int i = 0; i < vDrawing.CurrentLayout.Count; i++)
{
if (vDrawing.CurrentLayout.Entities[i].EntType == EntityType.Text)
{
CADText vText = (CADText)vDrawing.CurrentLayout.Entities[i];
if (vText.Style.Name == vStyle.Name)
{
vDrawing.Converter.Loads(vText);
}
}
}
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);
}

You have created the function to change the font style of existing text entities.
The following picture illustrates the result.

Entities.dxf

Entities.dxf after the changes

The full code listing.

...
using CADImport;
using CADImport.FaceModule;

namespace WindowsFormsApp1
{
public partial class Form1 : Form

{
CADPictureBox pictureBox1 = new CADPictureBox()
{
Location = new Point(10, 30),
TabIndex = 10,
BackColor = Color.Black,
Size = new Size(995, 500)
};
public Form1()
{
Controls.Add(pictureBox1);
InitializeComponent();
}
private void ChangeFontOfExistingEnt_Click(object sender, EventArgs e)
{
CADImage vDrawing = CADImage.CreateImageByExtension(@"Entities.dxf");
vDrawing.LoadFromFile(@"Entities.dxf");
vDrawing.CurrentLayout = vDrawing.Layouts[0];
CADStyle vStyle = vDrawing.Converter.StyleByName("STANDARD");
vStyle.FontName = "Courier New";
vStyle.PrimaryFont = "cour.ttf";
vStyle.Loaded(vDrawing.Converter);
for (int i = 0; i < vDrawing.CurrentLayout.Count; i++)
{
if (vDrawing.CurrentLayout.Entities[i].EntType == EntityType.Text)
{
CADText vText = (CADText)vDrawing.CurrentLayout.Entities[i];
if (vText.Style.Name == vStyle.Name)
{
vDrawing.Converter.Loads(vText);
}
}
}
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);
}
}
}