design1.ActiveViewport.DisplayMode = displayType.Shaded;
design1.Shaded.EdgeColorMethod = edgeColorMethodType.EntityColor;
design1.Shaded.EdgeThickness = 2;
// Side surface
Plane pln1 = new Plane(new Point3D(20, 0, 0), Vector3D.AxisMinusX);
Arc a1 = new Arc(pln1, new Point2D(12, 0), new Point2D(10, 10), new Point2D(0, 26), false);
Plane pln2 = new Plane(new Point3D(80, 0, 0), Vector3D.AxisMinusX);
Arc a2 = new Arc(pln2, new Point2D(21, 0), new Point3D(14, 19), new Point3D(0, 40), false);
devDept.Eyeshot.Entities.Point p = new devDept.Eyeshot.Entities.Point(new Point3D(0, 0, 0), 8);
Surface s = Surface.Loft(new ICurve[] { p, a1, a2 }, 3)[0];
design.Entities.Add(s, Color.WhiteSmoke);
Plane plc1 = new Plane(new Point3D(40, 0, 21), Vector3D.AxisY);
Plane plc2 = new Plane(new Point3D(59, 0, 24), Vector3D.AxisY);
Circle c1 = new Circle(plc1, plc1.Origin, 4);
Circle c2 = new Circle(plc2, plc2.Origin, 6);
Arc is1 = (Arc) devDept.Geometry.Utility.GetCirclesTangentToTwoCircles(c2, c1, 35, true)[2];
Arc is2 = (Arc) devDept.Geometry.Utility.GetCirclesTangentToTwoCircles(c1, c2, 45, true)[2];
Arc is3 = new Arc(plc1, c1.Center, c1.Radius, Math.PI * 2);
is3.TrimBy(is2.StartPoint, false);
is3.TrimBy(is1.EndPoint, true);
plc2.Rotate(Math.PI * 3 / 2, Vector3D.AxisY);
Arc is4 = new Arc(plc2, c2.Center, c2.Radius, Math.PI * 2);
is4.TrimBy(is2.EndPoint, true);
is4.TrimBy(is1.StartPoint, false);
CompositeCurve opening = new CompositeCurve(is1, is2, is3, is4});
Plane sectionPln = new Plane(opening.StartPoint, opening.StartTangent);
Arc section = new Arc(sectionPln, new Point2D(0, 0), new Point2D(3.3, 19), new Point2D(7, 27), true);
Surface trumpet1 = section.SweepAsSurface(opening, 0.001, sweepMethodType.FrenetSerret)[0];
Surface trumpet2 = section.SweepAsSurface(opening, 0.001, sweepMethodType.FrenetSerret)[1];
Surface trumpet3 = section.SweepAsSurface(opening, 0.001, sweepMethodType.FrenetSerret)[2];
Surface trumpet4 = section.SweepAsSurface(opening, 0.001, sweepMethodType.FrenetSerret)[3];
Surface[] trumpet = new Surface[] { trumpet1, trumpet2, trumpet3, trumpet4 };
design.Entities.AddRange(trumpet, Color.LightSkyBlue);
// Creates the fillet between the main shape and the trumpet
Surface.Fillet(new Surface[] { s }, trumpet, 4.5, 0.001, true, true, true, true, true, false, out Surface[] fillets);
design.Entities.AddRange(fillets, Color.DarkBlue);
// Main shape
// Oblique cut
Line sep = new Line(new Point3D(80, 0, 0), new Point3D(70, 0, 44));
Surface[] plsep = sep.ExtrudeAsSurface(Vector3D.AxisMinusY * 50);
design.Entities.AddRange(plsep, Color.DarkBlue);
Surface.Trim(new Surface[] { s }, plsep, 0.0001, false, true); //here
// Base of main shape
Line baseLine = new Line(new Point3D(0, 0, 0), new Point3D(80, 0, 0));
Surface[] plBase = baseLine.ExtrudeAsSurface(Vector3D.AxisMinusY * 50);
design.Entities.AddRange(plBase, Color.LightBlue);
Surface.Trim(s, plBase[0], 0.001, false, true);
// Elliptical cut
Plane plelc = new Plane(new Point3D(80, 0, 0), Vector3D.AxisMinusY);
EllipticalArc elc = new EllipticalArc(plelc, 10, 20, -Math.PI, -Math.PI / 2);
Surface[] s1 = elc.ExtrudeAsSurface(Vector3D.AxisMinusY * 50);
design.Entities.AddRange(s1, Color.LightGray);
Surface.Trim(new Surface[] { plsep[0], s, plBase[0] }, s1, 0.0001, true, true);
// Reflect all Entities with respect to plane XZ
Surface[] copy = new Surface[]
{
(Surface) fillets[0].Clone(), (Surface) fillets[1].Clone(), (Surface) fillets[2].Clone(), (Surface) fillets[3].Clone(),
(Surface) plsep[0].Clone(), (Surface) plBase[0].Clone(), (Surface) trumpet[0].Clone(),
(Surface) trumpet[1].Clone(), (Surface) trumpet[2].Clone(), (Surface) trumpet[3].Clone(), (Surface) s.Clone(), (Surface) s1[0].Clone()
};
// Mirror
Mirror mirrorTransformation = new Mirror(Plane.XZ);
foreach (Surface su in copy)
{
su.TransformBy(mirrorTransformation);
}
design.Entities.AddRange((Surface[]) copy);
// Creates the knob
Plane knobPln = new Plane(new Point3D(47, 0, 16), Vector3D.AxisY);
ICurve[] knobCurve1 = new ICurve[]
{
new Line(knobPln, new Point2D(-3, 5.4), new Point2D(2.7, 5.2)),
new Arc(knobPln, new Point2D(2.7, 5.2), new Point2D(2.98, 1), new Point2D(3, 0), true),
};
Curve.Fillet(knobCurve1[0], knobCurve1[1], 1, true, false, true, true, out Arc fillet);
knobCurve1[0].TrimBy(fillet.StartPoint, false);
knobCurve1[1].TrimBy(fillet.EndPoint, true);
CompositeCurve knobCurve2 = new CompositeCurve(new ICurve[]
{
knobCurve1[0],
knobCurve1[1],
fillet
});
Surface[] knob = knobCurve2.RevolveAsSurface(0, 2 * Math.PI, knobPln.AxisX, knobPln.Origin);
design.Entities.AddRange(knob, Color.LightSteelBlue);
Surface.Trim(new Surface[] { copy[6], trumpet[0] }, knob, 0.001, true, false);
// Iron plate
// First part
ICurve[] edgesBase = plBase[0].ExtractEdges();
double lenOffset = 0.6;
ICurve edgeOffset1 = edgesBase[1].Offset(lenOffset, Vector3D.AxisZ, true)[0];
ICurve edgeOffset2 = (ICurve) edgeOffset1.Clone();
((Entity) edgeOffset2).TransformBy(new Mirror(Plane.XZ));
Point3D[] intersectPoint1 = edgeOffset1.IntersectWith(edgeOffset2);
edgeOffset1.TrimBy(intersectPoint1[0], false);
edgeOffset2.TrimBy(intersectPoint1[0], false);
Line edgeOffset3 = new Line(new Point3D(60 - lenOffset, 20.8374, 0), new Point3D(60 - lenOffset, -20.8374, 0));
Point3D[] intersectPoint2 = edgeOffset3.IntersectWith(edgeOffset1);
Point3D[] intersectPoint3 = edgeOffset3.IntersectWith(edgeOffset2);
edgeOffset3.TrimBy(intersectPoint2[0], false);
edgeOffset1.TrimBy(intersectPoint2[0], true);
edgeOffset2.TrimBy(intersectPoint3[0], true);
edgeOffset3.TrimBy(intersectPoint3[0], true);
CompositeCurve offsetBase = new CompositeCurve(new ICurve[] { edgeOffset1, edgeOffset2, edgeOffset3 });
design.Entities.Add(offsetBase);
devDept.Eyeshot.Entities.Region r1 = new devDept.Eyeshot.Entities.Region(offsetBase, Plane.XY, true);
Surface[] s2 = r1.ExtrudeAsSurface(-.9 * Vector3D.AxisZ);
design.Entities.AddRange(s2, Color.LightGray);
// Second part
ICurve copyEdgeBases = (ICurve) edgesBase[1].Clone();
((Entity) copyEdgeBases).TransformBy(mirrorTransformation);
CompositeCurve ironBase = new CompositeCurve(new ICurve[]
{
edgesBase[1], copyEdgeBases,
new Line(edgesBase[1].StartPoint, copyEdgeBases.StartPoint),
new Arc(edgesBase[1].EndPoint, new Point3D(0.1, 0, 0), copyEdgeBases.EndPoint, true)
});
devDept.Eyeshot.Entities.Region r2 = new devDept.Eyeshot.Entities.Region(ironBase, Plane.XY, true);
r2.Translate(-.9 * Vector3D.AxisZ);
Surface[] plate = r2.ExtrudeAsSurface(-1.5 * Vector3D.AxisZ);
design.Entities.AddRange(plate, Color.Gray);
design.Entities.Regen();
Mesh generation
// Mesh generation of side surface
SurfaceMesher sm = new SurfaceMesher(s, 3);
sm.DoWork();
design1.ActiveViewport.DisplayMode = displayType.Shaded;
design1.Entities.Add(sm.Result);
Comments
Please sign in to leave a comment.