Revision 37419

View differences:

branches/v2_0_0_prep/extensions/org.gvsig.app.document.layout.app/org.gvsig.app.document.layout.app.mainplugin/src/main/java/org/gvsig/app/project/documents/layout/FLayoutDraw.java
54 54
import com.lowagie.text.pdf.PdfContentByte;
55 55
import com.lowagie.text.pdf.PdfWriter;
56 56

  
57
import org.slf4j.Logger;
58
import org.slf4j.LoggerFactory;
59

  
57 60
import org.gvsig.andami.PluginServices;
58 61
import org.gvsig.app.project.documents.layout.fframes.IFFrame;
59 62
import org.gvsig.app.project.documents.layout.gui.LayoutPanel;
......
68 71
 * @author Vicente Caballero Navarro
69 72
 */
70 73
public class FLayoutDraw implements Observable, Printable{
71

  
74
    private static final Logger LOG = 
75
        LoggerFactory.getLogger(FLayoutDraw.class);
76
    
72 77
    private LayoutPanel layoutPanel;
78
    private LayoutControl layoutControl;
79
    private LayoutContext layoutContext;
73 80
    private ObservableHelper observers;
74 81

  
75 82
    /**
......
84 91
        observers.addObserver(layoutPanel.getLayoutControl());
85 92
    }
86 93

  
94
    public void initialize(){
95
        if ((layoutContext == null) || (layoutControl == null)){
96
            this.layoutControl = layoutPanel.getLayoutControl();
97
            this.layoutContext = layoutPanel.getLayoutContext();
98
        }
99
    }
100

  
87 101
    /**
88 102
     * M?todo para dibujar el Layout y modificar la matriz de transformaci?n a
89 103
     * partir del tama?o en pixels que tenga rect y el formato de papel
......
97 111
     * @throws ReadDriverException
98 112
     */
99 113
    public void drawLayout(Graphics2D g2, BufferedImage imgBase)
100
        throws ReadException {
101
        LayoutControl layoutControl = layoutPanel.getLayoutControl();
102
        LayoutContext layoutContext = layoutPanel.getLayoutContext();
103
        Attributes attributes = layoutContext.getAttributes();
104
        Rectangle2D rLayout = layoutControl.getRect();
105
        AffineTransform at = layoutContext.getAT();
114
    throws ReadException {     
115
        initializeAffineTransform();
106 116

  
107
        layoutControl.setCancelDrawing(false);
108
        double scale = 0;
109
        scale = rLayout.getHeight() / attributes.m_sizePaper.getAlto() * 1;
110
        AffineTransform escalado = new AffineTransform();
111
        AffineTransform translacion = new AffineTransform();
112
        translacion.setToTranslation(rLayout.getMinX(), rLayout.getMinY());
113
        escalado.setToScale(scale, scale);
114
        at.setToIdentity();
115
        at.concatenate(translacion);
116
        at.concatenate(escalado);
117
        attributes.setDistanceUnitX(rLayout);
118
        attributes.setDistanceUnitY(rLayout);
119 117
        IFFrame[] fframes = layoutContext.getFFrames();
120 118
        for (int i = 0; i < fframes.length; i++) {
121 119
            IFFrame f = fframes[i];
122
            f.draw(g2, at, layoutControl.getComponent().getVisibleRect(),
120
            f.draw(g2, layoutContext.getAT(), layoutControl.getComponent().getVisibleRect(),
123 121
                imgBase);          
124 122

  
125 123
            // Dibuja el s?mbolo de que contiene un tag.
......
134 132
        } else {
135 133
            observers.notifyObservers(this, 
136 134
                new DefaultLayoutNotification(LayoutNotification.LAYOUT_INVALIDATED));           
137
        }
135
        }  
138 136
    }
139 137

  
138
    private void initializeAffineTransform(){
139
        initialize();
140
        AffineTransform at = layoutContext.getAT();
141
        Rectangle2D rLayout = layoutControl.getRect();
142
        Attributes attributes = layoutContext.getAttributes();
143

  
144
        layoutControl.setCancelDrawing(false);
145

  
146
        double scale = 0;
147
        scale = rLayout.getHeight() / attributes.m_sizePaper.getAlto() * 1;
148
        AffineTransform escalado = new AffineTransform();
149
        AffineTransform translacion = new AffineTransform();
150
        translacion.setToTranslation(rLayout.getMinX(), rLayout.getMinY());
151
        escalado.setToScale(scale, scale);
152
        at.setToIdentity();
153
        at.concatenate(translacion);
154
        at.concatenate(escalado);
155
        attributes.setDistanceUnitX(rLayout);
156
        attributes.setDistanceUnitY(rLayout);
157
    }
158

  
140 159
    /**
141 160
     * Dibuja sobre un Graphics2D el rect?ngulo que representa al folio.
142 161
     * 
......
144 163
     *            Graphics2D
145 164
     */
146 165
    public void drawRectangle(Graphics2D g) {
147
        Attributes attributes = layoutPanel.getLayoutContext().getAttributes();
148
        Rectangle2D rLayout = layoutPanel.getLayoutControl().getRect();
149
        AffineTransform at = layoutPanel.getLayoutContext().getAT();
166
        initialize();
167
        Attributes attributes = layoutContext.getAttributes();
168
        Rectangle2D rLayout = layoutControl.getRect();
169
        AffineTransform at = layoutContext.getAT();
150 170

  
151 171
        double unidadesX = attributes.getNumUnitsX();
152 172
        double unidadesY = attributes.getNumUnitsY();
......
172 192
                new Rectangle2D.Double(
173 193
                    (rLayout.getX() + FLayoutUtilities.fromSheetDistance(
174 194
                        attributes.m_area[2], at)),
175
                    (rLayout.getY() + FLayoutUtilities.fromSheetDistance(
176
                        attributes.m_area[0], at)),
177
                    (rLayout.getWidth() - FLayoutUtilities.fromSheetDistance(
178
                        attributes.m_area[2] + attributes.m_area[3], at)),
179
                    (rLayout.getHeight() - FLayoutUtilities.fromSheetDistance(
180
                        attributes.m_area[0] + attributes.m_area[1], at)));
195
                        (rLayout.getY() + FLayoutUtilities.fromSheetDistance(
196
                            attributes.m_area[0], at)),
197
                            (rLayout.getWidth() - FLayoutUtilities.fromSheetDistance(
198
                                attributes.m_area[2] + attributes.m_area[3], at)),
199
                                (rLayout.getHeight() - FLayoutUtilities.fromSheetDistance(
200
                                    attributes.m_area[0] + attributes.m_area[1], at)));
181 201
        } else {
182 202
            r.setRect(rLayout);
183 203
        }
......
203 223
     *            DOCUMENT ME!
204 224
     */
205 225
    public void drawGrid(Graphics2D g) {
206
        int unidadesMin = 6;
207
        LayoutContext layoutContext = layoutPanel.getLayoutContext();
226
        int unidadesMin = 6;       
208 227
        Attributes attributes = layoutContext.getAttributes();
209
        Rectangle2D rLayout = layoutPanel.getLayoutControl().getRect();
228
        Rectangle2D rLayout = layoutControl.getRect();
210 229
        AffineTransform at = layoutContext.getAT();
211 230

  
212 231
        double unidadesX = attributes.getUnitInPixelsX();
......
219 238
                new Rectangle2D.Double(
220 239
                    (rLayout.getX() + FLayoutUtilities.fromSheetDistance(
221 240
                        attributes.m_area[2], at)),
222
                    (rLayout.getY() + FLayoutUtilities.fromSheetDistance(
223
                        attributes.m_area[0], at)),
224
                    (rLayout.getWidth() - FLayoutUtilities.fromSheetDistance(
225
                        attributes.m_area[2] + attributes.m_area[3], at)),
226
                    (rLayout.getHeight() - FLayoutUtilities.fromSheetDistance(
227
                        attributes.m_area[0] + attributes.m_area[1], at)));
241
                        (rLayout.getY() + FLayoutUtilities.fromSheetDistance(
242
                            attributes.m_area[0], at)),
243
                            (rLayout.getWidth() - FLayoutUtilities.fromSheetDistance(
244
                                attributes.m_area[2] + attributes.m_area[3], at)),
245
                                (rLayout.getHeight() - FLayoutUtilities.fromSheetDistance(
246
                                    attributes.m_area[0] + attributes.m_area[1], at)));
228 247
        } else {
229 248
            r.setRect(rLayout);
230 249
        }
