Пример #1
0
        public override void Read()
        {
            //Advance to the first value in the section
            this._reader.ReadNext();

            //Loop until the section ends
            while (this._reader.LastValueAsString != DxfFileToken.EndSection)
            {
                CadEntityTemplate template = this.readEntity();

                if (template == null)
                {
                    continue;
                }

                //Add the object and the template to the builder
                this._builder.AddTemplate(template);
            }
        }
Пример #2
0
        protected CadEntityTemplate readEntity()
        {
            CadEntityTemplate template = null;

            switch (this._reader.LastValueAsString)
            {
            case DxfFileToken.EntityAttribute:
                template = new DwgTextEntityTemplate(new AttributeEntity());
                break;

            case DxfFileToken.EntityAttributeDefinition:
                template = new DwgTextEntityTemplate(new AttributeDefinition());
                break;

            case DxfFileToken.EntityArc:
                template = new CadEntityTemplate(new Arc());
                break;

            case DxfFileToken.EntityCircle:
                template = new CadEntityTemplate(new Circle());
                break;

            case DxfFileToken.EntityEllipse:
                template = new CadEntityTemplate(new Ellipse());
                break;

            case DxfFileToken.EntityLine:
                template = new CadEntityTemplate(new Line());
                break;

            //case DxfFileToken.EntityLwPolyline:
            //	//template = new CadEntityTemplate(new Line());
            //	break;
            case DxfFileToken.EntityHatch:
                template = new CadHatchTemplate(new Hatch());
                break;

            case DxfFileToken.EntityInsert:
                template = new DwgInsertTemplate(new Insert());
                break;

            case DxfFileToken.EntityMText:
                template = new DwgTextEntityTemplate(new MText());
                break;

            case DxfFileToken.EntityMLine:
                template = new CadMLineTemplate(new MLine());
                break;

            case DxfFileToken.EntityPoint:
                template = new CadEntityTemplate(new Point());
                break;

            case DxfFileToken.EntityPolyline:
                template = new CadPolyLineTemplate();
                break;

            case DxfFileToken.EntityRay:
                template = new CadEntityTemplate(new Ray());
                break;

            case DxfFileToken.EntitySolid:
                template = new CadEntityTemplate(new Solid());
                break;

            case DxfFileToken.EntityText:
                template = new CadEntityTemplate(new TextEntity());
                break;

            case DxfFileToken.EntityVertex:
                template = new CadEntityTemplate(new Vertex2D());
                break;

            case DxfFileToken.EntityViewport:
                template = new DwgViewportTemplate(new Viewport());
                break;

            case DxfFileToken.EntityXline:
                template = new CadEntityTemplate(new XLine());
                break;

            default:
                this._notification?.Invoke(null, new NotificationEventArgs($"Entity not implemented: {this._reader.LastValueAsString}"));
                do
                {
                    this._reader.ReadNext();
                }while (this._reader.LastDxfCode != DxfCode.Start);
                return(null);
            }

            //Jump the 0 marker
            this._reader.ReadNext();

            this.readCommonObjectData(template);

            while (this._reader.LastDxfCode == DxfCode.Subclass)
            {
                switch (this._reader.LastValueAsString)
                {
                case DxfSubclassMarker.Attribute:
                    this.readMapped <AttributeEntity>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.AttributeDefinition:
                    this.readMapped <AttributeDefinition>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Arc:
                    this.readMapped <Arc>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Circle:
                    this.readMapped <Circle>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Ellipse:
                    this.readMapped <Ellipse>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Entity:
                    this.readMapped <Entity>(template.CadObject, template);
                    break;

                //case DxfSubclassMarker.Hatch:
                //	this.readHatch((Hatch)template.CadObject, (CadHatchTemplate)template);
                //	break;
                case DxfSubclassMarker.Insert:
                    this.readMapped <Insert>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Line:
                    this.readMapped <Line>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.MLine:
                    this.readMapped <MLine>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.MText:
                    this.readMapped <MText>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Point:
                    this.readMapped <Point>(template.CadObject, template);
                    break;

                //case DxfSubclassMarker.PolyfaceMesh:
                //	this.readMapped<PolyLine2D>(template.CadObject, template);
                //	break;
                case DxfSubclassMarker.Polyline:
                    (template as CadPolyLineTemplate).SetPolyLineObject(new Polyline2D());
                    this.readMapped <Polyline2D>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Polyline3d:
                    (template as CadPolyLineTemplate).SetPolyLineObject(new Polyline3D());
                    this.readMapped <Polyline3D>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Polyline3dVertex:
                    this.readMapped <Vertex3D>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Ray:
                    this.readMapped <Ray>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Text:
                    this.readMapped <TextEntity>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Trace:
                    this.readMapped <Solid>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Vertex:
                    this.readMapped <Vertex>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.Viewport:
                    this.readMapped <Viewport>(template.CadObject, template);
                    break;

                case DxfSubclassMarker.XLine:
                    this.readMapped <XLine>(template.CadObject, template);
                    break;

                default:
                    this._notification?.Invoke(null, new NotificationEventArgs($"Unhandeled dxf entity subclass {this._reader.LastValueAsString}"));
                    while (this._reader.LastDxfCode != DxfCode.Start)
                    {
                        this._reader.ReadNext();
                    }
                    break;
                }
            }

            return(template);
        }