For each construction step, a new sketch was created to enhance code readability. Before every operation on the BRep object, the code includes comments that, if uncommented, will display the sketch on the screen. All of the sketches have zero resulting degrees of freedom.
Sketch 1 - Building the main revolved body
This code block draws half of the piston profile and then revolve completely over his central axis (X) while revolving.
var sk1 = new devDept.Geometry.ConstraintSolver.Sketch();
SketchPoint or1 = sk1.AddOrigin();
var rect1 = sk1.AddRectangle(0, 0, 60, 42.5, 0, false, true);
sk1.AddConstraintJoin(rect1[0].StartPoint, or1);
Brep rev1 = sk1.RevolveAsBrep(Utility.DegToRad(360), Vector3D.AxisX, new Point3D())[0];
// SketchEntity se1 = new SketchEntity(sk1);
// design1.Entities.Add(se1);
Sketch 2 - Side cuts
This code block defines one rectangle and then performs an extrude remove pattern operation. In this case bilateral.
Plane pl2 = Plane.YZ;
pl2.Translate(60, 0);
var sk2 = new devDept.Geometry.ConstraintSolver.Sketch(pl2);
SketchPoint or2 = sk2.AddOrigin();
var rect2 = sk2.AddRectangle(30, 35, 20, 70, 0, false, true);
var p1 = sk2.AddPoint(0, 0);
sk2.AddConstraintMidPoint(p1, rect2[3]);
var const1 = sk2.AddLine(0, 0, 30, 0, true, true);
sk2.AddConstraintJoin(p1, const1.EndPoint);
sk2.AddConstraintJoin(or2, const1.StartPoint);
sk2.AddConstraintPerpendicular(const1, rect2[3]);
rev1.ExtrudeRemovePattern(sk2, -40, pl2.Origin, Utility.DegToRad(180), 2);
// SketchEntity se2 = new SketchEntity(sk2);
// design1.Entities.Add(se2);
Sketch 3 - Main central cavity
var sk3 = new devDept.Geometry.ConstraintSolver.Sketch(pl2);
SketchPoint or3 = sk3.AddOrigin();
var a1s3 = sk3.AddArc(0, 0, 35, Utility.DegToRad(230), Utility.DegToRad(310));
var a2s3 = sk3.AddArc(0, 0, 35, Utility.DegToRad(130), Utility.DegToRad(50));
sk3.AddConstraintJoin(or3, a1s3.Center);
sk3.AddConstraintJoin(or3, a2s3.Center);
var l1s3 = sk3.AddLine(-20, -30, -20, 30);
var l2s3 = sk3.AddLine(20, -30, 20, 30);
sk3.AddConstraintJoin(a1s3.StartPoint, l1s3.StartPoint);
sk3.AddConstraintJoin(a2s3.EndPoint, l1s3.EndPoint);
sk3.AddConstraintJoin(a1s3.EndPoint, l2s3.StartPoint);
sk3.AddConstraintJoin(a2s3.StartPoint, l2s3.EndPoint);
sk3.AddConstraintLength(l1s3, 57.44);
sk3.AddConstraintVertical(l1s3);
sk3.AddConstraintVertical(l2s3);
sk3.AddConstraintDistance(l1s3, l2s3, 40);
rev1.ExtrudeRemove(sk3, -40);
// SketchEntity se3 = new SketchEntity(sk3);
// design1.Entities.Add(se3);
Sketch 4 - Elliptical cavity
Plane pl4 = Plane.XZ;
pl4.Translate(0, 42.5);
var sk4 = new devDept.Geometry.ConstraintSolver.Sketch(pl4);
SketchPoint or4 = sk4.AddOrigin();
var e4 = sk4.AddEllipse(new Point2D(60, 0), 25, 34); // -1 to prevent a boolean operation issue
var l1s4 = sk4.AddLine(0, 0, 35, 0, true, true);
sk4.AddConstraintJoin(or4, l1s4.StartPoint);
sk4.AddConstraintHorizontal(l1s4);
sk4.AddConstraintPointAt(l1s4.EndPoint, e4, 0.5);
sk4.AddConstraintHorizontal(l1s4.StartPoint, e4.Center);
sk4.AddConstraintDistance(e4.Center, l1s4.EndPoint, 25);
var dmag = sk4.AddLine(60, 34, 60, -34, true, true);
var dmin = sk4.AddLine(35, 0, 85, 0, true, true);
sk4.AddConstraintHorizontal(dmin);
sk4.AddConstraintPointAt(dmag.StartPoint, e4, 0.25);
sk4.AddConstraintPointAt(dmag.EndPoint, e4, 0.75);
sk4.AddConstraintPointAt(dmin.StartPoint, e4, 0.5);
rev1.ExtrudeRemove(sk4, 100);
// SketchEntity se4 = new SketchEntity(sk4);
// design1.Entities.Add(se4);
Sketches 5 & 6 - Wrist pin hole
Plane pl5 = Plane.XZ;
pl5.Translate(30, 0);
var sk5 = new devDept.Geometry.ConstraintSolver.Sketch(pl5);
var c5 = sk5.AddCircle(new Point2D(0, 0), 10, true);
SketchPoint or5 = sk5.AddOrigin();
sk5.AddConstraintJoin(or5, c5.Center);
rev1.ExtrudeAdd(sk5, new Interval(-34, 34));
rev1.ExtrudeRemove(sk5, new Interval(-10, 10));
// SketchEntity se5 = new SketchEntity(sk5);
// design1.Entities.Add(se5);
var sk6 = new devDept.Geometry.ConstraintSolver.Sketch(pl5);
SketchPoint or6 = sk6.AddOrigin();
var c6 = sk6.AddCircle(new Point2D(0, 0), 7.5, true);
sk6.AddConstraintJoin(or6, c6.Center);
rev1.ExtrudeRemove(sk6, new Interval(-100, 100));
// SketchEntity se6 = new SketchEntity(sk6);
// design1.Entities.Add(se6);
Sketches 7 & 8 - Flaring and wrist pin attachment bolt housing
Plane pl7 = Plane.YZ;
pl7.Translate(41, 0);
var sk7 = new devDept.Geometry.ConstraintSolver.Sketch(pl7);
SketchPoint or7 = sk7.AddOrigin();
var c7 = sk7.AddCircle(new Point2D(-15, 0), 3.5, true);
sk7.AddConstraintHorizontal(c7.Center, or7);
sk7.AddConstraintDistance(c7.Center, or7, 15);
rev1.ExtrudeRemove(sk7, -2);
// SketchEntity se7 = new SketchEntity(sk7);
// design1.Entities.Add(se7);
var sk8 = new devDept.Geometry.ConstraintSolver.Sketch(pl7);
SketchPoint or8 = sk8.AddOrigin();
var c8 = sk8.AddCircle(new Point2D(-15, 0), 1.5, true);
sk8.AddConstraintHorizontal(c8.Center, or8);
sk8.AddConstraintDistance(c8.Center, or8, 15);
rev1.ExtrudeRemove(sk8, -6);
// SketchEntity se8 = new SketchEntity(sk8);
// design1.Entities.Add(se8);
Sketch 9 - Oil compression rings gaps
var sk9 = new devDept.Geometry.ConstraintSolver.Sketch(Plane.XZ);
SketchPoint or9 = sk9.AddOrigin();
var rect9a = sk9.AddRectangle(2, 37.5, 2, 5, 0, false, false);
var rect9b = sk9.AddRectangle(6, 37.5, 2, 5, 0, false, false);
var rect9c = sk9.AddRectangle(10, 37.5, 3, 5, 0, false, false);
sk9.AddConstraintLength(rect9a[1], 5);
sk9.AddConstraintEqualLength(rect9a[1], rect9b[1]);
sk9.AddConstraintEqualLength(rect9b[1], rect9c[1]);
sk9.AddConstraintLength(rect9a[2], 2);
sk9.AddConstraintEqualLength(rect9a[2], rect9b[2]);
sk9.AddConstraintLength(rect9c[2], 3);
sk9.AddConstraintPointOn(rect9a[2].EndPoint, rect9b[2]);
sk9.AddConstraintPointOn(rect9b[2].EndPoint, rect9c[2]);
sk9.AddConstraintDistance(or9, rect9a[2], 42.5);
sk9.AddConstraintDistance(or9, rect9a[1], 4);
sk9.AddConstraintDistance(rect9a[1], rect9b[1], 4);
sk9.AddConstraintDistance(rect9b[1], rect9c[1], 5);
rev1.RevolveRemove(sk9, Utility.DegToRad(360), Vector3D.AxisX, Plane.XZ.Origin);
// SketchEntity se9 = new SketchEntity(sk9);
// design1.Entities.Add(se9);
Adds the geometry to the 3D scene
design1.Entities.Add(rev1, System.Drawing.Color.LightSkyBlue);
DOF - Checking the degree of freedoms of the sketches
Debug.WriteLine($"sk1 DOF: {sk1.DOF}\n" +
$"sk2 DOF: {sk2.DOF}\n" +
$"sk3 DOF: {sk3.DOF}\n" +
$"sk4 DOF: {sk4.DOF}\n" +
$"sk5 DOF: {sk5.DOF}\n" +
$"sk6 DOF: {sk6.DOF}\n" +
$"sk7 DOF: {sk7.DOF}\n" +
$"sk8 DOF: {sk8.DOF}\n" +
$"sk9 DOF: {sk9.DOF}\n");
Modeling YouTube Video
Comments
Please sign in to leave a comment.