// Define layer names and text size.
const string Dim = "Dimension", DashDot = "DashDot";
const double TextHeight = 2.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 });
// Geometry
Line topDashDotLine = new Line(0, 0, 0, 60 * Math.Cos(devDept.Geometry.Utility.DegToRad(60)), 60 * Math.Sin(devDept.Geometry.Utility.DegToRad(60)), 0)
{
LineTypeMethod = colorMethodType.byEntity,
LineTypeName = DashDot
};
Line bottomDashDotLine = new Line(0, 0, 0, 60 * Math.Cos(devDept.Geometry.Utility.DegToRad(60)), 60 * -Math.Sin(devDept.Geometry.Utility.DegToRad(60)), 0)
{
LineTypeMethod = colorMethodType.byEntity,
LineTypeName = DashDot
};
Arc dimCircle = new Arc(Point3D.Origin, 48, 0, Math.PI * 2);
Arc dimCircleDashDot = (Arc)dimCircle.Clone();
dimCircleDashDot.Domain = new Interval(devDept.Geometry.Utility.DegToRad(50), devDept.Geometry.Utility.DegToRad(190));
dimCircleDashDot.LineTypeMethod = colorMethodType.byEntity;
dimCircleDashDot.LineTypeName = DashDot;
design1.Entities.Add(topDashDotLine, Dim);
design1.Entities.Add(bottomDashDotLine, Dim);
design1.Entities.Add(dimCircleDashDot, Dim);
Circle mainCircle = new Circle(Point3D.Origin, 9);
// Spoke class to model each spoke, the first is the top one, the other 2 are rotated to have the bottom and left spokes
Spoke spoke1 = new Spoke(dimCircle, topDashDotLine);
Spoke spoke2 = new Spoke(dimCircle, topDashDotLine);
Spoke spoke3 = new Spoke(dimCircle, topDashDotLine);
spoke2.Rotate(devDept.Geometry.Utility.DegToRad(120), Vector3D.AxisZ, Point3D.Origin);
spoke3.Rotate(devDept.Geometry.Utility.DegToRad(-120), Vector3D.AxisZ, Point3D.Origin);
spoke1.AddToModel(design1);
spoke2.AddToModel(design1);
spoke3.AddToModel(design1);
Arc arcFillet1, arcFillet2, arcFillet3;
Curve.Fillet(spoke1.leftLine, spoke2.rightLine, 18, false, true, true, true, out arcFillet1);
Curve.Fillet(spoke2.leftLine, spoke3.rightLine, 18, false, true, true, true, out arcFillet2);
Curve.Fillet(spoke3.leftLine, spoke1.rightLine, 18, false, true, true, true, out arcFillet3);
design1.Entities.Add(arcFillet1);
design1.Entities.Add(arcFillet2);
design1.Entities.Add(arcFillet3);
design1.Entities.Add(mainCircle);
// Dimensions
RadialDim rDimArcFillet = new RadialDim(arcFillet1, new Point2D(0, 0), TextHeight)
{
CenterMarkSize = 0
};
DiametricDim diamMainCircle = new DiametricDim(mainCircle, new Point2D(-15, -5), TextHeight)
{
CenterMarkSize = 0
};
RadialDim rDimCircle = new RadialDim(dimCircle, new Point2D(-30, 25), TextHeight)
{
CenterMarkSize = 0
};
AngularDim angleDim = new AngularDim(Plane.XY, topDashDotLine, bottomDashDotLine, new Point3D(39.9, 0, 0), new Point3D(40, 0, 0), TextHeight);
angleDim.ExtLineOffset = 0;
AngularDim angleLinesDim = new AngularDim(Plane.XY, spoke3.rightLine, spoke3.leftLine, new Point3D(1, 0, 0), new Point3D(15, -20, 0), TextHeight);
double midParameter = spoke1.leftLine.Domain.Mid;
Point3D leftMidPoint = spoke1.leftLine.MidPoint;
Point3D innerLeftMidPoint = spoke1.innerLeftLine.MidPoint;
double angleBetween = Vector3D.AngleBetween(Vector3D.AxisY, spoke1.leftLine.TangentAt(midParameter));
Plane pln = new Plane(spoke1.leftLine.PointAt(midParameter), Vector3D.AxisX, Vector3D.AxisY);
pln.Rotate(-angleBetween, Vector3D.AxisZ);
LinearDim ldim = new LinearDim(pln, leftMidPoint, innerLeftMidPoint, new Point3D(leftMidPoint.X - 10, innerLeftMidPoint.Y), TextHeight);
midParameter = spoke1.rightLine.Domain.Mid;
Point3D rightMidPoint = spoke1.rightLine.MidPoint;
Point3D innerRightMidPoint = spoke1.innerRightLine.MidPoint;
angleBetween = Vector3D.AngleBetween(Vector3D.AxisY, spoke1.rightLine.TangentAt(midParameter));
pln = new Plane(spoke1.rightLine.PointAt(midParameter), Vector3D.AxisX, Vector3D.AxisY);
pln.Rotate(-angleBetween, Vector3D.AxisZ);
LinearDim ldim2 = new LinearDim(pln, rightMidPoint, innerRightMidPoint, new Point3D(rightMidPoint.X + 4, innerRightMidPoint.Y), TextHeight);
spoke2.arcFillet2.Reverse();
RadialDim rDimArcFillet1 = new RadialDim(spoke2.arcFillet2, new Point2D(12, 7), TextHeight)
{
TrimLeader = true,
CenterMarkSize = 0
};
spoke2.arcFillet4.Reverse();
RadialDim rDimArcFillet2 = new RadialDim(spoke2.arcFillet4, new Point2D(-10, -10), TextHeight, Plane.XY)
{
TrimLeader = true,
CenterMarkSize = 0
};
RadialDim rDimTopArc = new RadialDim(spoke2.topArc, new Point2D(-8, 8), TextHeight)
{
TrimLeader = true,
CenterMarkSize = 0,
ArrowsLocation = elementPositionType.Outside
};
RadialDim rDimTopCircle = new RadialDim(spoke2.topCircle, new Point2D(-8, 8), TextHeight, Plane.XY)
{
TrimLeader = true,
CenterMarkSize = 0
};
RadialDim rDimBottomArc = new RadialDim(spoke2.bottomArc, new Point2D(-18, 2), TextHeight, Plane.XY)
{
TrimLeader = true,
CenterMarkSize = 0,
};
design1.Entities.Add(ldim, Dim);
design1.Entities.Add(ldim2, Dim);
design1.Entities.Add(angleDim, Dim);
design1.Entities.Add(angleLinesDim, Dim);
design1.Entities.Add(diamMainCircle, Dim);
design1.Entities.Add(rDimCircle, Dim);
design1.Entities.Add(rDimArcFillet, Dim);
design1.Entities.Add(rDimArcFillet1, Dim);
design1.Entities.Add(rDimArcFillet2, Dim);
design1.Entities.Add(rDimTopArc, Dim);
design1.Entities.Add(rDimTopCircle, Dim);
design1.Entities.Add(rDimBottomArc, Dim);
// Center figure into frame
const double scale = 1.7;
design1.Entities.Scale(scale);
design1.Entities.Translate(110, 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();
class Spoke
{
public Circle topCircle;
public Arc topArc;
public Arc belowCircleArc;
public Arc arcFillet1, arcFillet2, arcFillet3, arcFillet4;
public Arc bottomArc;
public Line innerRightLine, innerLeftLine;
public Line rightLine;
public Line leftLine;
public Spoke(Circle dimCircle, Line dashDotLine)
{
this.bottomArc = new Arc(Point3D.Origin, 12, 0, Math.PI * 2);
topCircle = new Circle(dimCircle.IntersectWith(dashDotLine)[0], 3);
topArc = new Arc(topCircle.Center, 6, devDept.Geometry.Utility.DegToRad(10), devDept.Geometry.Utility.DegToRad(170));
topArc.Rotate(devDept.Geometry.Utility.DegToRad(-30), Vector3D.AxisZ, topCircle.Center);
Arc arc = new Arc(topCircle.Center, 6, 0, 2 * Math.PI);
List<Point3D> intersactionPoints = new List<Point3D>();
rightLine = new Line(new Point3D(15.255, 0, 0), topArc.StartPoint);
leftLine = new Line(new Point3D(15.255 * Math.Cos(devDept.Geometry.Utility.DegToRad(120)), 15.255 * Math.Sin(devDept.Geometry.Utility.DegToRad(120)), 0), topArc.EndPoint);
innerRightLine = (Line)rightLine.Offset(-3, Vector3D.AxisZ)[0];
innerLeftLine = (Line)leftLine.Offset(3, Vector3D.AxisZ)[0];
intersactionPoints.AddRange(arc.IntersectWith(innerRightLine));
intersactionPoints.AddRange(arc.IntersectWith(innerLeftLine));
ICurve[] arcSplits;
arc.SplitBy(intersactionPoints, out arcSplits);
belowCircleArc = (Arc)arcSplits[1];
Curve.Fillet(belowCircleArc, innerRightLine, 2.4, true, false, true, true, out arcFillet1);
Curve.Fillet(innerLeftLine, belowCircleArc, 2.4, true, true, true, true, out arcFillet2);
Curve.Fillet(innerRightLine, bottomArc, 2.4, false, true, true, true, out arcFillet3);
Curve.Fillet(innerLeftLine, bottomArc, 2.4, true, true, true, true, out arcFillet4);
}
public void AddToModel(Design design1)
{
design1.Entities.Add(arcFillet1);
design1.Entities.Add(arcFillet2);
design1.Entities.Add(arcFillet3);
design1.Entities.Add(arcFillet4);
design1.Entities.Add(rightLine);
design1.Entities.Add(leftLine);
design1.Entities.Add(innerRightLine);
design1.Entities.Add(innerLeftLine);
design1.Entities.Add(topCircle);
design1.Entities.Add(topArc);
design1.Entities.Add(belowCircleArc);
design1.Entities.Add(bottomArc);
}
public void Rotate(double angleInRadians, Vector3D axis, Point3D center)
{
arcFillet1.Rotate(angleInRadians, axis, center);
arcFillet2.Rotate(angleInRadians, axis, center);
arcFillet3.Rotate(angleInRadians, axis, center);
arcFillet4.Rotate(angleInRadians, axis, center);
rightLine.Rotate(angleInRadians, axis, center);
leftLine.Rotate(angleInRadians, axis, center);
innerRightLine.Rotate(angleInRadians, axis, center);
innerLeftLine.Rotate(angleInRadians, axis, center);
topCircle.Rotate(angleInRadians, axis, center);
topArc.Rotate(angleInRadians, axis, center);
belowCircleArc.Rotate(angleInRadians, axis, center);
bottomArc.Rotate(angleInRadians, axis, center);
}
}
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 Drawings 15", width);
// Top box with number
DrawNumberBox(15, FrameLayer, FrameLayer, height, width);
}
private void DrawMainBox(string frameLayerName, double height, double width)
{
Line line = new Line(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);
}
private void DrawNumberBox(int number, string frameLayerName, string frameTextLayerName, double height, double width)
{
Line line = new Line(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 Text(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 Line(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);
}
private void DrawText(string title, double width)
{
Text text = new Text(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.