......
259 278
     * @param color
260 279
     *            Color de la regla.
261 280
     */
262
    public void drawRuler(Graphics2D g, Color color) {
263
        LayoutControl layoutControl = layoutPanel.getLayoutControl();
264
        LayoutContext layoutContext = layoutPanel.getLayoutContext();
281
    public void drawRuler(Graphics2D g, Color color) {     
265 282
        Attributes attributes = layoutContext.getAttributes();
266 283
        Rectangle2D rLayout = layoutControl.getRect();
267 284
        AffineTransform at = layoutContext.getAT();
......
290 307
                    .fromSheetDistance(attributes.m_area[2], at), wi);
291 308
                g.fillRect(
292 309
                    (int) rLayout.getMaxX()
293
                        - (int) FLayoutUtilities.fromSheetDistance(
294
                            attributes.m_area[3], at), ini,
295
                    (int) FLayoutUtilities.fromSheetDistance(
296
                        attributes.m_area[3], at), wi);
310
                    - (int) FLayoutUtilities.fromSheetDistance(
311
                        attributes.m_area[3], at), ini,
312
                        (int) FLayoutUtilities.fromSheetDistance(
313
                            attributes.m_area[3], at), wi);
297 314

  
298 315
                g.fillRect(ini, (int) rLayout.getY(), wi,
299 316
                    (int) FLayoutUtilities.fromSheetDistance(
......
301 318
                g.fillRect(
302 319
                    ini,
303 320
                    (int) rLayout.getMaxY()
304
                        - (int) FLayoutUtilities.fromSheetDistance(
305
                            attributes.m_area[1], at), wi,
306
                    (int) FLayoutUtilities.fromSheetDistance(
307
                        attributes.m_area[1], at));
321
                    - (int) FLayoutUtilities.fromSheetDistance(
322
                        attributes.m_area[1], at), wi,
323
                        (int) FLayoutUtilities.fromSheetDistance(
324
                            attributes.m_area[1], at));
308 325
            }
