コード例 #1
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readingData = false;

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

                if (readingData)
                {
                    DataPairs.Add(pair);
                }
                else
                {
                    if (pair.Code == 280)
                    {
                        DuplicateRecordHandling = (DxfDictionaryDuplicateRecordHandling)pair.ShortValue;
                        buffer.Advance();
                        readingData = true;
                        continue;
                    }

                    if (base.TrySetPair(pair))
                    {
                        buffer.Advance();
                        continue;
                    }

                    if (this.TrySetExtensionData(pair, buffer))
                    {
                        continue;
                    }

                    if (pair.Code == 100)
                    {
                        Debug.Assert(pair.StringValue == "AcDbXrecord");
                        buffer.Advance();
                        continue;
                    }
                    else if (pair.Code == 5 || pair.Code == 105)
                    {
                        // these codes aren't allowed here
                        ExcessCodePairs.Add(pair);
                    }
                    else
                    {
                        DataPairs.Add(pair);
                        readingData = true;
                    }
                }

                buffer.Advance();
            }

            return(PostParse());
        }
コード例 #2
0
ファイル: DxfSortentsTable.cs プロジェクト: zakb120/dxf
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            var isReadyForSortHandles = false;

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 5:
                    if (isReadyForSortHandles)
                    {
                        SortItemsPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.HandleString(pair.StringValue)));
                    }
                    else
                    {
                        ((IDxfItemInternal)this).Handle = DxfCommonConverters.HandleString(pair.StringValue);
                        isReadyForSortHandles           = true;
                    }
                    break;

                case 100:
                    isReadyForSortHandles = true;
                    break;

                case 330:
                    ((IDxfItemInternal)this).OwnerHandle = DxfCommonConverters.HandleString(pair.StringValue);
                    isReadyForSortHandles = true;
                    break;

                case 331:
                    EntitiesPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.HandleString(pair.StringValue)));
                    isReadyForSortHandles = true;
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
コード例 #3
0
ファイル: DxfLwPolyline.cs プロジェクト: yangkf1985/Dxf
        internal override DxfEntity PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 10:
                    // start a new vertex
                    Vertices.Add(new DxfLwPolylineVertex());
                    Vertices.Last().X = pair.DoubleValue;
                    break;

                case 20:
                    Vertices.Last().Y = pair.DoubleValue;
                    break;

                case 40:
                    Vertices.Last().StartingWidth = pair.DoubleValue;
                    break;

                case 41:
                    Vertices.Last().EndingWidth = pair.DoubleValue;
                    break;

                case 42:
                    Vertices.Last().Bulge = pair.DoubleValue;
                    break;

                case 91:
                    Vertices.Last().Identifier = pair.IntegerValue;
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
コード例 #4
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (pair.Code == 0)
                {
                    break;
                }

                switch (pair.Code)
                {
                case 1:
                    Debug.Assert(pair.StringValue == "SectionTypeSettings");
                    buffer.Advance();
                    for (var sectionSettings = DxfSectionTypeSettings.FromBuffer(buffer); sectionSettings != null; sectionSettings = DxfSectionTypeSettings.FromBuffer(buffer))
                    {
                        SectionTypeSettings.Add(sectionSettings);
                    }
                    break;

                case 90:
                    SectionType = pair.IntegerValue;
                    buffer.Advance();
                    break;

                case 91:
                    var generationSettingsCount = pair.IntegerValue;
                    buffer.Advance();
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }

                    buffer.Advance();
                    break;
                }
            }

            return(PostParse());
        }
コード例 #5
0
ファイル: DxfLightList.cs プロジェクト: yangkf1985/Dxf
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readVersionNumber = false;

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 5:
                    // pointer to a new light
                    LightsPointers.Pointers.Add(new DxfPointer(DxfCommonConverters.UIntHandle(pair.StringValue)));
                    break;

                case 1:
                    // don't worry about the name; it'll be read from the light entity directly
                    break;

                case 90:
                    if (readVersionNumber)
                    {
                        // count of lights is ignored since it's implicitly set by reading the values
                    }
                    else
                    {
                        Version           = pair.IntegerValue;
                        readVersionNumber = true;
                    }
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
コード例 #6
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool isReadingPlotSettings = true;

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (isReadingPlotSettings)
                {
                    if (pair.Code == 100 && pair.StringValue == "AcDbLayout")
                    {
                        isReadingPlotSettings = false;
                    }
                    else
                    {
                        if (!base.TrySetPair(pair))
                        {
                            ExcessCodePairs.Add(pair);
                        }
                    }
                }
                else
                {
                    if (!TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                }

                buffer.Advance();
            }

            return(PostParse());
        }
