示例#1
0
        public void Visit(AcDbPolyline polyline)
        {
            Point2D from;

            from.X = polyline.Points[0].X;
            from.Y = polyline.Points[0].Y;
            for (int i = 1; i < polyline.Points.Length; i++)
            {
                Line newline = new Line();
                newline.StartPoint = from;
                Point2D to;
                to.X             = polyline.Points[i].X;
                to.Y             = polyline.Points[i].Y;
                newline.EndPoint = to;
                _entities.AddLast(newline);
                from = to;
            }
            if (polyline.Closed)
            {
                Line newline = new Line();
                newline.StartPoint = from;
                newline.EndPoint.X = polyline.Points[0].X;
                newline.EndPoint.Y = polyline.Points[0].Y;
                _entities.AddLast(newline);
            }
        }
示例#2
0
        public static LinkedList <AcDbEntity> Load(TextReader reader)
        {
            LinkedList <AcDbEntity> result = new LinkedList <AcDbEntity>();
            State      state  = State.Start;
            AcDbEntity entity = null;
            DxfReader  rdr    = new DxfReader(reader);

            while (!rdr.IsEof)
            {
                DxfNode node = rdr.Read();
                if (state == State.Start || node.TypeCode == 0)
                {
                    // завершаем текущее состояние
                    if (state != State.Start && node.TypeCode == 0)
                    {
                        state = State.Start;
                    }

                    if (node.TypeCode == 0)
                    {
                        switch ((string)node.Value)
                        {
                        case "LWPOLYLINE":
                            entity = new AcDbPolyline();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;

                        case "LINE":
                            entity = new AcDbLine();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;

                        case "CIRCLE":
                            entity = new AcDbCircle();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;

                        case "ARC":
                            entity = new AcDbArc();
                            result.AddLast(entity);
                            state = State.Entity;
                            break;
                        }
                    }
                }
                else if (state == State.Entity)
                {
                    entity.TakeNode(node);
                }
            }
            return(result);
        }