Example #1
0
        internal static DxfLayer FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfLayer();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = (int)pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 62:
                    item.Color = item.ReadColorValue(pair.ShortValue);
                    break;

                case 6:
                    item.LineTypeName = (pair.StringValue);
                    break;

                case 290:
                    item.IsLayerPlotted = (pair.BoolValue);
                    break;

                case 370:
                    item.LineWeight = DxfLineWeight.FromRawValue(pair.ShortValue);
                    break;

                case 390:
                    item.PlotStylePointer = UIntHandle(pair.StringValue);
                    break;

                case 347:
                    item.MaterialHandle = UIntHandle(pair.StringValue);
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
Example #2
0
        internal static DxfBlockRecord FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfBlockRecord();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 340:
                    item.LayoutHandle = UIntHandle(pair.StringValue);
                    break;

                case 70:
                    item.InsertionUnits = (DxfUnits)(pair.ShortValue);
                    break;

                case 280:
                    item.Explodability = BoolShort(pair.ShortValue);
                    break;

                case 281:
                    item.Scalability = BoolShort(pair.ShortValue);
                    break;

                case 310:
                    item._bitmapPreviewData.Add((pair.StringValue));
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
Example #3
0
        public static bool TrySetExtensionData <THasXData>(this THasXData hasXData, DxfCodePair pair, DxfCodePairBufferReader buffer)
            where THasXData : IDxfHasXData, IDxfHasXDataHidden
        {
            if (pair.Code == DxfCodePairGroup.GroupCodeNumber && pair.StringValue.StartsWith("{"))
            {
                buffer.Advance();
                var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                hasXData.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                return(true);
            }
            else if (pair.Code == (int)DxfXDataType.ApplicationName)
            {
                buffer.Advance();
                hasXData.XDataHidden = DxfXData.FromBuffer(buffer, pair.StringValue);
                return(true);
            }

            return(false);
        }
Example #4
0
        internal override void AddValuePairs(List <DxfCodePair> pairs, DxfAcadVersion version, bool outputHandles)
        {
            if (version >= DxfAcadVersion.R13)
            {
                pairs.Add(new DxfCodePair(100, AcDbText));
            }

            pairs.Add(new DxfCodePair(2, Name));
            pairs.Add(new DxfCodePair(70, (short)StandardFlags));
            pairs.Add(new DxfCodePair(3, (Description)));
            pairs.Add(new DxfCodePair(72, (short)(AlignmentCode)));
            pairs.Add(new DxfCodePair(73, (short)Elements.Count));
            pairs.Add(new DxfCodePair(40, (TotalPatternLength)));
            foreach (var element in Elements)
            {
                element.AddValuePairs(pairs);
            }

            DxfXData.AddValuePairs(XData, pairs, version, outputHandles);
        }
        internal static DxfAppId FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfAppId();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = (int)pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
