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); } }
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); }