コード例 #7
0
ファイル: DxfTableStyle.cs プロジェクト: zakb120/dxf
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            int code_280_index = 0;

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 3:
                    this.Description = (pair.StringValue);
                    buffer.Advance();
                    break;

                case 7:
                    var style = DxfTableCellStyle.FromBuffer(buffer);
                    CellStyles.Add(style);
                    break;

                case 40:
                    this.HorizontalCellMargin = (pair.DoubleValue);
                    buffer.Advance();
                    break;

                case 41:
                    this.VerticalCellMargin = (pair.DoubleValue);
                    buffer.Advance();
                    break;

                case 70:
                    this.FlowDirection = (DxfFlowDirection)(pair.ShortValue);
                    buffer.Advance();
                    break;

                case 71:
                    this.Flags = (pair.ShortValue);
                    buffer.Advance();
                    break;

                case 280:
                    switch (code_280_index)
                    {
                    case 0:
                        this.Version = (DxfVersion)(pair.ShortValue);
                        code_280_index++;
                        break;

                    case 1:
                        this.IsTitleSuppressed = BoolShort(pair.ShortValue);
                        code_280_index++;
                        break;

                    default:
                        Debug.Assert(false, "Unexpected extra values for code 280");
                        break;
                    }

                    buffer.Advance();
                    break;

                case 281:
                    this.IsColumnHeadingSuppressed = BoolShort(pair.ShortValue);
                    buffer.Advance();
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }

                    buffer.Advance();
                    break;
                }
            }

            return(PostParse());
        }