309 326

  
310 327
            g.setColor(color);
......
349 366
     */
350 367
    private void drawLineY(Graphics2D g, double dist, int init, int end,
351 368
        double y, double desp) {
352
        AffineTransform at = layoutPanel.getLayoutContext().getAT();
353
        LayoutControl layoutControl = layoutPanel.getLayoutControl();
369
        initialize();
370
        AffineTransform at = layoutContext.getAT();
354 371

  
355 372
        double distY = FLayoutUtilities.fromSheetDistance(dist, at);
356 373
        double rota = Math.toRadians(90);
......
427 444
     */
428 445
    private void drawLineX(Graphics2D g, double dist, int init, int end,
429 446
        double x, double desp) {
430
        AffineTransform at = layoutPanel.getLayoutContext().getAT();
431
        LayoutControl layoutControl = layoutPanel.getLayoutControl();
447
        initialize();
448
        AffineTransform at = layoutContext.getAT();
432 449

  
433 450
        double distX = FLayoutUtilities.fromSheetDistance(dist, at);
434 451

  
......
489 506
     *            Color de los Handlers.
490 507
     */
491 508
    public void drawHandlers(Graphics2D g, Color color) {
492
        LayoutContext layoutContext = layoutPanel.getLayoutContext();
509
        initialize();
493 510

  
494 511
        g.setColor(color);
495 512
        IFFrame[] fframes = layoutContext.getFFrames();
......
509 526
     * @param ps
510 527
     */
511 528
    public void toPS(File ps) {
512
        Attributes attributes = layoutPanel.getLayoutContext().getAttributes();
513
        LayoutControl layoutControl = layoutPanel.getLayoutControl();
529
        initialize();
530
        Attributes attributes = layoutContext.getAttributes();
514 531

  
515 532
        try {
516 533
            // Prepare the output file to receive the postscript
......
529 546

  
530 547
                // Create the print job
531 548
                DocPrintJob job = service.createPrintJob();
532
               
549

  
533 550
                Doc doc = new SimpleDoc(this, flavor, null);
534 551
                // Doc doc = new SimpleDoc(is, flavor, null);
535 552
                // Monitor print job events; for the implementation of
......
550 567
            // is.close();
551 568
            fos.close();
552 569
        } catch (PrintException e) {
570
            LOG.error("Error printing the map", e);
553 571
        } catch (IOException e) {
572
            LOG.error("Error printing the map", e);
554 573
        }
555 574
        /*
556 575
         * PrintService defaultPrintService =
......
586 605
     * @param pdf
587 606
     */
588 607
    public void toPDF(File pdf) {
589
        Attributes attributes = layoutPanel.getLayoutContext().getAttributes();
590
        LayoutControl layoutControl = layoutPanel.getLayoutControl();
608
        Attributes attributes = layoutContext.getAttributes();
591 609

  
592 610
        double w = 0;
593 611
        double h = 0;
594 612
        Document document = new Document();
595 613

  
596 614
        if (attributes.isLandSpace()) {
597
            w =
598
                ((attributes.m_sizePaper.getAlto() * Attributes.DPISCREEN) / Attributes.PULGADA);
599
            h =
600
                ((attributes.m_sizePaper.getAncho() * Attributes.DPISCREEN) / Attributes.PULGADA);
615
            w = ((attributes.m_sizePaper.getAlto() * Attributes.DPISCREEN) / Attributes.PULGADA);
616
            h = ((attributes.m_sizePaper.getAncho() * Attributes.DPISCREEN) / Attributes.PULGADA);
601 617
        } else {
602
            w =
603
                ((attributes.m_sizePaper.getAncho() * Attributes.DPISCREEN) / Attributes.PULGADA);
604
            h =
605
                ((attributes.m_sizePaper.getAlto() * Attributes.DPISCREEN) / Attributes.PULGADA);
618
            w = ((attributes.m_sizePaper.getAncho() * Attributes.DPISCREEN) / Attributes.PULGADA);
619
            h = ((attributes.m_sizePaper.getAlto() * Attributes.DPISCREEN) / Attributes.PULGADA);
606 620
        }
607 621

  
608 622
        document.setPageSize(new com.lowagie.text.Rectangle((float) w,
......
612 626
            FileOutputStream fos = new FileOutputStream(pdf);
613 627
            PdfWriter writer = PdfWriter.getInstance(document, fos);
614 628
            document.open();
615
          
629

  
616 630
            PdfContentByte cb = writer.getDirectContent();
617 631
            Graphics2D g2 = cb.createGraphicsShapes((float) w, (float) h);
618 632

  
619 633
            try {
620 634
                if (attributes.isLandSpace()) {
621
                    g2.rotate(Math.toRadians(-90), 0 + (w / (h / w)),
622
                        0 + (h / 2));
635
                    g2.rotate(Math.toRadians(-90), 0 + (w / (h / w)), 0 + (h / 2));
623 636
                    print(g2, new PageFormat(), 0);
624
                    g2.rotate(Math.toRadians(90), 0 + (w / (h / w)),
625
                        0 + (h / 2));
637
                    g2.rotate(Math.toRadians(90), 0 + (w / (h / w)), 0 + (h / 2));
626 638
                } else {
627 639
                    print(g2, new PageFormat(), 0);
628 640
                }
629 641
            } catch (PrinterException e) {
630
                e.printStackTrace();
642
                LOG.error("Error printing the map", e);
631 643
            }
632 644

  
633 645
            g2.dispose();
634 646

  
635 647
        } catch (DocumentException de) {
636
            System.err.println(de.getMessage());
648
            LOG.error("Error printing the map", de);
637 649
        } catch (IOException ioe) {
638 650
            JOptionPane.showMessageDialog(
639 651
                (Component) PluginServices.getMainFrame(), ioe.getMessage());
......
643 655

  
644 656
        layoutControl.fullRect();
645 657
    }
646
    
658

  
647 659
    public int print(Graphics g, PageFormat format, int pi)
648
        throws PrinterException {
660
    throws PrinterException {
661
        initialize();
649 662
        if (pi >= 1) {
650 663
            return Printable.NO_SUCH_PAGE;
651 664
        }
......
658 671

  
659 672
        g2d.scale((double) 72 / (double) (Attributes.DPI), (double) 72
660 673
            / (double) (Attributes.DPI));
661
        System.err.println("Clip 2 =" + g2d.getClip());
662 674

  
663
        if (layoutPanel.getLayoutContext().getAttributes().isMargin()) {
675
        if (layoutContext.getAttributes().isMargin()) {
664 676
            g2d.setClip(
665
                (int) (layoutPanel.getLayoutControl().getRect().getMinX() + FLayoutUtilities
666
                    .fromSheetDistance(
667
                        layoutPanel.getLayoutContext().getAttributes().m_area[2], layoutPanel
668
                        .getLayoutControl().getAT())),
669
                        (int) (layoutPanel.getLayoutControl().getRect().getMinY() + FLayoutUtilities
670
                            .fromSheetDistance(
671
                                layoutPanel.getLayoutContext().getAttributes().m_area[0], layoutPanel
672
                                .getLayoutControl().getAT())),
673
                                (int) (layoutPanel.getLayoutControl().getRect().getWidth() - FLayoutUtilities
674
                                    .fromSheetDistance(
675
                                        layoutPanel.getLayoutContext().getAttributes().m_area[2]
676
                                                                                    + layoutPanel.getLayoutContext().getAttributes().m_area[3], layoutPanel
677
                                                                                    .getLayoutControl().getAT())),
678
                                                                                    (int) (layoutPanel.getLayoutControl().getRect().getHeight() - FLayoutUtilities
679
                                                                                        .fromSheetDistance(
680
                                                                                            layoutPanel.getLayoutContext().getAttributes().m_area[0]
681
                                                                                                                                        + layoutPanel.getLayoutContext().getAttributes().m_area[1], layoutPanel
682
                                                                                                                                        .getLayoutControl().getAT())));
677
                (int) (layoutControl.getRect().getMinX() + FLayoutUtilities.fromSheetDistance(
678
                    layoutContext.getAttributes().m_area[2], layoutControl.getAT())),
679
                    (int) (layoutPanel.getLayoutControl().getRect().getMinY() + FLayoutUtilities.fromSheetDistance(
680
                        layoutContext.getAttributes().m_area[0], layoutControl.getAT())),
681
                        (int) (layoutControl.getRect().getWidth() - FLayoutUtilities.fromSheetDistance(
682
                            layoutContext.getAttributes().m_area[2] + layoutContext.getAttributes().m_area[3], layoutControl.getAT())),
683
                            (int) (layoutPanel.getLayoutControl().getRect().getHeight() - FLayoutUtilities.fromSheetDistance(
684
                                layoutContext.getAttributes().m_area[0] + layoutContext.getAttributes().m_area[1], layoutControl.getAT())));
683 685
        }
684 686

  
685 687

  
......
688 690

  
689 691
        return Printable.PAGE_EXISTS;
690 692
    }
691
    
693

  
692 694
    /**
693 695
     * Se dibuja sobre el graphics el Layout.
694 696
     * 
......
696 698
     *            graphics sobre el que se dibuja.
697 699
     */
698 700
    public void drawShapes(Graphics2D g2) {
699
        LayoutControl layoutControl = layoutPanel.getLayoutControl();
700
        LayoutContext layoutContext = layoutPanel.getLayoutContext();
701
        
702
        layoutControl.setCancelDrawing(false);
703

  
701
        initialize();
704 702
        layoutPanel.setCursor(Cursor.getDefaultCursor());
703
        initializeAffineTransform();
705 704

  
706
        AffineTransform at = layoutContext.getAT();        
707
        double scale = 0;
708
        scale =
709
            layoutControl.getRect().height
710
                / layoutContext.getAttributes().m_sizePaper.getAlto() * 1;
711
        AffineTransform escalado = new AffineTransform();
712
        AffineTransform translacion = new AffineTransform();
713
        translacion.setToTranslation(layoutControl.getRect().getMinX(),
714
            layoutControl.getRect().getMinY());
715
        escalado.setToScale(scale, scale);
716
        at.setToIdentity();
717
        at.concatenate(translacion);
718
        at.concatenate(escalado);
719
        layoutContext.getAttributes().setDistanceUnitX(layoutControl.getRect());
720
        layoutContext.getAttributes().setDistanceUnitY(layoutControl.getRect());
721 705
        IFFrame[] fframes = layoutContext.getFFrames();
722 706
        for (int i = 0; i < fframes.length; i++) {
723
            fframes[i].print(g2, at, null, layoutContext
707
            fframes[i].print(g2, layoutControl.getAT(), null, layoutContext
724 708
                .getAttributes().toPrintAttributes());
725 709
        }
726 710
    }
......
730 714
    }
731 715

  
732 716
    public void deleteObserver(Observer o) {
733
      observers.deleteObserver(o);        
717
        observers.deleteObserver(o);        
734 718
    }
735 719

  
736 720
    public void deleteObservers() {
737
       observers.deleteObservers();        
721
        observers.deleteObservers();        
738 722
    }
739 723
}

Also available in: Unified diff