Пример #1
0
 public static Version GetFileFormatVersion(FormplotTypes formplotType)
 {
     return(formplotType switch
     {
         FormplotTypes.None => new Version(1, 0),
         FormplotTypes.Defect => new Version(3, 0),
         _ => new Version(2, 0),
     });
Пример #2
0
        /// <summary>
        /// Gets the current file format version of a specific <see cref="FormplotTypes"/>.
        /// </summary>
        internal static Version GetFileFormatVersion(FormplotTypes formplotType)
        {
            switch (formplotType)
            {
            case FormplotTypes.None:
                return(new Version(1, 0));

            default:
                return(new Version(2, 0));
            }
        }
Пример #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Formplot"/> class.
        /// </summary>
        /// <param name="formplotType">Type of the formplot.</param>
        protected Formplot(FormplotTypes formplotType)
        {
            FormplotType = formplotType;
            GeometryType = Geometry.GetGeometryTypeFromFormplotType(formplotType);

            if (GeometryType != GeometryTypes.None)
            {
                _Nominal = Geometry.Create(GeometryType);
                _Actual  = Geometry.Create(GeometryType);
            }
        }
Пример #4
0
        /// <summary>
        /// Creates a formplot with the specified type.
        /// </summary>
        /// <param name="type">The formplot type.</param>
        /// <returns></returns>
        private static Formplot CreateFormplot(FormplotTypes type)
        {
            switch (type)
            {
            case FormplotTypes.None:
                return(new EmptyPlot());

            case FormplotTypes.Roundness:
                return(new RoundnessPlot());

            case FormplotTypes.Flatness:
                return(new FlatnessPlot());

            case FormplotTypes.CurveProfile:
                return(new CurveProfilePlot());

            case FormplotTypes.Straightness:
                return(new StraightnessPlot());

            case FormplotTypes.Cylindricity:
                return(new CylindricityPlot());

            case FormplotTypes.Pitch:
                return(new PitchPlot());

            case FormplotTypes.BorePattern:
                return(new BorePatternPlot());

            case FormplotTypes.CircleInProfile:
                return(new CircleInProfilePlot());

            case FormplotTypes.Fourier:
                return(new FourierPlot());

            case FormplotTypes.FlushGap:
                return(new FlushGapPlot());

            case FormplotTypes.Defect:
                return(new DefectPlot());

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
Пример #5
0
 private static Formplot CreateFormplot(Stream?pointDataStream, Version version, FormplotTypes formplotType, XmlReader reader)
 {
     return(formplotType switch
     {
         FormplotTypes.None => Deserialize <EmptyPlot, EmptyPoint, EmptyGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Roundness => Deserialize <RoundnessPlot, CirclePoint, CircleGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Flatness => Deserialize <FlatnessPlot, PlanePoint, PlaneGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.CurveProfile => Deserialize <CurveProfilePlot, CurvePoint, CurveGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Straightness => Deserialize <StraightnessPlot, LinePoint, LineGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Cylindricity => Deserialize <CylindricityPlot, CylinderPoint, CylinderGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Pitch => Deserialize <PitchPlot, PitchPoint, PitchGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.BorePattern => Deserialize <BorePatternPlot, CurvePoint, CurveGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.CircleInProfile => Deserialize <CircleInProfilePlot, CircleInProfilePoint, CircleInProfileGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Fourier => Deserialize <FourierPlot, FourierPoint, EmptyGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.FlushGap => Deserialize <FlushGapPlot, FlushGapPoint, FlushGapGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Defect => Deserialize <DefectPlot, Defect, DefectGeometry>(reader, pointDataStream, formplotType, version),
         FormplotTypes.Fillet => Deserialize <FilletPlot, FilletPoint, FilletGeometry>(reader, pointDataStream, formplotType, version),
         _ => throw new NotSupportedException($"Invalid form plot file. The plot with type {formplotType} is not supported.")
     });
Пример #6
0
 /// <summary>Constructor.</summary>
 protected Formplot(FormplotTypes formplotType)
 {
     FormplotType         = formplotType;
     OriginalFormplotType = formplotType;
 }
Пример #7
0
        /// <summary>
        /// Reads the points from the specified <see cref="Stream"/> and collects their specifications, such as type, tolerance, segment and metadata.
        /// </summary>
        /// <param name="formplotType">Type of the formplot.</param>
        /// <param name="metadataReader">The metadata reader.</param>
        /// <param name="pointdataStream">The pointdata stream.</param>
        /// <returns></returns>
        private static Point[] ReadPoints(FormplotTypes formplotType, XmlReader metadataReader, Stream pointdataStream)
        {
            if (metadataReader == null)
            {
                throw new ArgumentNullException(nameof(metadataReader));
            }

            if (pointdataStream == null)
            {
                throw new ArgumentNullException(nameof(pointdataStream));
            }

            var count          = 0;
            var propertyLists  = new Dictionary <Property, RangeList>();
            var statelists     = new Dictionary <PointState, RangeList>();
            var segmentlists   = new Dictionary <Segment, RangeList>();
            var tolerancelists = new Dictionary <Tolerance, RangeList>();

            while (metadataReader.Read() && metadataReader.NodeType != XmlNodeType.EndElement)
            {
                if (metadataReader.IsEmptyElement)
                {
                    continue;
                }

                switch (metadataReader.Name)
                {
                case "Count":
                    count = XmlConvert.ToInt32(metadataReader.ReadString());
                    break;

                case "Properties":
                    while (metadataReader.Read() && metadataReader.NodeType != XmlNodeType.EndElement)
                    {
                        switch (metadataReader.Name)
                        {
                        case "Property":
                            var points   = RangeList.TryParseOrEmpty(metadataReader.GetAttribute("Points"));
                            var property = Property.Deserialize(metadataReader);
                            propertyLists[property] = points;
                            break;
                        }
                    }
                    break;

                case "States":
                    while (metadataReader.Read() && metadataReader.NodeType != XmlNodeType.EndElement)
                    {
                        switch (metadataReader.Name)
                        {
                        case "State":
                            var points = RangeList.TryParseOrEmpty(metadataReader.GetAttribute("Points"));
                            var text   = metadataReader.ReadString();
                            var value  = ( PointState )Enum.Parse(typeof(PointState), text);
                            statelists[value] = points;
                            break;
                        }
                    }
                    break;

                case "Segments":
                    while (metadataReader.Read() && metadataReader.NodeType != XmlNodeType.EndElement)
                    {
                        switch (metadataReader.Name)
                        {
                        case "Segment":
                            var          points     = RangeList.TryParseOrEmpty(metadataReader.GetAttribute("Points"));
                            var          typeString = metadataReader.GetAttribute("Type");
                            SegmentTypes type;
                            Enum.TryParse(typeString, out type);
                            var name    = metadataReader.ReadString();
                            var segment = new Segment(name, type);
                            segmentlists[segment] = points;
                            break;
                        }
                    }
                    break;

                case "Tolerances":
                    var isTolerancesElement = false;
                    while (metadataReader.NodeType != XmlNodeType.EndElement || !isTolerancesElement)
                    {
                        if (metadataReader.NodeType == XmlNodeType.Element && metadataReader.Name.Equals("Tolerance"))
                        {
                            var points    = RangeList.TryParseOrEmpty(metadataReader.GetAttribute("Points"));
                            var tolerance = Tolerance.Deserialize(metadataReader);
                            tolerancelists[tolerance] = points;
                            metadataReader.Read();
                        }
                        else
                        {
                            metadataReader.Read();
                        }

                        isTolerancesElement = metadataReader.Name.Equals("Tolerances");
                    }
                    break;
                }
            }

            var result = new List <Point>();

            for (var index = 0; index < count; index++)
            {
                var point = Point.Create(formplotType);
                point.ReadFromStream(pointdataStream, index);
                result.Add(point);
            }

            SetProperties(propertyLists, result);
            SetStates(statelists, result);
            SetSegment(segmentlists, result);
            SetTolerance(tolerancelists, result);

            return(result.ToArray());
        }