Example #6
0
        internal static DxfLineType FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfLineType();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 3:
                    item.Description = (pair.StringValue);
                    break;

                case 72:
                    item.AlignmentCode = (pair.ShortValue);
                    break;

                case 73:
                    item._elementCount = (pair.ShortValue);
                    break;

                case 40:
                    item.TotalPatternLength = (pair.DoubleValue);
                    break;

                case 49:
                    // start a new element
                    item.Elements.Add(new DxfLineTypeElement()
                    {
                        DashDotSpaceLength = pair.DoubleValue
                    });
                    break;

                case 74:
                    // add to last element
                    if (item.Elements.Count > 0)
                    {
                        item.Elements.Last().ComplexFlags = pair.ShortValue;
                    }
                    break;

                case 75:
                    // add to last element
                    if (item.Elements.Count > 0)
                    {
                        item.Elements.Last().ShapeNumber = pair.ShortValue;
                    }
                    break;

                case 340:
                    // add to last element
                    if (item.Elements.Count > 0)
                    {
                        item.Elements.Last().StylePointer.Handle = UIntHandle(pair.StringValue);
                    }
                    break;

                case 46:
                    // add to last element
                    if (item.Elements.Count > 0)
                    {
                        item.Elements.Last().ScaleValues.Add(pair.DoubleValue);
                    }
                    break;

                case 50:
                    // add to last element
                    if (item.Elements.Count > 0)
                    {
                        item.Elements.Last().RotationAngle = pair.DoubleValue;
                    }
                    break;

                case 44:
                    // add to last element, start a new offset value
                    if (item.Elements.Count > 0)
                    {
                        item.Elements.Last().Offsets.Add(new DxfVector(pair.DoubleValue, 0.0, 0.0));
                    }
                    break;

                case 45:
                    // add to last element, add to last offset value
                    if (item.Elements.Count > 0 && item.Elements.Last().Offsets.Count > 0)
                    {
                        item.Elements.Last().Offsets.Last().Y = pair.DoubleValue;
                    }
                    break;

                case 9:
                    // add to last element
                    if (item.Elements.Count > 0)
                    {
                        item.Elements.Last().TextString = pair.StringValue;
                    }
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
        internal static DxfStyle FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfStyle();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = (int)pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 40:
                    item.TextHeight = (pair.DoubleValue);
                    break;

                case 41:
                    item.WidthFactor = (pair.DoubleValue);
                    break;

                case 50:
                    item.ObliqueAngle = (pair.DoubleValue);
                    break;

                case 71:
                    item.TextGenerationFlags = (int)(pair.ShortValue);
                    break;

                case 42:
                    item.LastHeightUsed = (pair.DoubleValue);
                    break;

                case 3:
                    item.PrimaryFontFileName = (pair.StringValue);
                    break;

                case 4:
                    item.BigFontFileName = (pair.StringValue);
                    break;

                case 1071:
                    item.FontFlags = (pair.IntegerValue);
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
Example #8
0
        internal static DxfViewPort FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfViewPort();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = (int)pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 10:
                    item.LowerLeft.X = (pair.DoubleValue);
                    break;

                case 20:
                    item.LowerLeft.Y = (pair.DoubleValue);
                    break;

                case 11:
                    item.UpperRight.X = (pair.DoubleValue);
                    break;

                case 21:
                    item.UpperRight.Y = (pair.DoubleValue);
                    break;

                case 12:
                    item.ViewCenter.X = (pair.DoubleValue);
                    break;

                case 22:
                    item.ViewCenter.Y = (pair.DoubleValue);
                    break;

                case 13:
                    item.SnapBasePoint.X = (pair.DoubleValue);
                    break;

                case 23:
                    item.SnapBasePoint.Y = (pair.DoubleValue);
                    break;

                case 14:
                    item.SnapSpacing.X = (pair.DoubleValue);
                    break;

                case 24:
                    item.SnapSpacing.Y = (pair.DoubleValue);
                    break;

                case 15:
                    item.GridSpacing.X = (pair.DoubleValue);
                    break;

                case 25:
                    item.GridSpacing.Y = (pair.DoubleValue);
                    break;

                case 16:
                    item.ViewDirection.X = (pair.DoubleValue);
                    break;

                case 26:
                    item.ViewDirection.Y = (pair.DoubleValue);
                    break;

                case 36:
                    item.ViewDirection.Z = (pair.DoubleValue);
                    break;

                case 17:
                    item.TargetViewPoint.X = (pair.DoubleValue);
                    break;

                case 27:
                    item.TargetViewPoint.Y = (pair.DoubleValue);
                    break;

                case 37:
                    item.TargetViewPoint.Z = (pair.DoubleValue);
                    break;

                case 40:
                    item.ViewHeight = (pair.DoubleValue);
                    break;

                case 41:
                    item.ViewPortAspectRatio = (pair.DoubleValue);
                    break;

                case 42:
                    item.LensLength = (pair.DoubleValue);
                    break;

                case 43:
                    item.FrontClippingPlane = (pair.DoubleValue);
                    break;

                case 44:
                    item.BackClippingPlane = (pair.DoubleValue);
                    break;

                case 45:
                    item.ViewHeight = (pair.DoubleValue);
                    break;

                case 50:
                    item.SnapRotationAngle = (pair.DoubleValue);
                    break;

                case 51:
                    item.ViewTwistAngle = (pair.DoubleValue);
                    break;

                case 71:
                    item.ViewMode = (DxfViewMode)(pair.ShortValue);
                    break;

                case 72:
                    item.CircleSides = (int)(pair.ShortValue);
                    break;

                case 73:
                    item.FastZoom = BoolShort(pair.ShortValue);
                    break;

                case 74:
                    item.UCSIcon = (pair.ShortValue);
                    break;

                case 75:
                    item.SnapOn = BoolShort(pair.ShortValue);
                    break;

                case 76:
                    item.GridOn = BoolShort(pair.ShortValue);
                    break;

                case 77:
                    item.SnapStyle = (DxfSnapStyle)(pair.ShortValue);
                    break;

                case 78:
                    item.SnapIsometricPlane = (DxfSnapIsometricPlane)(pair.ShortValue);
                    break;

                case 1:
                    item.PlotStyleSheet = (pair.StringValue);
                    break;

                case 281:
                    item.RenderMode = (DxfViewRenderMode)(pair.ShortValue);
                    break;

                case 65:
                    item.HasOwnUCS = BoolShort(pair.ShortValue);
                    break;

                case 110:
                    item.UCSOrigin.X = (pair.DoubleValue);
                    break;

                case 120:
                    item.UCSOrigin.Y = (pair.DoubleValue);
                    break;

                case 130:
                    item.UCSOrigin.Z = (pair.DoubleValue);
                    break;

                case 111:
                    item.UCSXAxis.X = (pair.DoubleValue);
                    break;

                case 121:
                    item.UCSXAxis.Y = (pair.DoubleValue);
                    break;

                case 131:
                    item.UCSXAxis.Z = (pair.DoubleValue);
                    break;

                case 112:
                    item.UCSYAxis.X = (pair.DoubleValue);
                    break;

                case 122:
                    item.UCSYAxis.Y = (pair.DoubleValue);
                    break;

                case 132:
                    item.UCSYAxis.Z = (pair.DoubleValue);
                    break;

                case 79:
                    item.OrthographicViewType = (DxfOrthographicViewType)(pair.ShortValue);
                    break;

                case 146:
                    item.UCSElevation = (pair.DoubleValue);
                    break;

                case 345:
                    item.UCSHandle = UIntHandle(pair.StringValue);
                    break;

                case 346:
                    item.BaseUCSHandle = UIntHandle(pair.StringValue);
                    break;

                case 170:
                    item.ShadePlotSetting = (DxfShadeEdgeMode)(pair.ShortValue);
                    break;

                case 61:
                    item.MajorGridLines = BoolShort(pair.ShortValue);
                    break;

                case 332:
                    item.BackgroundObjectPointer = UIntHandle(pair.StringValue);
                    break;

                case 333:
                    item.ShadePlotObjectPointer = UIntHandle(pair.StringValue);
                    break;

                case 348:
                    item.VisualStyleObjectPointer = UIntHandle(pair.StringValue);
                    break;

                case 292:
                    item.IsDefaultLightingOn = (pair.BoolValue);
                    break;

                case 282:
                    item.DefaultLightingType = (DxfDefaultLightingType)(pair.ShortValue);
                    break;

                case 141:
                    item.Brightness = (pair.DoubleValue);
                    break;

                case 142:
                    item.Contrast = (pair.DoubleValue);
                    break;

                case 62:
                    item.AmbientColor = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 421:
                    item.AmbientColorInt = (pair.IntegerValue);
                    break;

                case 431:
                    item.AmbientColorName = (pair.StringValue);
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
Example #9
0
        internal static DxfView FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfView();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = (int)pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 40:
                    item.ViewHeight = (pair.DoubleValue);
                    break;

                case 10:
                    item.ViewCenterPoint.X = (pair.DoubleValue);
                    break;

                case 20:
                    item.ViewCenterPoint.Y = (pair.DoubleValue);
                    break;

                case 41:
                    item.ViewWidth = (pair.DoubleValue);
                    break;

                case 11:
                    item.ViewDirection.X = (pair.DoubleValue);
                    break;

                case 21:
                    item.ViewDirection.Y = (pair.DoubleValue);
                    break;

                case 31:
                    item.ViewDirection.Z = (pair.DoubleValue);
                    break;

                case 12:
                    item.TargetPoint.X = (pair.DoubleValue);
                    break;

                case 22:
                    item.TargetPoint.Y = (pair.DoubleValue);
                    break;

                case 32:
                    item.TargetPoint.Z = (pair.DoubleValue);
                    break;

                case 42:
                    item.LensLength = (pair.DoubleValue);
                    break;

                case 43:
                    item.FrontClippingPlane = (pair.DoubleValue);
                    break;

                case 44:
                    item.BackClippingPlane = (pair.DoubleValue);
                    break;

                case 50:
                    item.TwistAngle = (pair.DoubleValue);
                    break;

                case 71:
                    item.ViewMode = (pair.ShortValue);
                    break;

                case 281:
                    item.RenderMode = (DxfViewRenderMode)(pair.ShortValue);
                    break;

                case 72:
                    item.IsAssociatedUCSPresent = BoolShort(pair.ShortValue);
                    break;

                case 73:
                    item.IsCameraPlottable = BoolShort(pair.ShortValue);
                    break;

                case 332:
                    item.BackgroundObjectPointer = UIntHandle(pair.StringValue);
                    break;

                case 334:
                    item.SelectionObjectPointer = UIntHandle(pair.StringValue);
                    break;

                case 348:
                    item.VisualStyleObjectPointer = UIntHandle(pair.StringValue);
                    break;

                case 361:
                    item.SunOwnershipPointer = UIntHandle(pair.StringValue);
                    break;

                case 110:
                    item.UCSOrigin.X = (pair.DoubleValue);
                    break;

                case 120:
                    item.UCSOrigin.Y = (pair.DoubleValue);
                    break;

                case 130:
                    item.UCSOrigin.Z = (pair.DoubleValue);
                    break;

                case 111:
                    item.UCSXAxis.X = (pair.DoubleValue);
                    break;

                case 121:
                    item.UCSXAxis.Y = (pair.DoubleValue);
                    break;

                case 131:
                    item.UCSXAxis.Z = (pair.DoubleValue);
                    break;

                case 112:
                    item.UCSYAxis.X = (pair.DoubleValue);
                    break;

                case 122:
                    item.UCSYAxis.Y = (pair.DoubleValue);
                    break;

                case 132:
                    item.UCSYAxis.Z = (pair.DoubleValue);
                    break;

                case 79:
                    item.OrthographicViewType = (DxfOrthographicViewType)(pair.ShortValue);
                    break;

                case 146:
                    item.UCSElevation = (pair.DoubleValue);
                    break;

                case 345:
                    item.UCSHandle = UIntHandle(pair.StringValue);
                    break;

                case 346:
                    item.BaseUCSHandle = UIntHandle(pair.StringValue);
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
Example #10
0
        public bool TryGetStyleFromXDataDifference(DxfXData xdata, out DxfDimStyle style)
        {
            style = default(DxfDimStyle);
            var dimStyleList = xdata?.Items.OfType <DxfXDataNamedList>().FirstOrDefault(l => l.Name == XDataStyleName);

            if (dimStyleList == null)
            {
                // no dim style override
                return(false);
            }

            if (dimStyleList.Items.Count % 2 != 0)
            {
                // must be an even number
                return(false);
            }

            var codePairs = new List <DxfCodePair>();

            for (int i = 0; i < dimStyleList.Items.Count; i += 2)
            {
                if (!(dimStyleList.Items[i] is DxfXDataInteger codeItem))
                {
                    // must alternate between int/<data>
                    return(false);
                }

                DxfCodePair pair;
                var         valueItem = dimStyleList.Items[i + 1];
                var         code      = codeItem.Value;
                switch (DxfCodePair.ExpectedType(code).Name)
                {
                case nameof(Boolean):
                    pair = new DxfCodePair(code, true);
                    break;

                case nameof(Double) when valueItem is DxfXDataDistance dist:
                    pair = new DxfCodePair(code, dist.Value);
                    break;

                case nameof(Double) when valueItem is DxfXDataReal real:
                    pair = new DxfCodePair(code, real.Value);
                    break;

                case nameof(Double) when valueItem is DxfXDataScaleFactor scale:
                    pair = new DxfCodePair(code, scale.Value);
                    break;

                case nameof(Int16) when valueItem is DxfXDataInteger i32:
                    pair = new DxfCodePair(code, i32.Value);
                    break;

                case nameof(Int32) when valueItem is DxfXDataLong i32:
                    pair = new DxfCodePair(code, i32.Value);
                    break;

                case nameof(Int64) when valueItem is DxfXDataLong i32:
                    pair = new DxfCodePair(code, i32.Value);
                    break;

                case nameof(String) when valueItem is DxfXDataString str:
                    pair = new DxfCodePair(code, str.Value);
                    break;

                default:
                    // unexpected code pair type
                    return(false);
                }

                codePairs.Add(pair);
            }

            if (codePairs.Count == 0)
            {
                // no difference to apply
                return(false);
            }

            // if we made it this far, there is a differnce that should be applied
            style = Clone();
            foreach (var pair in codePairs)
            {
                style.ApplyCodePair(pair);
            }

            return(true);
        }