コード例 #8
0
ファイル: DxfLwPolyline.cs プロジェクト: tevfikoguz/dxf
        internal override DxfEntity PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            while (buffer.ItemsRemain)
            {
                var pair = buffer.Peek();
                if (pair.Code == 0)
                {
                    break;
                }

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                if (pair.Code == 0)
                {
                    break;
                }

                switch (pair.Code)
                {
                // vertex-specific pairs
                case 10:
                    // start a new vertex
                    Vertices.Add(new DxfLwPolylineVertex());
                    Vertices.Last().X = pair.DoubleValue;
                    break;

                case 20:
                    Vertices.Last().Y = pair.DoubleValue;
                    break;

                case 40:
                    Vertices.Last().StartingWidth = pair.DoubleValue;
                    break;

                case 41:
                    Vertices.Last().EndingWidth = pair.DoubleValue;
                    break;

                case 42:
                    Vertices.Last().Bulge = pair.DoubleValue;
                    break;

                case 91:
                    Vertices.Last().Identifier = pair.IntegerValue;
                    break;

                // all other pairs
                case 39:
                    Thickness = pair.DoubleValue;
                    break;

                case 43:
                    ConstantWidth = pair.DoubleValue;
                    break;

                case 70:
                    Flags = pair.ShortValue;
                    break;

                case 210:
                    ExtrusionDirection = ExtrusionDirection.WithUpdatedX(pair.DoubleValue);
                    break;

                case 220:
                    ExtrusionDirection = ExtrusionDirection.WithUpdatedY(pair.DoubleValue);
                    break;

                case 230:
                    ExtrusionDirection = ExtrusionDirection.WithUpdatedZ(pair.DoubleValue);
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
コード例 #9
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            var hasReadFrontClippingPlane = false;
            var hasSetInverseMatrix       = false;
            var matrixList = new List <double>();

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 70:
                    var boundaryPointCount = pair.ShortValue;
                    break;

                case 10:
                    // code 10 always starts a new point
                    ClipBoundaryDefinitionPoints.Add(new DxfPoint());
                    ClipBoundaryDefinitionPoints.Last().X = pair.DoubleValue;
                    break;

                case 20:
                    ClipBoundaryDefinitionPoints.Last().Y = pair.DoubleValue;
                    break;

                case 30:
                    ClipBoundaryDefinitionPoints.Last().Z = pair.DoubleValue;
                    break;

                case 11:
                    ClipBoundaryOrigin.X = pair.DoubleValue;
                    break;

                case 12:
                    ClipBoundaryOrigin.Y = pair.DoubleValue;
                    break;

                case 13:
                    ClipBoundaryOrigin.Z = pair.DoubleValue;
                    break;

                case 40:
                    if (!hasReadFrontClippingPlane)
                    {
                        FrontClippingPlaneDistance = pair.DoubleValue;
                        hasReadFrontClippingPlane  = true;
                    }
                    else
                    {
                        matrixList.Add(pair.DoubleValue);
                        if (matrixList.Count == 12)
                        {
                            var m11    = matrixList[0];
                            var m21    = matrixList[1];
                            var m31    = matrixList[2];
                            var m41    = 0.0;
                            var m12    = matrixList[0];
                            var m22    = matrixList[1];
                            var m32    = matrixList[2];
                            var m42    = 0.0;
                            var m13    = matrixList[0];
                            var m23    = matrixList[1];
                            var m33    = matrixList[2];
                            var m43    = 0.0;
                            var m14    = matrixList[0];
                            var m24    = matrixList[1];
                            var m34    = matrixList[2];
                            var m44    = 0.0;
                            var matrix = new DxfTransformationMatrix(
                                m11, m12, m13, m14,
                                m21, m22, m23, m24,
                                m31, m32, m33, m34,
                                m41, m42, m43, m44);
                            if (!hasSetInverseMatrix)
                            {
                                InverseTransformationMatrix = matrix;
                                hasSetInverseMatrix         = true;
                            }
                            else
                            {
                                TransformationMatrix = matrix;
                            }

                            matrixList.Clear();
                        }
                    }
                    break;

                case 41:
                    BackClippingPlaneDistance = pair.DoubleValue;
                    break;

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

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

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

                case 210:
                    ClipBoundaryNormal.X = pair.DoubleValue;
                    break;

                case 220:
                    ClipBoundaryNormal.Y = pair.DoubleValue;
                    break;

                case 230:
                    ClipBoundaryNormal.Z = pair.DoubleValue;
                    break;

                default:
                    if (!TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            Debug.Assert(matrixList.Count == 0);
            return(PostParse());
        }
コード例 #10
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool seenVersion  = false;
            bool readingHours = false;
            int  julianDay    = -1;

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 1:
                    this.SunSetupName = (pair.StringValue);
                    break;

                case 2:
                    this.Description = (pair.StringValue);
                    break;

                case 3:
                    this.SheetSetName = (pair.StringValue);
                    break;

                case 4:
                    this.SheetSubsetName = (pair.StringValue);
                    break;

                case 40:
                    this.Spacing = (pair.DoubleValue);
                    break;

                case 70:
                    this.OutputType = (pair.ShortValue);
                    break;

                case 73:
                    readingHours = true;
                    break;

                case 74:
                    this.ShadePlotType = (pair.ShortValue);
                    break;

                case 75:
                    this.ViewportsPerPage = (pair.ShortValue);
                    break;

                case 76:
                    this.ViewportDistributionRowCount = (pair.ShortValue);
                    break;

                case 77:
                    this.ViewportDistributionColumnCount = (pair.ShortValue);
                    break;

                case 90:
                    if (!seenVersion)
                    {
                        this.Version = pair.IntegerValue;
                        seenVersion  = true;
                    }
                    else
                    {
                        // after the version, 90 pairs come in julianDay/secondsPastMidnight duals
                        if (julianDay == -1)
                        {
                            julianDay = pair.IntegerValue;
                        }
                        else
                        {
                            var date = DxfCommonConverters.DateDouble(julianDay);
                            date = date.AddSeconds(pair.IntegerValue);
                            this.Dates.Add(date);
                            julianDay = -1;
                        }
                    }
                    break;

                case 93:
                    this.StartTime_SecondsPastMidnight = (pair.IntegerValue);
                    break;

                case 94:
                    this.EndTime_SecondsPastMidnight = (pair.IntegerValue);
                    break;

                case 95:
                    this.IntervalInSeconds = (pair.IntegerValue);
                    break;

                case 290:
                    if (!readingHours)
                    {
                        this.UseSubset = (pair.BoolValue);
                        readingHours   = true;
                    }
                    else
                    {
                        this.Hours.Add(pair.ShortValue);
                    }
                    break;

                case 291:
                    this.SelectDatesFromCalendar = (pair.BoolValue);
                    break;

                case 292:
                    this.SelectRangeOfDates = (pair.BoolValue);
                    break;

                case 293:
                    this.LockViewports = (pair.BoolValue);
                    break;

                case 294:
                    this.LabelViewports = (pair.BoolValue);
                    break;

                case 340:
                    this.PageSetupWizardPointer.Handle = UIntHandle(pair.StringValue);
                    break;

                case 341:
                    this.ViewPointer.Handle = UIntHandle(pair.StringValue);
                    break;

                case 342:
                    this.VisualStylePointer.Handle = UIntHandle(pair.StringValue);
                    break;

                case 343:
                    this.TextStylePointer.Handle = UIntHandle(pair.StringValue);
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }
コード例 #11
0
ファイル: DxfMLineStyle.cs プロジェクト: zakb120/dxf
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            var readElementCount = false;
            var elementCount     = 0;

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 2:
                    this.StyleName = (pair.StringValue);
                    break;

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

                case 51:
                    this.StartAngle = (pair.DoubleValue);
                    break;

                case 52:
                    this.EndAngle = (pair.DoubleValue);
                    break;

                case 70:
                    this._flags = (pair.ShortValue);
                    break;

                case 71:
                    elementCount     = (pair.ShortValue);
                    readElementCount = true;
                    break;

                case 49:
                    // found a new element value
                    Elements.Add(new DxfMLineStyleElement()
                    {
                        Offset = pair.DoubleValue
                    });
                    break;

                case 62:
                    if (readElementCount)
                    {
                        // update the last element
                        if (Elements.Count > 0)
                        {
                            Elements[Elements.Count - 1].Color = FromRawValue(pair.ShortValue);
                        }
                    }
                    else
                    {
                        this.FillColor = FromRawValue(pair.ShortValue);
                    }
                    break;

                case 6:
                    // update the last element
                    if (Elements.Count > 0)
                    {
                        Elements[Elements.Count - 1].LineType = pair.StringValue;
                    }
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(this);
        }
