public static AbstractFaceSlopeAndDia CreateFaceSlopeAndDia(Face face)
        {
            FaceData data = FaceUtils.AskFaceData(face);
            AbstractFaceSlopeAndDia faceSd = null;

            switch (face.SolidFaceType)
            {
            case Face.FaceType.Planar:
                faceSd = new PlaneFaceSlopeAndDia(data);
                break;

            case Face.FaceType.Cylindrical:
                faceSd = new CylinderFaceSlopeAndDia(data);
                break;

            case Face.FaceType.Conical:
                faceSd = new CircularConeFaceSlopeAndDia(data);
                break;

            default:
                faceSd = new SweptFaceFaceSlopeAndDia(data);
                break;
            }
            return(faceSd);
        }
        public AnalysisFaceSlopeAndDia(Face face, Vector3d vec)
        {
            this.Face = face;
            this.vec  = vec;
            double[] dia   = new double[2];
            double[] slope = new double[2];
            AbstractFaceSlopeAndDia absface = FaceSlopeAndDiaFactory.CreateFaceSlopeAndDia(face);

            this.Data = absface.Data;
            absface.GetSlopeAndDia(vec, out slope, out dia);
            this.MaxSlope = slope[1];
            this.MinSlope = slope[0];
            this.MinDia   = dia[0];
            this.MaxDia   = dia[1];
        }