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
design1.Layers[0].LineWeight = 2;
design1.Layers.Add(new Layer(DimLayer, Color.CornflowerBlue));
design1.Layers.Add(new Layer(ThinLayer));
design1.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
// 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,
UtilityEx.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 = 0 d
},
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 = 0 d
},
new RadialDim(a20, new Point2D(20, -40), TextHeight) {
ArrowsLocation = elementPositionType.Outside,
TrimLeader = true,
CenterMarkSize = 0 d
},
// 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;
design1.Entities.Scale(scale);
foreach(Entity en in design1.Entities)
if (en is Dimension)
// Restore original measure
((Dimension) en).LinearScale = 1 / scale;
design1.Entities.Translate(-12, 100);
design1.Entities.Regen();
// Draw frame
DrawFrame();
// Viewport setup
design1.SetView(viewType.Top, true, false);
design1.ActiveViewport.Grid.Visible = false; // Hide grid
design1.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;
design1.Entities.AddRange(new Entity[] {
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)
});
// Add thin lines
design1.Entities.AddRange(new Entity[] {
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() {
design1.PageSetup();
//Save current view Camera
design1.SaveView(out Camera cameraSaved);
design1.ActiveViewport.Camera.ProjectionMode = projectionType.Orthographic;
//Creates printing setting object and customize it
HiddenLinesViewSettingsEx hdlS = new HiddenLinesViewSettingsEx(design1.ActiveViewport.Camera, design1.Document, hiddenLinesViewType.Extents) {
KeepEntityLineWeight = true
};
//Creates paper preview
HiddenLinesViewOnPaperPreview hdl = new HiddenLinesViewOnPaperPreview(hdlS, new Size(800, 600), 0.5);
design1.StartWork(hdl);
//Restore saved view
design1.RestoreView(cameraSaved);
}
Don't forget to add the following using statements:
using devDept.Eyeshot.Entities;
using devDept.Eyeshot;
using devDept.Geometry;
Comments
Please sign in to leave a comment.