Example #11
0
        internal static DxfUcs FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfUcs();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = (int)pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 10:
                    item.Origin = item.Origin.WithUpdatedX(pair.DoubleValue);
                    break;

                case 20:
                    item.Origin = item.Origin.WithUpdatedY(pair.DoubleValue);
                    break;

                case 30:
                    item.Origin = item.Origin.WithUpdatedZ(pair.DoubleValue);
                    break;

                case 11:
                    item.XAxis = item.XAxis.WithUpdatedX(pair.DoubleValue);
                    break;

                case 21:
                    item.XAxis = item.XAxis.WithUpdatedY(pair.DoubleValue);
                    break;

                case 31:
                    item.XAxis = item.XAxis.WithUpdatedZ(pair.DoubleValue);
                    break;

                case 12:
                    item.YAxis = item.YAxis.WithUpdatedX(pair.DoubleValue);
                    break;

                case 22:
                    item.YAxis = item.YAxis.WithUpdatedY(pair.DoubleValue);
                    break;

                case 32:
                    item.YAxis = item.YAxis.WithUpdatedZ(pair.DoubleValue);
                    break;

                case 79:
                    item.OrthographicViewType = (DxfOrthographicViewType)(pair.ShortValue);
                    break;

                case 146:
                    item.Elevation = (pair.DoubleValue);
                    break;

                case 346:
                    item.BaseUcsHandle = UIntHandle(pair.StringValue);
                    break;

                case 71:
                    item.OrthographicType = (DxfOrthographicViewType)(pair.ShortValue);
                    break;

                case 13:
                    item.OrthographicOrigin = item.OrthographicOrigin.WithUpdatedX(pair.DoubleValue);
                    break;

                case 23:
                    item.OrthographicOrigin = item.OrthographicOrigin.WithUpdatedY(pair.DoubleValue);
                    break;

                case 33:
                    item.OrthographicOrigin = item.OrthographicOrigin.WithUpdatedZ(pair.DoubleValue);
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }
        internal static DxfDimStyle FromBuffer(DxfCodePairBufferReader buffer)
        {
            var item = new DxfDimStyle();

            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                buffer.Advance();
                switch (pair.Code)
                {
                case 70:
                    item.StandardFlags = (int)pair.ShortValue;
                    break;

                case DxfCodePairGroup.GroupCodeNumber:
                    var groupName = DxfCodePairGroup.GetGroupName(pair.StringValue);
                    item.ExtensionDataGroups.Add(DxfCodePairGroup.FromBuffer(buffer, groupName));
                    break;

                case 3:
                    item.DimensioningSuffix = (pair.StringValue);
                    break;

                case 4:
                    item.AlternateDimensioningSuffix = (pair.StringValue);
                    break;

                case 5:
                    item.ArrowBlockName = (pair.StringValue);
                    break;

                case 6:
                    item.FirstArrowBlockName = (pair.StringValue);
                    break;

                case 7:
                    item.SecondArrowBlockName = (pair.StringValue);
                    break;

                case 40:
                    item.DimensioningScaleFactor = (pair.DoubleValue);
                    break;

                case 41:
                    item.DimensioningArrowSize = (pair.DoubleValue);
                    break;

                case 42:
                    item.DimensionExtensionLineOffset = (pair.DoubleValue);
                    break;

                case 43:
                    item.DimensionLineIncrement = (pair.DoubleValue);
                    break;

                case 44:
                    item.DimensionExtensionLineExtension = (pair.DoubleValue);
                    break;

                case 45:
                    item.DimensionDistanceRoundingValue = (pair.DoubleValue);
                    break;

                case 46:
                    item.DimensionLineExtension = (pair.DoubleValue);
                    break;

                case 47:
                    item.DimensionPlusTolerance = (pair.DoubleValue);
                    break;

                case 48:
                    item.DimensionMinusTolerance = (pair.DoubleValue);
                    break;

                case 71:
                    item.GenerateDimensionTolerances = BoolShort(pair.ShortValue);
                    break;

                case 72:
                    item.GenerateDimensionLimits = BoolShort(pair.ShortValue);
                    break;

                case 73:
                    item.DimensionTextInsideHorizontal = BoolShort(pair.ShortValue);
                    break;

                case 74:
                    item.DimensionTextOutsideHorizontal = BoolShort(pair.ShortValue);
                    break;

                case 75:
                    item.SuppressFirstDimensionExtensionLine = BoolShort(pair.ShortValue);
                    break;

                case 76:
                    item.SuppressSecondDimensionExtensionLine = BoolShort(pair.ShortValue);
                    break;

                case 77:
                    item.TextAboveDimensionLine = BoolShort(pair.ShortValue);
                    break;

                case 78:
                    item.DimensionUnitZeroSuppression = (DxfUnitZeroSuppression)(pair.ShortValue);
                    break;

                case 79:
                    item.DimensionAngleZeroSuppression = (DxfUnitZeroSuppression)(pair.ShortValue);
                    break;

                case 140:
                    item.DimensioningTextHeight = (pair.DoubleValue);
                    break;

                case 141:
                    item.CenterMarkSize = (pair.DoubleValue);
                    break;

                case 142:
                    item.DimensioningTickSize = (pair.DoubleValue);
                    break;

                case 143:
                    item.AlternateDimensioningScaleFactor = (pair.DoubleValue);
                    break;

                case 144:
                    item.DimensionLinearMeasurementScaleFactor = (pair.DoubleValue);
                    break;

                case 145:
                    item.DimensionVerticalTextPosition = (pair.DoubleValue);
                    break;

                case 146:
                    item.DimensionToleranceDisplaceScaleFactor = (pair.DoubleValue);
                    break;

                case 147:
                    item.DimensionLineGap = (pair.DoubleValue);
                    break;

                case 148:
                    item.AlternateDimensioningUnitRounding = (pair.DoubleValue);
                    break;

                case 170:
                    item.UseAlternateDimensioning = BoolShort(pair.ShortValue);
                    break;

                case 171:
                    item.AlternateDimensioningDecimalPlaces = (pair.ShortValue);
                    break;

                case 172:
                    item.ForceDimensionLineExtensionsOutsideIfTextExists = BoolShort(pair.ShortValue);
                    break;

                case 173:
                    item.UseSeparateArrowBlocksForDimensions = BoolShort(pair.ShortValue);
                    break;

                case 174:
                    item.ForceDimensionTextInsideExtensions = BoolShort(pair.ShortValue);
                    break;

                case 175:
                    item.SuppressOutsideExtensionDimensionLines = BoolShort(pair.ShortValue);
                    break;

                case 176:
                    item.DimensionLineColor = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 177:
                    item.DimensionExtensionLineColor = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 178:
                    item.DimensionTextColor = DxfColor.FromRawValue(pair.ShortValue);
                    break;

                case 179:
                    item.AngularDimensionPrecision = (pair.ShortValue);
                    break;

                case 270:
                    item.DimensionUnitFormat = (DxfUnitFormat)(pair.ShortValue);
                    break;

                case 271:
                    item.DimensionUnitToleranceDecimalPlaces = (pair.ShortValue);
                    break;

                case 272:
                    item.DimensionToleranceDecimalPlaces = (pair.ShortValue);
                    break;

                case 273:
                    item.AlternateDimensioningUnits = (DxfUnitFormat)(pair.ShortValue);
                    break;

                case 274:
                    item.AlternateDimensioningToleranceDecimalPlaces = (pair.ShortValue);
                    break;

                case 275:
                    item.DimensioningAngleFormat = (DxfAngleFormat)(pair.ShortValue);
                    break;

                case 276:
                    item.DimensionFractionFormat = (DxfDimensionFractionFormat)(pair.ShortValue);
                    break;

                case 277:
                    item.DimensionNonAngularUnits = (DxfNonAngularUnits)(pair.ShortValue);
                    break;

                case 278:
                    item.DimensionDecimalSeparatorChar = (char)(pair.ShortValue);
                    break;

                case 279:
                    item.DimensionTextMovementRule = (DxfDimensionTextMovementRule)(pair.ShortValue);
                    break;

                case 280:
                    item.DimensionTextJustification = (DxfDimensionTextJustification)(pair.ShortValue);
                    break;

                case 281:
                    item.SuppressFirstDimensionExtensionLine = BoolShort(pair.ShortValue);
                    break;

                case 282:
                    item.SuppressSecondDimensionExtensionLine = BoolShort(pair.ShortValue);
                    break;

                case 283:
                    item.DimensionToleranceVerticalJustification = (DxfJustification)(pair.ShortValue);
                    break;

                case 284:
                    item.DimensionToleranceZeroSuppression = (DxfUnitZeroSuppression)(pair.ShortValue);
                    break;

                case 285:
                    item.AlternateDimensioningZeroSupression = (DxfUnitZeroSuppression)(pair.ShortValue);
                    break;

                case 286:
                    item.AlternateDimensioningToleranceZeroSupression = (DxfUnitZeroSuppression)(pair.ShortValue);
                    break;

                case 287:
                    item.DimensionTextAndArrowPlacement = (DxfDimensionFit)(pair.ShortValue);
                    break;

                case 288:
                    item.DimensionCursorControlsTextPosition = BoolShort(pair.ShortValue);
                    break;

                case 289:
                    item.DimensionTextAndArrowPlacement = (DxfDimensionFit)(pair.ShortValue);
                    break;

                case 340:
                    item.DimensionTextStyle = (pair.StringValue);
                    break;

                case 341:
                    item.DimensionLeaderBlockName = (pair.StringValue);
                    break;

                case 342:
                    item.ArrowBlockName = (pair.StringValue);
                    break;

                case 343:
                    item.FirstArrowBlockName = (pair.StringValue);
                    break;

                case 344:
                    item.SecondArrowBlockName = (pair.StringValue);
                    break;

                case 371:
                    item.DimensionLineWeight = DxfLineWeight.FromRawValue(pair.ShortValue);
                    break;

                case 372:
                    item.DimensionExtensionLineWeight = DxfLineWeight.FromRawValue(pair.ShortValue);
                    break;

                case (int)DxfXDataType.ApplicationName:
                    item.XData = DxfXData.FromBuffer(buffer, pair.StringValue);
                    break;

                default:
                    item.TrySetPair(pair);
                    break;
                }
            }

            return(item);
        }