コード例 #12
0
        internal override DxfObject PopulateFromBuffer(DxfCodePairBufferReader buffer)
        {
            bool readElementCount = false;

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

                while (this.TrySetExtensionData(pair, buffer))
                {
                    pair = buffer.Peek();
                }

                switch (pair.Code)
                {
                case 2:
                    this.StyleName = (pair.StringValue);
                    break;

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

                case 6:
                    this._elementLineTypes.Add((pair.StringValue));
                    break;

                case 49:
                    this._elementOffsets.Add((pair.DoubleValue));
                    break;

                case 51:
                    this.StartAngle = (pair.DoubleValue);
                    break;

                case 52:
                    this.EndAngle = (pair.DoubleValue);
                    break;

                case 62:
                    if (readElementCount)
                    {
                        this._elementColors.Add(FromRawValue(pair.ShortValue));
                    }
                    else
                    {
                        this.FillColor = FromRawValue(pair.ShortValue);
                    }
                    break;

                case 70:
                    this._flags = (pair.ShortValue);
                    break;

                case 71:
                    this._elementCount = (pair.ShortValue);
                    readElementCount   = true;
                    break;

                default:
                    if (!base.TrySetPair(pair))
                    {
                        ExcessCodePairs.Add(pair);
                    }
                    break;
                }

                buffer.Advance();
            }

            return(PostParse());
        }