// Define layer names and text size.
const string Dim = "Dimension", DashDot = "DashDot";
const double TextHeight = 5.0;
// Adding different layers
design1.Layers.Add(new Layer(Dim, Color.CornflowerBlue));
design1.Layers[0].LineWeight = 2;
design1.LineTypes.Add(DashDot, new float[] { 10, -2, 2, -2 });
Circle bco = new Circle(0, 0, 0, 65);
Circle cit = new Circle(0, 100, 0, 17);
Circle cot = new Circle(0, 100, 0, 28);
Circle cib = new Circle(- 54, - 90, 0, 8);
Circle cob = new Circle(- 54, - 90, 0, 18);
Arc r28_1 = (Arc)devDept.Geometry.Utility.GetCirclesTangentToTwoCircles(cob, bco, 28, true)[1];
double x_i1 = Math.Cos(devDept.Geometry.Utility.DegToRad(-45)) * (36);
double y_i1 = Math.Sin(devDept.Geometry.Utility.DegToRad(-45)) * (36);
double x_i2 = Math.Cos(devDept.Geometry.Utility.DegToRad(-135)) * (36);
double y_i2 = Math.Sin(devDept.Geometry.Utility.DegToRad(-135)) * (36);
Arc acr = new Arc(new Point3D(x_i1, y_i1, 0), 16, Math.PI);
Arc acl = new Arc(new Point3D(x_i2, y_i2, 0), 16, Math.PI);
acr.Rotate(devDept.Geometry.Utility.DegToRad(135), acr.Plane.AxisZ, acr.Center);
acl.Rotate(-devDept.Geometry.Utility.DegToRad(135), acl.Plane.AxisZ, acl.Center);
Line li = devDept.Geometry.Utility.GetLinesTangentToTwoCircles(bco, cot)[0];
Line lr = devDept.Geometry.Utility.GetLinesTangentToTwoCircles(bco, cot)[1];
Line lib = devDept.Geometry.Utility.GetLinesTangentToTwoCircles(bco, cob)[1];
Arc abcol = new Arc(bco.Center, bco.Radius, 2 * Math.PI);
Arc abcor = new Arc(bco.Center, bco.Radius, 2 * Math.PI);
abcol.TrimBy(li.StartPoint, true);
abcor.TrimBy(lr.StartPoint, false);
Arc acot = new Arc(cot.Center, cot.Radius, 2 * Math.PI);
Arc aic = new Arc(new Point3D(0, 0, 0), 20, devDept.Geometry.Utility.DegToRad(270));
Arc aoc = new Arc(new Point3D(0, 0, 0), 52, devDept.Geometry.Utility.DegToRad(270));
aic.Rotate(-devDept.Geometry.Utility.DegToRad(45), aic.Plane.AxisZ, aic.Center);
aoc.Rotate(-devDept.Geometry.Utility.DegToRad(45), aoc.Plane.AxisZ, aoc.Center);
acot.TrimBy(li.EndPoint, false);
acot.TrimBy(lr.EndPoint, true);
//dimensions and axes
Circle ccd = new Circle(0, 0, 0, 36);
ccd.LineTypeName = DashDot;
ccd.LineTypeMethod = colorMethodType.byEntity;
design1.Entities.Add(ccd, Dim);
Line axisX = new Line(-79, 0, 90, 0);
axisX.LineTypeMethod = colorMethodType.byEntity;
axisX.LineTypeName = DashDot;
design1.Entities.Add(axisX, Dim);
Line axisY = new Line(0, 153, 0, - 115);
axisY.LineTypeMethod = colorMethodType.byEntity;
axisY.LineTypeName = DashDot;
design1.Entities.Add(axisY, Dim);
Line dt = new Line(- 43, 100, 90, 100);
dt.LineTypeMethod = colorMethodType.byEntity;
dt.LineTypeName = DashDot;
design1.Entities.Add(dt, Dim);
Line dbx = new Line(- 82, - 90, - 26, - 90);
dbx.LineTypeMethod = colorMethodType.byEntity;
dbx.LineTypeName = DashDot;
design1.Entities.Add(dbx, Dim);
Line dby = new Line(- 54, - 118, - 54, - 62);
dby.LineTypeMethod = colorMethodType.byEntity;
dby.LineTypeName = DashDot;
design1.Entities.Add(dby, Dim);
Line a45r = new Line(0, 0, Math.Cos(devDept.Geometry.Utility.DegToRad(-45)) * (85), Math.Sin(devDept.Geometry.Utility.DegToRad(-45)) * (85));
a45r.LineTypeMethod = colorMethodType.byEntity;
a45r.LineTypeName = DashDot;
design1.Entities.Add(a45r, Dim);
Line a45l = new Line(0, 0, Math.Cos(devDept.Geometry.Utility.DegToRad(-135)) * (60), Math.Sin(devDept.Geometry.Utility.DegToRad(-135)) * (60));
a45l.LineTypeMethod = colorMethodType.byEntity;
a45l.LineTypeName = DashDot;
design1.Entities.Add(a45l, Dim);
Plane pln = new Plane(Point3D.Origin, Vector3D.AxisY, Vector3D.AxisMinusX);
design1.Entities.Add(new LinearDim(pln, new Point3D(70, 0), new Point3D(70, 100), new Point3D(85, 50), TextHeight), Dim);
design1.Entities.Add(new LinearDim(pln, new Point3D(- 70, 0), new Point3D(- 70, - 90), new Point3D(- 95, - 45), TextHeight), Dim);
design1.Entities.Add(new LinearDim(Plane.XY, new Point2D(cib.Center.X, 0), new Point2D(0, 0), new Point2D((cib.Center.X + 0) / 2, - 133), TextHeight), Dim);
r28_1 = SyncArcWithXY(r28_1);
RadialDim rdim1 = new RadialDim(r28_1, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(135)) * 13, Math.Sin(devDept.Geometry.Utility.DegToRad(135)) * 13), TextHeight);
design1.Entities.Add(rdim1, Dim);
RadialDim rdim2 = new RadialDim(abcol, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(-145)) * 95, Math.Sin(devDept.Geometry.Utility.DegToRad(-145)) * 95), TextHeight)
{
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true
};
design1.Entities.Add(rdim2, Dim);
RadialDim rdim3 = new RadialDim(acot, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(135)) * 45, Math.Sin(devDept.Geometry.Utility.DegToRad(135)) * 45), TextHeight)
{
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true
};
design1.Entities.Add(rdim3, Dim);
acl = SyncArcWithXY(acl);
RadialDim rdim4 = new RadialDim(acl, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(-70)) * 20, Math.Sin(devDept.Geometry.Utility.DegToRad(-70)) * 20), TextHeight)
{
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true
};
design1.Entities.Add(rdim4, Dim);
DiametricDim topdim = new DiametricDim(cit, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(45)) * 40, Math.Sin(devDept.Geometry.Utility.DegToRad(45)) * 40), TextHeight);
design1.Entities.Add(topdim, Dim);
DiametricDim centerodim = new DiametricDim(ccd, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(155)) * 90, Math.Sin(devDept.Geometry.Utility.DegToRad(155)) * 90), TextHeight);
design1.Entities.Add(centerodim, Dim);
DiametricDim bottomdim = new DiametricDim(cib, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(225)) * 30, Math.Sin(devDept.Geometry.Utility.DegToRad(225)) * 30), TextHeight);
design1.Entities.Add(bottomdim, Dim);
DiametricDim bodttomodim = new DiametricDim(cob, new Point2D(Math.Cos(devDept.Geometry.Utility.DegToRad(-45)) * 30, Math.Sin(devDept.Geometry.Utility.DegToRad(-45)) * 30), TextHeight);
design1.Entities.Add(bodttomodim, Dim);
AngularDim angDim1 = new AngularDim(Plane.XY, new Line(0, -1, 0, 1), a45r, new Point3D(1, -1), new Point3D(Math.Cos(devDept.Geometry.Utility.DegToRad(-67.5)) * (85), Math.Sin(devDept.Geometry.Utility.DegToRad(-67.5)) * (85)), TextHeight);
design1.Entities.Add(angDim1, Dim);
design1.Entities.AddRange(new Entity[] {
li,
lr,
lib,
aic,
aoc,
abcol,
abcor,
cit,
acot,
cib,
cob,
acr,
acl,
r28_1});
// Center figure into frame
const double scale = 0.70;
design1.Entities.Scale(scale);
design1.Entities.Translate(100, 150);
foreach (Entity en in design1.Entities)
{
if (en is Dimension dm)
{
// Restore original measure
dm.LinearScale = 1 / scale;
}
}
design1.Entities.Regen();
DrawFrame();
// Top View
design1.SetView(viewType.Top);
design1.ZoomFit();
Print();
private Arc SyncArcWithXY(Arc a)
{
Arc copy = a;
if (a.Plane.AxisZ.Z == -1)
{
copy = (Arc)a.Clone();
copy.Reverse();
}
Point3D c = new Point3D(copy.Center.X, copy.Center.Y, copy.Center.Z);
Point2D start = new Point2D(copy.StartPoint.X, copy.StartPoint.Y);
Point2D end = new Point2D(copy.EndPoint.X, copy.EndPoint.Y);
double angS = new Vector2D((Point2D)c, start).Angle;//Angle between startPoint vector and X axis
double angE = new Vector2D((Point2D)c, end).Angle;//Angle between endpoint vector and Y axis
if (angS > angE)
{
copy.Reverse();
start = new Point2D(copy.StartPoint.X, copy.StartPoint.Y);
end = new Point2D(copy.EndPoint.X, copy.EndPoint.Y);
angS = new Vector2D((Point2D)c, start).Angle;
angE = new Vector2D((Point2D)c, end).Angle;
}
Arc res = new Arc(c, copy.Radius, angS, angE);
return res;
}
Frame drawing:
void DrawFrame()
{
const double height = 287;
const double width = 200;
const string FrameLayer = "FrameLayer";
design1.Layers.Add(new Layer(FrameLayer));
design1.Layers[FrameLayer].LineWeight = 2;
// Outer box
DrawMainBox(FrameLayer, height, width);
// Boxes with info
DrawInfoBox(FrameLayer, FrameLayer, width);
// Text within info boxes
DrawText("CAD Practice Drawing 124", width);
// Top box with number
DrawNumberBox(124, FrameLayer, FrameLayer, height, width);
}
void DrawMainBox(string frameLayerName, double height, double width)
{
Line line = new(0, height, width, height);
design1.Entities.Add(line, frameLayerName);
line = new Line(0, height, 0, 0);
design1.Entities.Add(line, frameLayerName);
line = new Line(0, 0, width, 0);
design1.Entities.Add(line, frameLayerName);
line = new Line(width, 0, width, height);
design1.Entities.Add(line, frameLayerName);
}
void DrawNumberBox(int number, string frameLayerName, string frameTextLayerName, double height, double width)
{
Line line = new(width - 13, height - 7, width, height - 7);
design1.Entities.Add(line, frameLayerName);
line = new Line(width - 13, height, width - 13, height - 7);
design1.Entities.Add(line, frameLayerName);
Text text = new(width - 6.75, height - 3.5, 0, number.ToString(), 4, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter);
design1.Entities.Add(text, frameTextLayerName);
}
private void DrawInfoBox(string frameLayerName, string frameTextLayerName, double width)
{
Line line = new(width - 160, 0, width - 160, 20);
design1.Entities.Add(line, frameLayerName);
line = new Line(width - 160, 20, width, 20);
design1.Entities.Add(line, frameLayerName);
// Using frameTextLayerName to have thinner lines
line = new Line(width - 65, 0, width - 65, 20);
design1.Entities.Add(line, frameTextLayerName);
line = new Line(width - 160, 13, width, 13);
design1.Entities.Add(line, frameTextLayerName);
line = new Line(width - 45, 0, width - 45, 20);
design1.Entities.Add(line, frameTextLayerName);
line = new Line(width - 25, 0, width - 25, 20);
design1.Entities.Add(line, frameTextLayerName);
line = new Line(width - 65, 7, width - 25, 7);
design1.Entities.Add(line, frameTextLayerName);
}
void DrawText(string title, double width)
{
Text text = new(width - 112, 16.5, 0, "Title", 3, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter);
design1.Entities.Add(text);
text = new Text(width - 112, 7, 0, title, 4.5, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter);
design1.Entities.Add(text);
text = new Text(width - 55, 16.5, 0, "Date", 3, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter);
design1.Entities.Add(text);
text = new Text(width - 55, 10, 0, "Design", 3, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter);
design1.Entities.Add(text);
text = new Text(width - 55, 3.5, 0, "Check", 3, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter);
design1.Entities.Add(text);
text = new Text(width - 12.5, 16.5, 0, "Approve", 3, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter);
design1.Entities.Add(text);
}
Printing on A4 paper sheet:
private async void Print()
{
// A4 size in hundredth of inches
PaperSize paperSize = new System.Drawing.Printing.PaperSize("A4", 826, 1169);
design1.PageSetup(true, false, 0, paperSize, false);
// creates printing setting object and customize it
HiddenLinesViewSettingsEx hdlS = new HiddenLinesViewSettingsEx(viewType.Top, design1.Document);
hdlS.KeepEntityLineWeight = true;
// creates paper preview
const double printScaling = 1;
HiddenLinesViewOnPaperPreview hdl = new HiddenLinesViewOnPaperPreview(hdlS, new Size(800, 600), printScaling);
await design1.DoWorkAsync(hdl);
}

Comments
Please sign in to leave a comment.