// Define layer names and text size.
const string Dim = "Dimension", DashDot = "DashDot";
const double TextHeight = 3.5;
// 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 });
// Main circles
Circle circleTopCenterInner = new Circle(0, 0, 0, 14);
Circle circleTopCenterOuter = new Circle(0, 0, 0, 19);
Circle circleTopLeft = new Circle(-41, 0, 0, 10);
Circle circleBottomCenter = new Circle(0, -90, 0, 10);
// Outline circles
Circle c1 = new Circle(Plane.XY, new Point2D(0, 0), 40); // Outer circle top right
Circle c2 = new Circle(Plane.XY, new Point2D(0, -90), 20); // Outer circle bottom
Circle c3 = new Circle(Plane.XY, new Point2D(-41, 0), 20); // Outer circle top left
// Linking arcs
Arc a98 = (Arc)UtilityEx.GetCirclesTangentToTwoCircles(c1, c2, 98, true)[3]; // Radius 98 arc
Arc a20 = (Arc)UtilityEx.GetCirclesTangentToTwoCircles(c1, c2, 20, true)[1]; // Radius 20 arc
Arc a9 = (Arc)UtilityEx.GetCirclesTangentToTwoCircles(c3, c1, 9, true)[0]; // Radius 9 arc
Arc a1 = new Arc(c1.Center, c1.Radius, Math.PI * 2);
a1.TrimBy(a9.EndPoint, false);
a1.TrimBy(a98.StartPoint, true);
Arc a2 = new Arc(c2.Center, c2.Radius, Math.PI * 2);
a2.TrimBy(a98.EndPoint, false);
a2.TrimBy(a20.EndPoint, true);
Arc a3 = new Arc(c3.Center, c3.Radius, Math.PI * 3 / 2);
a3.TrimBy(a9.StartPoint, true);
Line l = new Line(a3.EndPoint, new Point3D(0, a3.EndPoint.Y, 0));
l.TrimBy(c1.IntersectWith(l)[0], false);
Arc c1Arc2 = new Arc(c1.Center, c1.Radius, Math.PI * 2);
c1Arc2.TrimBy(l.EndPoint, true);
c1Arc2.TrimBy(a20.StartPoint, false);
// Add shapes
design1.Entities.AddRange(new Entity[] {
circleTopCenterInner,
circleTopCenterOuter,
circleTopLeft,
circleBottomCenter,
a98,
a20,
a9,
a1,
a2,
a3,
l,
c1Arc2,
devDept.Geometry.Utility.GetLinesTangentToTwoCircles(c2, c3)[0]
});
// Add dimensions
Plane left = new Plane(Point3D.Origin, Vector3D.AxisY, -1 * Vector3D.AxisX);
a98.Reverse(); // Fix normals to display text correctly
a20.Reverse();
design1.Entities.AddRange(new Entity[] {
// Diametric dimensions
new DiametricDim(circleTopCenterInner, new Point2D(20, 20), TextHeight),
new DiametricDim(circleTopCenterOuter, new Point2D(20, -20), TextHeight),
new DiametricDim(circleTopLeft, new Point2D(-22, -22), TextHeight),
new DiametricDim(circleBottomCenter, new Point2D(20, -20), TextHeight),
// Linear dimensions
new LinearDim(Plane.XY, new Point2D(-41, -150), new Point2D(0, -150), new Point2D(-20, -150), TextHeight),
new LinearDim(left, new Point2D(-90, -80), new Point2D(0, -80), new Point2D(-45, -80), TextHeight),
// Radial dimensions
new RadialDim(c2, new Point2D(-20, -30), TextHeight) {
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true
},
new RadialDim(c3, new Point2D(-20, 20), TextHeight) {
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true
},
new RadialDim(a9, new Point2D(15, 15), TextHeight) {
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true,
CenterMarkSize = 0d
},
new RadialDim(c1, new Point2D(50, 30), TextHeight) {
ArrowsLocation = elementPositionType.Outside
},
new RadialDim(c1, new Point2D(-30, -50), TextHeight) {
ArrowsLocation = elementPositionType.Outside
},
new RadialDim(a98, new Point2D(82, -82), TextHeight) {
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true,
CenterMarkSize = 0d
},
new RadialDim(a20, new Point2D(35, 10), TextHeight, Plane.XY) {
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true,
CenterMarkSize = 0d
},
// Axes
new Line(-70, 0, 80, 0) { // Top X axis
LineTypeMethod = colorMethodType.byEntity,
LineTypeName = DashDot
},
new Line(-30, -90, 80, -90) { // Bottom X axis
LineTypeMethod = colorMethodType.byEntity,
LineTypeName = DashDot
},
new Line(-41, 30, -41, -150) { // Left Y axis
LineTypeMethod = colorMethodType.byEntity,
LineTypeName = DashDot
},
new Line(0, 50, 0, -150) { // Right Y axis
LineTypeMethod = colorMethodType.byEntity,
LineTypeName = DashDot
}
}, Dim);
// Center figure into frame
design1.Entities.Translate(100, 200);
design1.Entities.Regen();
DrawFrame();
// Top View
design1.SetView(viewType.Top);
design1.ZoomFit();
Print();
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 116", width);
// Top box with number
DrawNumberBox(116, 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.