Changeset 24191 in osm


Ignore:
Timestamp:
2010-11-11T13:54:26+01:00 (14 years ago)
Author:
extropy
Message:

pdfimport: fixed excess clipping path painting.

Location:
applications/editors/josm/plugins/pdfimport/src/pdfimport
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pdfimport/src/pdfimport/FilePlacement.java

    r24189 r24191  
    142142                        }
    143143                } else {
    144                         return tr("Transform error: Unsupported variant.");
     144                        //all fine
    145145                }
    146146
     
    154154                                        (this.maxNorth - this.minNorth) /  (this.maxY - this.minY));
    155155                        this.transform.translate(-this.minX, -this.minY);
    156                 } else if (this.minEast < this.maxEast && this.minNorth > this.maxNorth) {
     156                } else if (this.minEast > this.maxEast && this.minNorth < this.maxNorth) {
    157157                        //need to rotate 90 degrees counterclockwise
    158158                        this.transform = new AffineTransform();
    159159                        //transform to 0..1, 0..1 range
    160160                        this.transform.preConcatenate(AffineTransform.getTranslateInstance(-this.minX, -this.minY));
    161                         this.transform.preConcatenate(AffineTransform.getScaleInstance(1/(this.maxX - this.minX), 1/(this.minY - this.maxY)));
    162 
    163                         //rotate -90 degs around center
    164                         this.transform.preConcatenate(AffineTransform.getQuadrantRotateInstance(-1,  0.5, 0.5));
     161                        this.transform.preConcatenate(AffineTransform.getScaleInstance(1/(this.maxX - this.minX), 1/(this.maxY - this.minY)));
     162
     163                        //rotate -90 degs around min
     164                        this.transform.preConcatenate(AffineTransform.getQuadrantRotateInstance(1,  0, 0));
    165165
    166166                        //transform back to target range
    167167                        this.transform.preConcatenate(AffineTransform.getScaleInstance(
    168                                         (this.maxEast - this.minEast),
    169                                         (this.minNorth - this.maxNorth)));
    170                         this.transform.preConcatenate(AffineTransform.getTranslateInstance(this.minEast, this.maxNorth));
    171                 } else if (this.minEast > this.maxEast && this.minNorth < this.maxNorth) {
     168                                        (this.minEast - this.maxEast),
     169                                        (this.maxNorth - this.minNorth)));
     170                        this.transform.preConcatenate(AffineTransform.getTranslateInstance(this.minEast, this.minNorth));
     171                } else if (this.minEast < this.maxEast && this.minNorth > this.maxNorth) {
    172172                        //need to rotate 90 degrees clockwise
    173173                        this.transform = new AffineTransform();
     
    176176                        this.transform.preConcatenate(AffineTransform.getScaleInstance(1/(this.maxX - this.minX), 1/(this.maxY - this.minY)));
    177177
    178                         //rotate 90 degs around center
    179                         this.transform.preConcatenate(AffineTransform.getQuadrantRotateInstance(1, 0.5, 0.5));
     178                        //rotate 90 degs around min
     179                        this.transform.preConcatenate(AffineTransform.getQuadrantRotateInstance(-1, 0, 0));
    180180
    181181                        //transform back to target range
    182182                        this.transform.preConcatenate(AffineTransform.getScaleInstance(
    183                                         (this.minEast - this.maxEast),
    184                                         (this.maxNorth - this.minNorth)));
    185                         this.transform.preConcatenate(AffineTransform.getTranslateInstance(this.maxEast, this.minNorth));
     183                                        (this.maxEast - this.minEast),
     184                                        (this.minNorth - this.maxNorth)));
     185                        this.transform.preConcatenate(AffineTransform.getTranslateInstance(this.minEast, this.minNorth));
    186186                }
    187187                else
  • applications/editors/josm/plugins/pdfimport/src/pdfimport/LoadPdfDialog.java

    r24189 r24191  
    132132
    133133        private LoadProgressRenderer progressRenderer;
     134        private JCheckBox limitPathCountCheck;
     135        private JTextField limitPathCount;
    134136
    135137
     
    243245                this.removeParallelSegmentsTolerance = new JTextField("3");
    244246
     247                this.limitPathCountCheck = new JCheckBox(tr("Take only first X paths"));
     248                this.limitPathCount = new JTextField("10000");
    245249
    246250                JPanel configPanel = new JPanel(new GridBagLayout());
     
    274278                configPanel.add(this.removeParallelSegmentsTolerance, c);
    275279
    276                 c.gridx = 0; c.gridy = 4; c.gridwidth = 1;
     280
     281                c.gridx = 0; c.gridy = 4; c.gridwidth = 2;
     282                configPanel.add(this.limitPathCountCheck, c);
     283                c.gridx = 2; c.gridy = 4; c.gridwidth = 1;
     284                configPanel.add(this.limitPathCount, c);
     285
     286                c.gridx = 0; c.gridy = 5; c.gridwidth = 1;
    277287                configPanel.add(this.colorFilterCheck, c);
    278                 c.gridx = 2; c.gridy = 4; c.gridwidth = 1;
     288                c.gridx = 2; c.gridy = 5; c.gridwidth = 1;
    279289                configPanel.add(this.colorFilterColor, c);
    280290
    281                 c.gridx = 0; c.gridy = 5; c.gridwidth = 2;
     291                c.gridx = 0; c.gridy = 6; c.gridwidth = 2;
    282292                configPanel.add(this.debugModeCheck, c);
    283293
     
    615625                double nodesTolerance = 0.0;
    616626                Color color = null;
     627                int maxPaths = Integer.MAX_VALUE;
    617628
    618629                if (this.mergeCloseNodesCheck.isSelected()) {
     
    643654                }
    644655
     656                if (this.limitPathCountCheck.isSelected()) {
     657                        try {
     658                                maxPaths = Integer.parseInt(this.limitPathCount.getText());
     659                        }
     660                        catch (Exception e) {
     661                                JOptionPane
     662                                .showMessageDialog(
     663                                                Main.parent,
     664                                                tr("Could not parse max path count"));
     665                                return null;
     666                        }
     667                }
     668
    645669
    646670                monitor.setTicks(10);
     
    651675                try {
    652676                        PdfBoxParser parser = new PdfBoxParser(data);
    653                         parser.parse(fileName, monitor.createSubTaskMonitor(80, false));
     677                        parser.parse(fileName, maxPaths, monitor.createSubTaskMonitor(80, false));
    654678
    655679                } catch (FileNotFoundException e1) {
  • applications/editors/josm/plugins/pdfimport/src/pdfimport/pdfbox/GraphicsProcessor.java

    r24189 r24191  
    2222
    2323        public PathOptimizer target;
    24         private Shape clipShape;
     24        private Shape  clipShape;
    2525        private List<PdfPath> clipPath;
    2626        private final LayerInfo info = new LayerInfo();
     
    3131        private final AffineTransform transform;
    3232        private final ProgressMonitor monitor;
    33 
    34         public GraphicsProcessor(PathOptimizer target, int rotation, ProgressMonitor monitor)
     33        private final int maxPaths;
     34
     35
     36        public GraphicsProcessor(PathOptimizer target, int rotation, int maxPaths, ProgressMonitor monitor)
    3537        {
     38                this.maxPaths = maxPaths;
    3639                this.target = target;
    3740                this.transform = new AffineTransform();
     
    4447
    4548        private void addPath(Shape s, boolean closed) {
     49                pathNo ++;
     50                this.monitor.setCustomText(tr(" {0} objects so far", pathNo));
     51
     52                if (pathNo >= maxPaths) {
     53                        return;
     54                }
     55
    4656                List<PdfPath> paths = this.parsePath(s, closed);
    4757
     
    5060                }
    5161
    52                 pathNo ++;
    5362
    5463                if (paths.size() > 1) {
     
    6069                }
    6170
    62                 this.monitor.setCustomText(tr(" {0} objects so far", pathNo));
    6371        }
    6472
     
    179187
    180188
    181         public void setClip(Shape clip) {
    182                 if (this.clipShape == clip)
     189        public void setClip(Shape  clip) {
     190                if (this.shapesEqual(this.clipShape,clip))
    183191                        return;
    184192
     
    203211
    204212
     213        private boolean shapesEqual(Shape shape1, Shape shape2) {
     214
     215                if (shape1== null || shape2 == null){
     216                        return false;
     217                }
     218
     219                return shape1.getBounds2D().equals(shape2.getBounds2D());
     220        }
     221
     222
    205223        public void setStroke(Stroke s) {
    206224                BasicStroke stroke = (BasicStroke) s;
  • applications/editors/josm/plugins/pdfimport/src/pdfimport/pdfbox/PdfBoxParser.java

    r24189 r24191  
    2323
    2424        @SuppressWarnings("unchecked")
    25         public void parse(File file, ProgressMonitor monitor) throws Exception
     25        public void parse(File file, int maxPaths, ProgressMonitor monitor) throws Exception
    2626        {
    2727                monitor.beginTask(tr("Parsing PDF", 1));
     
    4747                }
    4848
    49                 GraphicsProcessor p = new GraphicsProcessor(target, rotation, monitor);
     49                GraphicsProcessor p = new GraphicsProcessor(target, rotation, maxPaths, monitor);
    5050                PageDrawer drawer = new PageDrawer();
    5151                drawer.drawPage(p, page);
Note: See TracChangeset for help on using the changeset viewer.