Changeset 789
- Timestamp:
- 01/30/14 11:11:40 (10 years ago)
- Location:
- trunk/src/org/expeditee
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/io/PDF2Writer.java
r655 r789 3 3 import java.awt.Dimension; 4 4 import java.awt.Image; 5 import java.awt.Polygon; 5 6 import java.io.FileOutputStream; 6 7 import java.io.IOException; 7 8 import java.io.Writer; 8 9 import java.util.Collection; 10 import java.util.LinkedList; 9 11 import java.util.List; 10 12 … … 12 14 import org.expeditee.gui.FrameGraphics; 13 15 import org.expeditee.items.Item; 16 import org.expeditee.items.Line; 14 17 import org.expeditee.items.Picture; 15 18 import org.expeditee.items.Text; … … 100 103 try { 101 104 PdfContentByte cb = _pdfWriter.getDirectContent(); 102 com.lowagie.text.Image iTextImage = com.lowagie.text.Image 103 .getInstance(image, null); 105 com.lowagie.text.Image iTextImage = com.lowagie.text.Image.getInstance(image, null); 104 106 iTextImage.setAbsolutePosition(pic.getX(), _pdfWriter.getPageSize().getHeight() - pic.getY() - pic.getHeight()); 107 iTextImage.setRotationDegrees((float) - pic.getRotate()); 105 108 cb.addImage(iTextImage); 106 109 } catch (DocumentException e) { 107 110 e.printStackTrace(); 111 } 112 } 113 114 private List<Line> seenLines = new LinkedList<Line>(); 115 private List<Item> seenArrowHeads = new LinkedList<Item>(); 116 @Override 117 protected void writeLine(Line line) throws IOException { 118 if(seenLines.contains(line)) { 119 return; 120 } 121 PdfContentByte cb = _pdfWriter.getDirectContent(); 122 float height = _pdfWriter.getPageSize().getHeight(); 123 if(line.getStartItem().isEnclosed()) { 124 seenLines.add(line); 125 Line currentLine = line; 126 Item currentItem = line.getStartItem(); 127 cb.moveTo(currentItem.getX(), height - currentItem.getY()); 128 for(;;) { 129 currentItem = currentLine.getOppositeEnd(currentItem); 130 cb.lineTo(currentItem.getX(), height - currentItem.getY()); 131 for(Line l : currentItem.getLines()) { 132 if(l.equals(currentLine)) { 133 continue; 134 } 135 currentLine = l; 136 break; 137 } 138 if(currentLine == null || currentLine.equals(line)) { 139 break; 140 } 141 seenLines.add(currentLine); 142 } 143 cb.setColorFill(currentItem.getFillColor()); 144 cb.setColorStroke(currentLine.getColor()); 145 cb.closePathFillStroke(); 146 } else { 147 for(Item l : line.getStartItem().getAllConnected()) { 148 if(l instanceof Line && !seenLines.contains(l)) { 149 seenLines.add((Line) l); 150 Item start = ((Line) l).getStartItem(); 151 Item end = ((Line) l).getEndItem(); 152 cb.moveTo(start.getX(), height - start.getY()); 153 cb.lineTo(end.getX(), height - end.getY()); 154 cb.setColorStroke(l.getColor()); 155 cb.closePathStroke(); 156 Polygon arrow = ((Line) l).getStartArrow(); 157 if(arrow != null) { 158 cb.moveTo(arrow.xpoints[0], height - arrow.ypoints[0]); 159 for(int i = 1; i < arrow.npoints; i++) { 160 cb.lineTo(arrow.xpoints[i], height - arrow.ypoints[i]); 161 } 162 cb.setColorFill(l.getColor()); 163 cb.closePath(); 164 cb.fill(); 165 } 166 arrow = ((Line) l).getEndArrow(); 167 if(arrow != null) { 168 cb.moveTo(arrow.xpoints[0], height - arrow.ypoints[0]); 169 for(int i = 1; i < arrow.npoints; i++) { 170 cb.lineTo(arrow.xpoints[i], height - arrow.ypoints[i]); 171 } 172 cb.setColorFill(l.getColor()); 173 cb.closePath(); 174 cb.fill(); 175 } 176 } 177 } 108 178 } 109 179 } -
trunk/src/org/expeditee/items/Line.java
r737 r789 11 11 import java.awt.Stroke; 12 12 import java.awt.geom.AffineTransform; 13 import java.awt.geom.Point2D; 13 14 import java.util.ArrayList; 14 15 import java.util.Collection; … … 405 406 g.setStroke(new BasicStroke(getPaintThickness(), CAP, 406 407 BasicStroke.JOIN_MITER)); 407 paintArrow(g, _start, _startOffset, _endOffset);408 paintArrow(g, _end, _endOffset, _startOffset);408 paintArrow(g, getStartArrow()); 409 paintArrow(g, getEndArrow()); 409 410 410 411 if (_virtualSpot != null) { … … 429 430 430 431 } 431 432 /** 433 * Based on code from DeSL (Arrow2D) http://sourceforge.net/projects/desl/ 434 */ 435 private void paintArrow(Graphics2D g, Item withArrow, Point startOffset, 436 Point endOffset) { 432 433 /** 434 * Gets the arrow head 435 * @param withArrow 436 * @param startOffset 437 * @param endOffset 438 * @return 439 */ 440 private Shape getArrow(Item withArrow, Point startOffset, Point endOffset) { 437 441 boolean disconnectMode = withArrow._mode == Item.HighlightMode.Disconnect; 438 442 // only draw an arrowhead if necessary 439 443 if (!(this._mode == Item.HighlightMode.Disconnect && disconnectMode) 440 444 && (!withArrow.hasVisibleArrow() || withArrow.getLines().size() > 1)) 441 return ;445 return null; 442 446 443 447 int x0, x1, y0, y1; … … 462 466 // floating 463 467 if (arrowLength != AUTO_ARROWHEAD_LENGTH && (arrowRatio < 0 || arrowNibPerc < 0)) { 464 return ;468 return null; 465 469 } 466 470 … … 473 477 // wont show the arrow 474 478 if (length <= MINIMUM_ARROW_HEAD_LENGTH) 475 return ;479 return null; 476 480 if (arrowLength == AUTO_ARROWHEAD_LENGTH) { 477 481 arrowLength = getAutoArrowheadLength(length); … … 498 502 AffineTransform tx = AffineTransform.getRotateInstance(rad, x0, y0); 499 503 504 int[] rx = new int[arrowhead.npoints]; 505 int[] ry = new int[arrowhead.npoints]; 506 507 for(int i = 0; i < arrowhead.npoints; i++){ 508 Point2D p = new Point2D.Double(arrowhead.xpoints[i], arrowhead.ypoints[i]); 509 tx.transform(p,p); 510 rx[i] = (int) p.getX(); 511 ry[i] = (int) p.getY(); 512 } 513 514 return new Polygon(rx, ry, arrowhead.npoints); 515 } 516 517 public Polygon getStartArrow() { 518 return (Polygon) getArrow(_start, _startOffset, _endOffset); 519 } 520 521 public Polygon getEndArrow() { 522 return (Polygon) getArrow(_end, _endOffset, _startOffset); 523 } 524 525 /** 526 * Based on code from DeSL (Arrow2D) http://sourceforge.net/projects/desl/ 527 */ 528 private void paintArrow(Graphics2D g, Shape arrow) { 529 530 if(arrow == null) { 531 return; 532 } 500 533 501 534 // TODO … … 508 541 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 509 542 510 g.draw( tx.createTransformedShape((Shape) arrowhead));511 g.fill( tx.createTransformedShape((Shape) arrowhead));543 g.draw(arrow); 544 g.fill(arrow); 512 545 513 546 }
Note:
See TracChangeset
for help on using the changeset viewer.