Ejemplo n.º 1
0
        public static bool TrySetExtensionData <THasXData>(this THasXData hasXData, DxfCodePair pair, DxfCodePairBufferReader buffer)
            where THasXData : IDxfHasXData
        {
            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 >= 1000)
            {
                buffer.Advance();
                DxfXData.PopulateFromBuffer(buffer, hasXData.XData, pair.StringValue);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
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)
                    {
                        var offsets = item.Elements.Last().Offsets;
                        offsets[offsets.Count - 1] = offsets[offsets.Count - 1].WithUpdatedY(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:
                    DxfXData.PopulateFromBuffer(buffer, item.XData, pair.StringValue);
                    break;

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

            return(item);
        }