Skip to main content

How to create a hatch on the basis of an existing entity?

  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 AddAHatch. Then create the AddAHatch_Click function to create a hatch on the basis of an existing entity by click.
private void AddAHatch_Click(object sender, EventArgs e)
  1. Create a new instance of the CADImage class:
    • Call InitializeSection to create the CAD object manually.
    • Set the Background property as Color.Azure.
    • Set the CurrentLayout property as vDrawing.Layouts[0].
  CADImage vDrawing = new CADImage();
vDrawing.Converter.InitializeSections();
vDrawing.BackgroundColor = Color.Azure;
vDrawing.CurrentLayout = vDrawing.Layouts[0];
  1. Create an instance of the CADEllipse class:
    • Add this entity to the drawing with the AddEntity method.
    • Set the Point property as new DPoint(10, 10, 0).
    • Set the Radius property as 10.
    • Set the Ratio property as 1.5.
    • Set the RadPt property as new DPoint(25, 25, 0).
    • Set the Color property as Color.Maroon.
    • Set the LineWeight property as 5.
    • Use the Loads method to fill the internal data of the entity to prepare it for drawing.
  CADEllipse vEllipse = new CADEllipse();
vDrawing.CurrentLayout.AddEntity(vEllipse);
vEllipse.Point = new DPoint(10, 10, 0);
vEllipse.Radius = 10;
vEllipse.Ratio = 1.5;
vEllipse.RadPt = new DPoint(25, 25, 0);
vEllipse.Color = Color.Maroon;
vEllipse.LineWeight = 5;
vDrawing.Converter.Loads(vEllipse);

The following picture illustrates the ellipse without a hatch.

Ellipse

Ellipse

  1. Create an instance of the CAD2DEllipse class that repeats the vEllipse outline:
  CAD2DEllipse v2dEllipse = new CAD2DEllipse();
v2dEllipse.CenterPoint = vEllipse.Point;
v2dEllipse.MajorPoint = vEllipse.RadPt;
v2dEllipse.Radius = vEllipse.Ratio;
  1. Create an instance of the CAD2DBoundary class. Add v2dEllipse to the boundary list.
  CAD2DBoundaryList vBoundaryList = new CAD2DBoundaryList();
vBoundaryList.Add(v2dEllipse);
  1. Create an instance of the CADCurvePolygon class:
    • Add this entity to the current layout of vDrawing using the AddEntity method.
    • Add vBoundaryList to BoundaryData.
    • Set the Color property as Color.Green.
    • Use the Loads method to fill the internal data of the entity to prepare it for drawing.
  CADCurvePolygon vHatch = new CADCurvePolygon();
vDrawing.CurrentLayout.AddEntity(vHatch);
vHatch.BoundaryData.Add(vBoundaryList);
vHatch.Color = Color.Green;
vDrawing.Converter.Loads(vHatch);
  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 result 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.

Hatched ellipse

Hatched ellipse

You have created the function to create a hatch on the basis of an existing entity.

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 AddAHatch_Click(object sender, EventArgs e)
{
CADImage vDrawing = new CADImage();
vDrawing.Converter.InitializeSections();
vDrawing.BackgroundColor = Color.Azure;
vDrawing.CurrentLayout = vDrawing.Layouts[0];
// Creating an ellipse
CADEllipse vEllipse = new CADEllipse();
vDrawing.CurrentLayout.AddEntity(vEllipse);
vEllipse.Point = new DPoint(10, 10, 0);
vEllipse.Radius = 10;
vEllipse.Ratio = 1.5;
vEllipse.RadPt = new DPoint(25, 25, 0);
vEllipse.Color = Color.Maroon;
vEllipse.LineWeight = 5;
vDrawing.Converter.Loads(vEllipse);
//Creating v2dEllipse that repeats the vEllipse outline. .
CAD2DEllipse v2dEllipse = new CAD2DEllipse();
v2dEllipse.CenterPoint = vEllipse.Point;
v2dEllipse.MajorPoint = vEllipse.RadPt;
v2dEllipse.Radius = vEllipse.Ratio;
// Adding v2dEllipse to the Boundary list
CAD2DBoundaryList vBoundaryList = new CAD2DBoundaryList();
vBoundaryList.Add(v2dEllipse);
vBoundaryList.BoundaryType = 1;
// Creating a hatch
CADCurvePolygon vHatch = new CADCurvePolygon();
vDrawing.CurrentLayout.AddEntity(vHatch);
vHatch.BoundaryData.Add(vBoundaryList);
vHatch.Color = Color.Green;
vDrawing.Converter.Loads(vHatch);
vDrawing.GetExtents();
// adjusting visualization sizes to the control area:
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);
}
}
}