# Practice drawing 116

Define layer names and text size.

``````private const string
DimLayer = "Dimension",
ThinLayer = "ThinLayer",
DashDot = "DashDot";

private const double TextHeight = 3.5;
``````

Draw the component and its dimensions.

``````// Set layers and linetype
model1.Layers[0].LineWeight = 2;
model1.LineTypes.Add(DashDot, new float[] { 30, -5, 5, -5 });

// 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

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);

circleTopCenterInner, circleTopCenterOuter, circleTopLeft, circleBottomCenter,
a98, a20, a9, a1, a2, a3, l, c1Arc2, UtilityEx.GetLinesTangentToTwoCircles(c2, c3)[0]
});

Plane left = new Plane(Point3D.Origin, Vector3D.AxisY, -1 * Vector3D.AxisX);

a98.Reverse(); // Fix normals to display text correctly
a20.Reverse();

// 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),

new RadialDim(c2, new Point2D(-20, -30), TextHeight)
{
ArrowsLocation = elementPositionType.Outside,
},
new RadialDim(c3, new Point2D(-20, 20), TextHeight)
{
ArrowsLocation = elementPositionType.Outside,
},
new RadialDim(a9, new Point2D(15, 15), TextHeight)
{
ArrowsLocation = elementPositionType.Outside,
ShowCenterMark = false
},
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,
ShowCenterMark = false
},
new RadialDim(a20, new Point2D(20, -40), TextHeight) {
ArrowsLocation = elementPositionType.Outside,
ShowCenterMark = false
},

// 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
}

}, DimLayer);

// Scale and translate component
double scale = 2;

model1.Entities.Scale(scale);

foreach (Entity en in model1.Entities)
if (en is Dimension)
// Restore original measure
((Dimension) en).LinearScale = 1 / scale;

model1.Entities.Translate(-12, 100);
model1.Entities.Regen();

// Draw frame
DrawFrame();

// Viewport setup
model1.SetView(viewType.Top, true, false);
model1.ActiveViewport.Grid.Visible = false; // Hide grid
model1.ActiveViewport.OriginSymbol.Visible = false; // Hide origin

// Print
Print();
``````

Utility function to draw the outline frame.

``````void DrawFrame()
{
string frameID = "116";
string frameTitle = "CAD Practice Drawing " + frameID;
int halfWidth = 200;
int halfHeight = 287;

new LinearPath(-halfWidth, -halfHeight, 2 * halfWidth, 2 * halfHeight),

new Line(-halfWidth / 4, -halfHeight + 30, halfWidth, -halfHeight + 30),
new Line(-halfWidth / 4, -halfHeight + 30, -halfWidth / 4, -halfHeight),

new Text(25, -halfHeight + 25, 0, "Title", 4, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter),
new Text(25, -halfHeight + 10, 0, frameTitle, 8, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter),
new Text(115, -halfHeight + 25, 0, "Date", 4, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter),
new Text(115, -halfHeight + 15, 0, "Design", 4, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter),
new Text(115, -halfHeight + 5, 0, "Check", 4, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter),
new Text(180, -halfHeight + 25, 0, "Approve", 4, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter),

new Line(halfWidth - 30, halfHeight - 15, halfWidth, halfHeight - 15),
new Line(halfWidth - 30, halfHeight - 15, halfWidth - 30, halfHeight),
new Text(halfWidth - 15, halfHeight - 7.5, 0, frameID, 8, devDept.Eyeshot.Entities.Text.alignmentType.MiddleCenter)

});

new Line(-halfWidth / 4, -halfHeight + 20, halfWidth, -halfHeight + 20),
new Line(100, -halfHeight + 30, 100, -halfHeight),
new Line(130, -halfHeight + 30, 130, -halfHeight),
new Line(160, -halfHeight + 30, 160, -halfHeight),
new Line(100, -halfHeight + 10, 160, -halfHeight + 10)

}, ThinLayer);
}``````

Utility function to adjust and print the viewport.

``````private void Print()
{
model1.PageSetup();

//Save current view Camera
model1.SaveView(out Camera cameraSaved);

model1.Camera.ProjectionMode = devDept.Graphics.projectionType.Orthographic;

//Creates printing setting object and customize it
HiddenLinesViewSettings hdlS = new HiddenLinesViewSettings(model1);
hdlS.KeepEntityLineWeight = true;

//Creates paper preview
HiddenLinesViewOnPaperPreview hdl = new HiddenLinesViewOnPaperPreview(hdlS, new Size(800, 600), 0.5);
model1.StartWork(hdl);

//Restore saved view
model1.RestoreView(cameraSaved);
}``````

Don't forget to add the following using statements:

``````using devDept.Eyeshot.Entities;
using devDept.Eyeshot;
using devDept.Geometry;``````