Ignore:
Timestamp:
2009-02-18T23:31:32+01:00 (16 years ago)
Author:
pieren
Message:

Fix minor bugs, add the fixed size grab scale configurable, fix pbls in transparency.

Location:
applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastreGrabber.java

    r13497 r13784  
    6969                str += lambertMax.east() + ",";
    7070                str += lambertMax.north();
    71                 str += "&width=800&height=600"; // maximum allowed by wms server
     71                //str += "&width=800&height=600"; // maximum allowed by wms server
     72        str += "&width=1000&height=800"; // maximum allowed by wms server
    7273                str += "&styles=LS3_90,LS2_90,LS1_90,PARCELLE_90,NUMERO_90,PT3_90,PT2_90,PT1_90,LIEUDIT_90";
    7374                str += ",SUBSECTION_90";
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastrePlugin.java

    r13727 r13784  
    6666 * 0.9 05-Feb-2009 - grab vectorized full commune bbox, save in file, convert to OSM way
    6767 *                   and simplify
    68  * 1.0 05-Feb-2009 - fix various bugs
     68 * 1.0 18-Feb-2009 - fix various bugs in color management and preference dialog
     69 *                 - increase PNG picture size requested to WMS (800x1000)
     70 *                 - set 4th grab scale fixed size configurable (from 25 to 1000 meters)
    6971 */
    7072public class CadastrePlugin extends Plugin {
     
    8789    public static boolean alterColors = false;
    8890   
    89     public static String colorBackground;
    90 
    9191    public static boolean backgroundTransparent = false;
    9292   
     
    103103     */
    104104    public CadastrePlugin() throws Exception {
    105         System.out.println("Pluging \"french cadastre\" started...");
    106         if (Main.proj.toString().equals(new Lambert().toString()) != true) {
    107             JOptionPane.showMessageDialog(Main.parent,
    108                     tr("To enable the cadastre WMS plugin, change\nthe JOSM projection to Lambert and restart"));
    109             return;
    110         }
     105        System.out.println("Pluging \"cadastre-fr\" started...");
    111106        if (Main.pref.get("cadastrewms.cacheDir").equals(""))
    112107            cacheDir = Main.pref.getPreferencesDir()+"plugins/cadastrewms/";
     
    127122
    128123    public void refreshMenu() throws Exception {
     124        boolean isLambertProjection = Main.proj.toString().equals(new Lambert().toString());
    129125        JMenuBar menu = Main.main.menu;
    130126
     
    133129            cadastreJMenu.setMnemonic(KeyEvent.VK_C);
    134130            menu.add(cadastreJMenu, menu.getMenuCount()-2);
    135            
    136             JosmAction grab = new MenuActionGrab();
    137             JMenuItem menuGrab = new JMenuItem(grab);
    138             KeyStroke ks = grab.getShortcut().getKeyStroke();
    139             if (ks != null) {
    140                 menuGrab.setAccelerator(ks);
     131            if (isLambertProjection) {
     132                JosmAction grab = new MenuActionGrab();
     133                JMenuItem menuGrab = new JMenuItem(grab);
     134                KeyStroke ks = grab.getShortcut().getKeyStroke();
     135                if (ks != null) {
     136                    menuGrab.setAccelerator(ks);
     137                }
     138                JMenuItem menuSettings = new JMenuItem(new MenuActionNewLocation());
     139                final JCheckBoxMenuItem menuSource = new JCheckBoxMenuItem(tr("Auto sourcing"));
     140                menuSource.setSelected(autoSourcing);     
     141                menuSource.addActionListener(new ActionListener() {
     142                    public void actionPerformed(ActionEvent ev) {
     143                        Main.pref.put("cadastrewms.autosourcing", menuSource.isSelected());
     144                        autoSourcing = menuSource.isSelected();
     145                    }
     146                });
     147   
     148                JMenuItem menuResetCookie = new JMenuItem(new MenuActionResetCookie());
     149                JMenuItem menuLambertZone = new JMenuItem(new MenuActionLambertZone());
     150                JMenuItem menuLoadFromCache = new JMenuItem(new MenuActionLoadFromCache());
     151                //JMenuItem menuActionBoundaries = new JMenuItem(new MenuActionBoundaries());
     152                //JMenuItem menuActionBuildings = new JMenuItem(new MenuActionBuildings());
     153               
     154                cadastreJMenu.add(menuGrab);
     155                cadastreJMenu.add(menuSettings);
     156                cadastreJMenu.add(menuSource);
     157                cadastreJMenu.add(menuResetCookie);
     158                cadastreJMenu.add(menuLambertZone);
     159                cadastreJMenu.add(menuLoadFromCache);
     160                // all SVG features disabled until official WMS is released
     161                //cadastreJMenu.add(menuActionBoundaries);
     162                //cadastreJMenu.add(menuActionBuildings);
     163            } else {
     164                JMenuItem hint = new JMenuItem(tr("Invalid projection"));
     165                hint.setToolTipText(tr("Change the projection to {0} first.", new Lambert().toString()));
     166                hint.addActionListener(new ActionListener() {
     167                    public void actionPerformed(ActionEvent ev) {
     168                        JOptionPane.showMessageDialog(Main.parent,
     169                                tr("To enable the cadastre WMS plugin, change\nthe JOSM projection to Lambert and restart"));
     170                    }
     171                });
     172                cadastreJMenu.add(hint);
    141173            }
    142             JMenuItem menuSettings = new JMenuItem(new MenuActionNewLocation());
    143             final JCheckBoxMenuItem menuSource = new JCheckBoxMenuItem(tr("Auto sourcing"));
    144             menuSource.setSelected(autoSourcing);     
    145             menuSource.addActionListener(new ActionListener() {
    146                 public void actionPerformed(ActionEvent ev) {
    147                     Main.pref.put("cadastrewms.autosourcing", menuSource.isSelected());
    148                     autoSourcing = menuSource.isSelected();
    149                 }
    150             });
    151 
    152             JMenuItem menuResetCookie = new JMenuItem(new MenuActionResetCookie());
    153             JMenuItem menuLambertZone = new JMenuItem(new MenuActionLambertZone());
    154             JMenuItem menuLoadFromCache = new JMenuItem(new MenuActionLoadFromCache());
    155             JMenuItem menuActionBoundaries = new JMenuItem(new MenuActionBoundaries());
    156             JMenuItem menuActionBuildings = new JMenuItem(new MenuActionBuildings());
    157            
    158             cadastreJMenu.add(menuGrab);
    159             cadastreJMenu.add(menuSettings);
    160             cadastreJMenu.add(menuSource);
    161             cadastreJMenu.add(menuResetCookie);
    162             cadastreJMenu.add(menuLambertZone);
    163             cadastreJMenu.add(menuLoadFromCache);
    164             cadastreJMenu.add(menuActionBoundaries);
    165             //cadastreJMenu.add(menuActionBuildings);
    166174        }
    167175        setEnabledAll(menuEnabled);
     
    174182        alterColors = Main.pref.getBoolean("cadastrewms.alterColors");
    175183        drawBoundaries = Main.pref.getBoolean("cadastrewms.drawBoundaries", false);
    176         colorBackground = Main.pref.get("color.background", "#FFFFFF");
    177184        if (alterColors) {
    178185            backgroundTransparent = Main.pref.getBoolean("cadastrewms.backgroundTransparent");
     
    193200            JMenuItem item = cadastreJMenu.getItem(i);
    194201            if (item != null)
    195                 if (item.getText().equals(MenuActionGrab.name) ||
     202                if (item.getText().equals(MenuActionGrab.name) /* ||
    196203                    item.getText().equals(MenuActionBoundaries.name) ||
    197                     item.getText().equals(MenuActionBuildings.name)) {
     204                    item.getText().equals(MenuActionBuildings.name)*/) {
    198205                    item.setEnabled(isEnabled);
    199206                } else if (item.getText().equals(MenuActionLambertZone.name)) {
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastrePreferenceSetting.java

    r13497 r13784  
    33import static org.openstreetmap.josm.tools.I18n.tr;
    44
    5 import java.awt.Dimension;
    65import java.awt.event.ActionEvent;
    76import java.awt.event.ActionListener;
     
    4241   
    4342    private JRadioButton grabMultiplier4 = new JRadioButton("", true);
    44    
     43
     44    static final int DEFAULT_SQUARE_SIZE = 100;
     45    private JTextField grabMultiplier4Size = new JTextField(5);
     46
    4547    private JCheckBox enableCache = new JCheckBox(tr("Enable automatic caching."));
    4648
     
    6668
    6769        // option to alter the original colors of the wms images
    68         alterColors.addActionListener(new ActionListener() {
    69             public void actionPerformed(ActionEvent e) {
    70                 reversGrey.setEnabled(alterColors.isSelected());
    71                 transparency.setEnabled(alterColors.isSelected());
    72                 sliderTrans.setEnabled(transparency.isSelected() && alterColors.isSelected());
    73             }
    74         });
    7570        alterColors.setSelected(Main.pref.getBoolean("cadastrewms.alterColors", false));
    7671        alterColors.setToolTipText(tr("Replace the original white background by the backgound color defined in JOSM preferences."));
     
    7974        // option to reverse the grey colors (to see texts background)
    8075        reversGrey.setSelected(Main.pref.getBoolean("cadastrewms.invertGrey", false));
    81         reversGrey.setToolTipText(tr("Invert the original texts from black to white (and all intermediate greys)."));
     76        reversGrey.setToolTipText(tr("Invert the original black and white colors (and all intermediate greys). Useful for texts on dark backgrounds."));
    8277        reversGrey.setEnabled(alterColors.isSelected());
    83         cadastrewms.add(reversGrey, GBC.eop().insets(20, 0, 0, 0));
     78        cadastrewms.add(reversGrey, GBC.eop().insets(00, 0, 0, 0));
    8479
    8580        // option to enable transparency
     
    9186        transparency.setSelected(Main.pref.getBoolean("cadastrewms.backgroundTransparent", false));
    9287        transparency.setToolTipText(tr("Allows multiple layers stacking"));
    93         transparency.setEnabled(alterColors.isSelected());
    94         cadastrewms.add(transparency, GBC.eop().insets(20, 0, 0, 0));
     88        cadastrewms.add(transparency, GBC.eop().insets(0, 0, 0, 0));
    9589
    9690        // slider for transparency level
    97         sliderTrans.setPreferredSize(new Dimension(20,200));
    9891        sliderTrans.setSnapToTicks(true);
    9992        sliderTrans.setToolTipText(tr("Set WMS layers transparency. Right is opaque, left is transparent."));
     
    114107        cadastrewms.add(jLabelScale, GBC.std().insets(0, 5, 10, 0));
    115108        ButtonGroup bg = new ButtonGroup();
     109        ActionListener multiplierActionListener = new ActionListener() {
     110            public void actionPerformed(ActionEvent actionEvent) {
     111              AbstractButton button = (AbstractButton) actionEvent.getSource();
     112              grabMultiplier4Size.setEnabled(button == grabMultiplier4);
     113            }
     114          };
    116115        grabMultiplier1.setIcon(ImageProvider.get("preferences", "unsel_box_1"));
    117116        grabMultiplier1.setSelectedIcon(ImageProvider.get("preferences", "sel_box_1"));
     117        grabMultiplier1.addActionListener( multiplierActionListener);
    118118        grabMultiplier2.setIcon(ImageProvider.get("preferences", "unsel_box_2"));
    119119        grabMultiplier2.setSelectedIcon(ImageProvider.get("preferences", "sel_box_2"));
     120        grabMultiplier2.addActionListener( multiplierActionListener);
     121        grabMultiplier2.setToolTipText(tr("Grab smaller images (higher quality but use more memory)"));
    120122        grabMultiplier3.setIcon(ImageProvider.get("preferences", "unsel_box_3"));
    121123        grabMultiplier3.setSelectedIcon(ImageProvider.get("preferences", "sel_box_3"));
     124        grabMultiplier3.addActionListener( multiplierActionListener);
     125        grabMultiplier3.setToolTipText(tr("Grab smaller images (higher quality but use more memory)"));
    122126        grabMultiplier4.setIcon(ImageProvider.get("preferences", "unsel_box_4"));
    123127        grabMultiplier4.setSelectedIcon(ImageProvider.get("preferences", "sel_box_4"));
    124         String multiplierTooltip = "Grab smaller images (higher quality but use more memory)";
    125         grabMultiplier3.setToolTipText(multiplierTooltip);
     128        grabMultiplier4.addActionListener( multiplierActionListener);
     129        grabMultiplier4.setToolTipText(tr("Fixed size square (default is 100m)"));
    126130        bg.add(grabMultiplier1);
    127131        bg.add(grabMultiplier2);
    128132        bg.add(grabMultiplier3);
    129133        bg.add(grabMultiplier4);
    130         if (Main.pref.get("cadastrewms.scale", "1").equals(Scale.X1))
     134        String currentScale = Main.pref.get("cadastrewms.scale", "1");
     135        if (currentScale.equals(Scale.X1.value))
    131136            grabMultiplier1.setSelected(true);
    132         if (Main.pref.get("cadastrewms.scale", "1").equals(Scale.X2))
     137        if (currentScale.equals(Scale.X2.value))
    133138            grabMultiplier2.setSelected(true);
    134         if (Main.pref.get("cadastrewms.scale", "1").equals(Scale.X3))
     139        if (currentScale.equals(Scale.X3.value))
    135140            grabMultiplier3.setSelected(true);
    136         if (Main.pref.get("cadastrewms.scale", "1").equals(Scale.SQUARE_100M))
     141        if (currentScale.equals(Scale.SQUARE_100M.value))
    137142            grabMultiplier4.setSelected(true);
    138143        cadastrewms.add(grabMultiplier1, GBC.std().insets(5, 0, 5, 0));
    139144        cadastrewms.add(grabMultiplier2, GBC.std().insets(5, 0, 5, 0));
    140145        cadastrewms.add(grabMultiplier3, GBC.std().insets(5, 0, 5, 0));
    141         cadastrewms.add(grabMultiplier4, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 5, 0));
     146        cadastrewms.add(grabMultiplier4, GBC.std().insets(5, 0, 5, 0));
     147        int squareSize = getNumber("cadastrewms.squareSize", DEFAULT_SQUARE_SIZE);
     148        grabMultiplier4Size.setText(String.valueOf(squareSize));
     149        grabMultiplier4Size.setToolTipText(tr("Fixed size (from 25 to 1000 meters)"));
     150        grabMultiplier4Size.setEnabled(currentScale.equals(Scale.SQUARE_100M.value));
     151        cadastrewms.add(grabMultiplier4Size, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 0, 5));
    142152       
    143153        // option to enable automatic caching
     
    153163
    154164        // option to fix the cache size(in MB)
    155         int size;
    156         try {
    157             size = Integer.parseInt(Main.pref.get("cadastrewms.cacheSize", String.valueOf(DEFAULT_CACHE_SIZE)));
    158         } catch (NumberFormatException e) {
    159             size = DEFAULT_CACHE_SIZE;
    160         }
     165        int size = getNumber("cadastrewms.cacheSize", DEFAULT_CACHE_SIZE);
    161166        cacheSize.setText(String.valueOf(size));
    162167        cacheSize.setToolTipText(tr("Oldest files are automatically deleted when this size is exceeded"));
     
    182187        else if (grabMultiplier3.isSelected())
    183188            Main.pref.put("cadastrewms.scale", Scale.X3.toString());
    184         else
     189        else {
    185190            Main.pref.put("cadastrewms.scale", Scale.SQUARE_100M.toString());
     191            try {
     192                int squareSize = Integer.parseInt(grabMultiplier4Size.getText());
     193                if (squareSize >= 25 && squareSize <= 1000)
     194                    Main.pref.put("cadastrewms.squareSize", grabMultiplier4Size.getText());
     195            } catch (NumberFormatException e) { // ignore the last input
     196            }
     197        }
    186198        Main.pref.put("cadastrewms.enableCaching", enableCache.isSelected());
    187199       
     
    190202            CacheControl.cacheSize = Integer.parseInt(cacheSize.getText());
    191203            Main.pref.put("cadastrewms.cacheSize", String.valueOf(CacheControl.cacheSize));
    192         } catch (NumberFormatException e) {
    193             // ignore the last input
     204        } catch (NumberFormatException e) { // ignore the last input
    194205        }
    195206        CacheControl.cacheEnabled = enableCache.isSelected();
     
    199210    }
    200211
     212    private int getNumber(String pref_parameter, int def_value) {
     213        try {
     214            return Integer.parseInt(Main.pref.get(pref_parameter, String.valueOf(def_value)));
     215        } catch (NumberFormatException e) {
     216            return def_value;
     217        }
     218    }
    201219}
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/DownloadSVGBuilding.java

    r13611 r13784  
    1616import java.util.Collection;
    1717import java.util.LinkedList;
    18 import java.util.List;
     18
     19import javax.swing.JOptionPane;
    1920
    2021import org.openstreetmap.josm.Main;
     
    2324import org.openstreetmap.josm.command.SequenceCommand;
    2425import org.openstreetmap.josm.data.coor.EastNorth;
     26import org.openstreetmap.josm.data.osm.DataSet;
    2527import org.openstreetmap.josm.data.osm.Node;
    2628import org.openstreetmap.josm.data.osm.Way;
     
    3537    private CadastreInterface wmsInterface;
    3638    private String svg = null;
     39    private static EastNorthBound currentView = null;
    3740    private EastNorthBound viewBox = null;
    3841   
     
    4952        try {
    5053            if (wmsInterface.retrieveInterface(wmsLayer)) {
    51                 MapView mv = Main.map.mapView;
    52                 EastNorthBound enb = new EastNorthBound(mv.getEastNorth(0, mv.getHeight()),
    53                         mv.getEastNorth(mv.getWidth(), 0));
    54                 svg = grabBoundary(enb);
     54                svg = grabBoundary(currentView);
    5555                if (svg == null)
    5656                    return;
     
    5858                if (viewBox == null)
    5959                    return;
    60                 createWay(svg);
     60                createBuildings(svg);
    6161            }
    6262        } catch (DuplicateLayerException e) {
     
    8989     *  which path element is the best fitting to the viewBox and convert it to OSM objects
    9090     */
    91     private void createWay(String svg) {
    92         String[] SVGpaths = new SVGParser().getPaths(svg);
     91    private void createBuildings(String svg) {
     92        String[] SVGpaths = new SVGParser().getClosedPaths(svg);
    9393        ArrayList<ArrayList<EastNorth>> eastNorths = new ArrayList<ArrayList<EastNorth>>();
    94         Collection<Node> existingNodes = Main.ds.nodes;
    9594       
     95        // convert SVG nodes to eastNorth coordinates
    9696        for (int i=0; i< SVGpaths.length; i++) {
    9797            ArrayList<EastNorth> eastNorth = new ArrayList<EastNorth>();
     
    100100                eastNorths.add(eastNorth);
    101101        }
    102         List<Way> wayList = new ArrayList<Way>();
    103         List<Node> nodeList = new ArrayList<Node>();
     102
     103        // create nodes and closed ways
     104        DataSet svgDataSet = new DataSet();
    104105        for (ArrayList<EastNorth> path : eastNorths) {
    105             List<Node> tmpNodeList = new ArrayList<Node>();
    106106            Way wayToAdd = new Way();
    107107            for (EastNorth eastNorth : path) {
    108108                Node nodeToAdd = new Node(Main.proj.eastNorth2latlon(eastNorth));
    109109                // check if new node is not already created by another new path
    110                 Node nearestNewNode = checkNearestNode(nodeToAdd, tmpNodeList);
    111                 if (nearestNewNode == nodeToAdd) {
    112                     // check if new node is not already in existing OSM objects
    113                     nearestNewNode = checkNearestNode(nodeToAdd, existingNodes);
    114                     if (nearestNewNode == nodeToAdd)
    115                         tmpNodeList.add(nodeToAdd);
     110                Node nearestNewNode = checkNearestNode(nodeToAdd, svgDataSet.nodes);
     111                if (nearestNewNode == nodeToAdd)
     112                    svgDataSet.addPrimitive(nearestNewNode);
     113                wayToAdd.nodes.add(nearestNewNode); // either a new node or an existing one
     114            }
     115            wayToAdd.nodes.add(wayToAdd.nodes.get(0)); // close the way
     116            svgDataSet.addPrimitive(wayToAdd);
     117        }
     118       
     119        // TODO remove small boxes (4 nodes with less than 1 meter distance)
     120        /*
     121        for (Way w : svgDataSet.ways)
     122            if (w.nodes.size() == 5)
     123                for (int i = 0; i < w.nodes.size()-2; i++) {
     124                    if (w.nodes.get(i).eastNorth.distance(w.nodes.get(i+1).eastNorth))
     125                }*/
     126
     127        // simplify ways and check if we can reuse existing OSM nodes
     128        for (Way wayToAdd : svgDataSet.ways)
     129            new SimplifyWay().simplifyWay(wayToAdd, svgDataSet, 0.5);
     130        // check if the new way or its nodes is already in OSM layer
     131        for (Node n : svgDataSet.nodes) {
     132            Node nearestNewNode = checkNearestNode(n, Main.ds.nodes);
     133            if (nearestNewNode != n) {
     134                // replace the SVG node by the OSM node
     135                for (Way w : svgDataSet.ways) {
     136                    int replaced = 0;
     137                    for (Node node : w.nodes)
     138                        if (node == n) {
     139                            node = nearestNewNode;
     140                            replaced++;
     141                        }
     142                    if (w.nodes.size() == replaced)
     143                        w.delete(true);
    116144                }
    117                 wayToAdd.nodes.add(nearestNewNode); // either a new node or an existing one
    118             }
    119             // at least two nodes have to be new, otherwise the polygon is not new (duplicate)
    120             if (tmpNodeList.size() > 1) {
    121                 for (Node n : tmpNodeList)
    122                     nodeList.add(n);
    123                 wayToAdd.nodes.add(wayToAdd.nodes.get(0)); // close the way
    124                 wayList.add(wayToAdd);
    125             }
    126         }
     145                n.delete(true);
     146            }
     147               
     148        }
     149
    127150        Collection<Command> cmds = new LinkedList<Command>();
    128         for (Node node : nodeList)
    129             cmds.add(new AddCommand(node));
    130         for (Way way : wayList)
    131             cmds.add(new AddCommand(way));
     151        for (Node node : svgDataSet.nodes)
     152            if (!node.deleted)
     153                cmds.add(new AddCommand(node));
     154        for (Way way : svgDataSet.ways)
     155            if (!way.deleted)
     156                cmds.add(new AddCommand(way));
    132157        Main.main.undoRedo.add(new SequenceCommand(tr("Create buildings"), cmds));
    133158        Main.map.repaint();
     
    162187     */
    163188    private Node checkNearestNode(Node nodeToAdd, Collection<Node> nodes) {
    164         double epsilon = 0.01; // smallest distance considering duplicate node
     189        double epsilon = 0.05; // smallest distance considering duplicate node
    165190        for (Node n : nodes) {
    166191            if (!n.deleted && !n.incomplete) {
    167192                double dist = n.eastNorth.distance(nodeToAdd.eastNorth);
    168193                if (dist < epsilon) {
    169                     System.out.println("distance="+dist);
    170194                    return n;
    171195                }
     
    197221        str += bbox.max.north();
    198222        str += "&width=800&height=600"; // maximum allowed by wms server
     223        str += "&exception=application/vnd.ogc.se_inimage";
    199224        str += "&styles=";
    200225        str += "LS2_90";
     
    231256
    232257    public static void download(WMSLayer wmsLayer) {
     258        MapView mv = Main.map.mapView;
     259        currentView = new EastNorthBound(mv.getEastNorth(0, mv.getHeight()),
     260                mv.getEastNorth(mv.getWidth(), 0));
     261        if ((currentView.max.east() - currentView.min.east()) > 1000 ||
     262                (currentView.max.north() - currentView.min.north() > 1000)) {
     263            JOptionPane.showMessageDialog(Main.parent,
     264                    tr("To avoid cadastre WMS overload,\nbuilding import size is limited to 1 km2 max."));
     265            return;
     266        }
     267        if (CadastrePlugin.autoSourcing == false) {
     268            JOptionPane.showMessageDialog(Main.parent,
     269                    tr("Please, enable auto-sourcing and check cadastre millesime."));
     270            return;
     271        }
    233272        Main.worker.execute(new DownloadSVGBuilding(wmsLayer));
    234273    }
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/DownloadSVGTask.java

    r13611 r13784  
    1818import java.util.LinkedList;
    1919import java.util.List;
     20
     21import javax.swing.JOptionPane;
    2022
    2123import org.openstreetmap.josm.Main;
     
    9496     */
    9597    private void createWay(String svg) {
    96         String[] SVGpaths = new SVGParser().getPaths(svg);
     98        String[] SVGpaths = new SVGParser().getClosedPaths(svg);
    9799        ArrayList<Double> fitViewBox = new ArrayList<Double>(); 
    98100        ArrayList<ArrayList<EastNorth>> eastNorths = new ArrayList<ArrayList<EastNorth>>();
     
    116118        }
    117119        wayToAdd.nodes.add(wayToAdd.nodes.get(0)); // close the circle
    118         new SimplifyWay().simplifyWay(wayToAdd);
     120       
     121        // simplify the way
     122        double threshold = Double.parseDouble(Main.pref.get("cadastrewms.simplify-way-boundary", "1.0"));
     123        new SimplifyWay().simplifyWay(wayToAdd, Main.ds, threshold);
     124       
    119125        cmds.add(new AddCommand(wayToAdd));
    120126        Main.main.undoRedo.add(new SequenceCommand(tr("Create boundary"), cmds));
     
    205211
    206212    public static void download(WMSLayer wmsLayer) {
     213        if (CadastrePlugin.autoSourcing == false) {
     214            JOptionPane.showMessageDialog(Main.parent,
     215                    tr("Please, enable auto-sourcing and check cadastre millesime."));
     216            return;
     217        }
    207218        Main.worker.execute(new DownloadSVGTask(wmsLayer));
    208219    }
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/GeorefImage.java

    r13497 r13784  
    1616import java.io.Serializable;
    1717import javax.imageio.ImageIO;
     18
    1819import org.openstreetmap.josm.data.coor.EastNorth;
    1920import org.openstreetmap.josm.gui.NavigatableComponent;
    20 import org.openstreetmap.josm.tools.ColorHelper;
    2121
    2222public class GeorefImage implements Serializable {
     
    181181            int heightYMaskPixel = Math.abs((int) ((maxMaskNorth - minMaskNorth) / pixelPerNorth));
    182182            Graphics g = image.getGraphics();
    183             int josmBackgroundColor = ColorHelper.html2color(CadastrePlugin.colorBackground).getRGB();
    184183            for (int x = minXMaskPixel; x < minXMaskPixel + widthXMaskPixel; x++)
    185184                for (int y = minYMaskPixel; y < minYMaskPixel + heightYMaskPixel; y++)
    186                     if (CadastrePlugin.alterColors)
    187                         image.setRGB(x, y, josmBackgroundColor);
    188                     else
    189                         image.setRGB(x, y, ImageModifier.cadastreBackground);
     185                    image.setRGB(x, y, ImageModifier.cadastreBackgroundTransp);
    190186            g.dispose();
    191187        }
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/ImageModifier.java

    r13611 r13784  
    1818    public static final int cadastreBackground = -1; // white
    1919
     20    public static final int cadastreBackgroundTransp = 1; // original white but transparent
     21
    2022    public BufferedImage bufferedImage;
    2123
     
    2830    public ImageModifier(BufferedImage bi) {
    2931        bufferedImage = bi;
    30         if (Main.pref.getBoolean("cadastrewms.alterColors")) {
    31             changeColors();
    32             if (Main.pref.getBoolean("cadastrewms.backgroundTransparent")) {
    33                 makeTransparent();
    34             }
    35         }
     32        if (Main.pref.getBoolean("cadastrewms.backgroundTransparent"))
     33            makeTransparent();
     34        else if (Main.pref.getBoolean("cadastrewms.alterColors"))
     35            replaceBackground();
     36       
     37        if (Main.pref.getBoolean("cadastrewms.invertGrey"))
     38            invertGrey();
    3639    }
    3740
    3841    /**
    3942     * Replace the background color by the josm color.background color.
    40      * @param bi
    41      * @return
    4243     */
    43     private void changeColors() {
     44    private void replaceBackground() {
    4445        int w = bufferedImage.getWidth();
    4546        int h = bufferedImage.getHeight();
    46         int pixel;
    47         int josmBackgroundColor = ColorHelper.html2color(Main.pref.get("color.background", "#FFFFFF")).getRGB();
    48         boolean invertGrey = (Main.pref.getBoolean("cadastrewms.invertGrey"));
     47        int josmBackgroundColor = ColorHelper.html2color(Main.pref.get("color.background", "#000000")).getRGB();
    4948        for (int x = 0; x < w; x++) {
    5049            for (int y = 0; y < h; y++) {
    51                 pixel = bufferedImage.getRGB(x, y);
     50                int pixel = bufferedImage.getRGB(x, y);
    5251                if (pixel == cadastreBackground) {
    5352                    bufferedImage.setRGB(x, y, josmBackgroundColor);
     
    5655                    backgroundSampleX = x;
    5756                    backgroundSampleY = y;
    58                 } else if (invertGrey) {
     57                }
     58            }
     59        }
     60    }
     61   
     62    /**
     63     * Invert black/white/grey pixels (to change original black characters to white).
     64     */
     65    private void invertGrey() {
     66        int w = bufferedImage.getWidth();
     67        int h = bufferedImage.getHeight();
     68        for (int x = 0; x < w; x++) {
     69            for (int y = 0; y < h; y++) {
     70                int pixel = bufferedImage.getRGB(x, y);
     71                if (pixel != cadastreBackground) {
    5972                    bufferedImage.setRGB(x, y, reverseIfGrey(pixel));
    6073                }
     
    6275        }
    6376    }
    64    
     77
    6578    /**
    6679     * Reverse the grey value if the pixel is grey (light grey becomes dark grey)
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/SVGParser.java

    r13545 r13784  
    1414    private String cViewBoxEnd = "\"";
    1515    private String cPathStart = "<path d=\"";
    16     private String cPathEnd = "\"/>";
     16    private String cClosedPathEnd = "\"/>";
    1717
    1818    /**
     
    4040    }
    4141   
    42     public String [] getPaths(String svg) {
     42    /**
     43     * Closed SVG paths are finishing with a "Z" at the end of the moves list.
     44     * @param svg
     45     * @return
     46     */
     47    public String [] getClosedPaths(String svg) {
    4348        ArrayList<String> path = new ArrayList<String>();
    4449        int i = 0;
    4550        while (svg.indexOf(cPathStart, i) != -1) {
    4651            int s = svg.indexOf(cPathStart, i) + cViewBoxStart.length();
    47             int e = svg.indexOf(cPathEnd, s);
     52            int e = svg.indexOf(cClosedPathEnd, s);
    4853            if (s != -1 && e != -1) {
    49                 path.add(svg.substring(s, e));
     54                String onePath = svg.substring(s, e);
     55                if (onePath.indexOf("Z") != -1) // only closed SVG path
     56                    path.add(onePath);
    5057            } else
    5158                break;
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/SimplifyWay.java

    r13545 r13784  
    1212import org.openstreetmap.josm.command.DeleteCommand;
    1313import org.openstreetmap.josm.command.SequenceCommand;
     14import org.openstreetmap.josm.data.osm.DataSet;
    1415import org.openstreetmap.josm.data.osm.Node;
    1516import org.openstreetmap.josm.data.osm.Way;
     
    2324 */
    2425public class SimplifyWay {
    25     public void simplifyWay(Way w) {
    26         double threshold = Double.parseDouble(Main.pref.get("simplify-way.max-error", "3"));
    27 
     26    public void simplifyWay(Way w, DataSet dataSet, double threshold) {
    2827        Way wnew = new Way(w);
    2928
    3029        int toI = wnew.nodes.size() - 1;
    3130        for (int i = wnew.nodes.size() - 1; i >= 0; i--) {
    32             CollectBackReferencesVisitor backRefsV = new CollectBackReferencesVisitor(Main.ds, false);
     31            CollectBackReferencesVisitor backRefsV = new CollectBackReferencesVisitor(dataSet, false);
    3332            backRefsV.visit(wnew.nodes.get(i));
    3433            boolean used = false;
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSDownloadAction.java

    r13593 r13784  
    4141                return new MenuActionNewLocation().addNewLayer(existingWMSlayers);
    4242            JOptionPane.showMessageDialog(Main.parent,
    43                     tr("More than one WMS layer present.\nSelect one of them first, then retry."));
     43                    tr("More than one WMS layer present\nSelect one of them first, then retry"));
    4444        }
    4545        return null;
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java

    r13545 r13784  
    162162        } else {
    163163            // divide to fixed size squares
    164             int cSquare = 100; // expressed in meters in projection Lambert
     164            int cSquare = Integer.parseInt(Main.pref.get("cadastrewms.squareSize", "100"));
    165165            minEast = minEast - minEast % cSquare;
    166166            minNorth = minNorth - minNorth % cSquare;
Note: See TracChangeset for help on using the changeset viewer.