public static AbstractCircleFace Create(Face face) { FaceData data = FaceUtils.AskFaceData(face); AbstractCircleFace abs = null; switch (face.SolidFaceType) { case Face.FaceType.Cylindrical: abs = new CylinderFace(data); break; case Face.FaceType.Conical: abs = new CircularConeFace(data); break; case Face.FaceType.Planar: List <ArcEdgeData> edge = new List <ArcEdgeData>(); if (CircleAnnylusFace.IsCircleAnnylus(face, out edge)) { abs = new CircleAnnylusFace(data, edge); } break; default: break; } return(abs); }
/// <summary> /// 获取圆柱特征 /// </summary> /// <param name="circle"></param> /// <param name="cyl"></param> /// <returns></returns> public static CylinderFeater GetCylinderFeater(List <AbstractCircleFace> circle, CylinderFace cyl) { List <AbstractCircleFace> cylinder = new List <AbstractCircleFace>(); cylinder.Add(cyl); int index = circle.IndexOf(cyl); if (index != -1) { for (int i = index - 1; i >= 0; i--) { if (!(circle[i] is CylinderFace)) { cylinder.Add(circle[i]); } if ((circle[i] is CylinderFace) && (UMathUtils.IsEqual((circle[i] as CylinderFace).Radius, cyl.Radius))) { cylinder.Add(circle[i]); } if (circle[i] is CircleAnnylusFace) { break; } } for (int i = index + 1; i < circle.Count; i++) { if (!(circle[i] is CylinderFace)) { cylinder.Add(circle[i]); } if ((circle[i] is CylinderFace) && (UMathUtils.IsEqual((circle[i] as CylinderFace).Radius, cyl.Radius))) { cylinder.Add(circle[i]); } if (circle[i] is CircleAnnylusFace) { break; } } } return(new CylinderFeater(cylinder, cyl)); }
public CylinderFeater(List <AbstractCircleFace> circle, CylinderFace cyl) { this.Cylinder = cyl; this.CylinderFace = circle; SetDirection(cyl.Direction); }