Changeset 819


Ignore:
Timestamp:
02/03/14 17:02:11 (10 years ago)
Author:
jts21
Message:

Fix bug in linehead polygon drawing, and extract polygon drawing to separate function

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/io/PDF2Writer.java

    r818 r819  
    11package org.expeditee.io;
    22
     3import java.awt.Color;
    34import java.awt.Dimension;
    45import java.awt.Image;
     
    3839
    3940        private PdfWriter _pdfWriter;
     41        private float _height;
    4042
    4143        public PDF2Writer() {
     
    5557                        _pdfDocument.addAuthor(UserSettings.UserName.get());
    5658                        _pdfDocument.addCreator("Expeditee");
     59                        _height = _pdfWriter.getPageSize().getHeight();
    5760                } catch (DocumentException e) {
    5861                        e.printStackTrace();
     
    132135        }
    133136       
     137        private void fillPolygon(PdfContentByte cb, Polygon poly, Color fill, Color line, float lineThickness) {
     138                if(poly != null) {
     139                        cb.moveTo(poly.xpoints[0], _height - poly.ypoints[0]);
     140                        for(int i = 1; i < poly.npoints; i++) {
     141                                cb.lineTo(poly.xpoints[i], _height - poly.ypoints[i]);
     142                        }
     143                        cb.closePath();
     144                        cb.setColorFill(fill);
     145                        if(lineThickness > 0) {
     146                                cb.setLineWidth(lineThickness);
     147                                cb.setColorStroke(line);
     148                                cb.fillStroke();
     149                        } else {
     150                                cb.fill();
     151                        }
     152                }
     153        }
     154       
    134155        private List<Line> seenLines = new LinkedList<Line>();
    135156        @Override
     
    139160                }
    140161                PdfContentByte cb = _pdfWriter.getDirectContent();
    141                 float height = _pdfWriter.getPageSize().getHeight();
    142162                if(line.getStartItem().isEnclosed()) {
    143163                        seenLines.add(line);
    144164                        Line currentLine = line;
    145165                        Item currentItem = line.getStartItem();
    146                         cb.moveTo(currentItem.getX(), height - currentItem.getY());
     166                        cb.moveTo(currentItem.getX(), _height - currentItem.getY());
    147167                        for(;;) {
    148168                                currentItem = currentLine.getOppositeEnd(currentItem);
    149                                 cb.lineTo(currentItem.getX(), height - currentItem.getY());
     169                                cb.lineTo(currentItem.getX(), _height - currentItem.getY());
    150170                                for(Line l : currentItem.getLines()) {
    151171                                        if(l.equals(currentLine)) {
     
    175195                                        Item start = ((Line) l).getStartItem();
    176196                                        Item end = ((Line) l).getEndItem();
    177                                         cb.moveTo(start.getX(), height - start.getY());
    178                                         cb.lineTo(end.getX(), height - end.getY());
     197                                        cb.moveTo(start.getX(), _height - start.getY());
     198                                        cb.lineTo(end.getX(), _height - end.getY());
    179199                                        cb.closePath();
    180200                                        if(l.getThickness() >= 0) {
     
    183203                                                cb.stroke();
    184204                                        }
    185                                         Polygon arrow = ((Line) l).getStartArrow();
    186                                         if(arrow != null) {
    187                                                 cb.moveTo(arrow.xpoints[0], height - arrow.ypoints[0]);
    188                                                 for(int i = 1; i < arrow.npoints; i++) {
    189                                                         cb.lineTo(arrow.xpoints[i], height - arrow.ypoints[i]);
    190                                                 }
    191                                                 cb.closePath();
    192                                                 cb.setColorFill(l.getColor());
    193                                                 if(l.getThickness() > 0) {
    194                                                 cb.setLineWidth(l.getThickness());
    195                                                 cb.setColorStroke(l.getColor());
    196                                                 cb.stroke();
    197                                         } else {
    198                                                 cb.fill();
    199                                         }
    200                                         }
    201                                         arrow = ((Line) l).getEndArrow();
    202                                         if(arrow != null) {
    203                                                 cb.moveTo(arrow.xpoints[0], height - arrow.ypoints[0]);
    204                                                 for(int i = 1; i < arrow.npoints; i++) {
    205                                                         cb.lineTo(arrow.xpoints[i], height - arrow.ypoints[i]);
    206                                                 }
    207                                                 cb.closePath();
    208                                                 cb.setColorFill(l.getColor());
    209                                                 if(l.getThickness() > 0) {
    210                                                 cb.setLineWidth(l.getThickness());
    211                                                 cb.setColorStroke(l.getColor());
    212                                                 cb.fillStroke();
    213                                         } else {
    214                                                 cb.fill();
    215                                         }
    216                                         }
     205                                        fillPolygon(cb, ((Line) l).getStartArrow(), l.getColor(), l.getColor(), l.getThickness());
     206                                        fillPolygon(cb, ((Line) l).getEndArrow(), l.getColor(), l.getColor(), l.getThickness());
    217207                                }
    218208                        }
Note: See TracChangeset for help on using the changeset viewer.