Revision 22

View differences:

org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsShowMeasuresParamsView.xml
24 24
    </at>
25 25
    <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
26 26
   </super>
27
   <at name="id">/home/daniel/tmp/abeille/JLrsShowMeasuresParamsView.xml</at>
27
   <at name="id">/home/paco/projects/externals/gvsig-desktop/gvSIG_v2.1/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsShowMeasuresParamsView.xml</at>
28 28
   <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE</at>
29 29
   <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:124PX:GROW(1.0),FILL:DEFAULT:NONE</at>
30 30
   <at name="components">
......
91 91
     </item>
92 92
     <item >
93 93
      <at name="value">
94
       <object classname="com.jeta.forms.store.memento.BeanMemento">
95
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
96
         <at name="cellconstraints">
97
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
98
           <at name="column">4</at>
99
           <at name="row">2</at>
100
           <at name="colspan">1</at>
101
           <at name="rowspan">1</at>
102
           <at name="halign">default</at>
103
           <at name="valign">default</at>
104
           <at name="insets" object="insets">0,0,0,0</at>
105
          </object>
106
         </at>
107
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
108
        </super>
109
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
110
        <at name="beanclass">javax.swing.JFormattedTextField</at>
111
        <at name="beanproperties">
112
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
113
          <at name="classname">javax.swing.JFormattedTextField</at>
114
          <at name="properties">
115
           <object classname="com.jeta.forms.store.support.PropertyMap">
116
            <at name="height">20</at>
117
            <at name="width">846</at>
118
            <at name="name">txtDistance</at>
119
            <at name="border">
120
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
121
              <super classname="com.jeta.forms.store.properties.BorderProperty">
122
               <at name="name">border</at>
123
              </super>
124
              <at name="borders">
125
               <object classname="java.util.LinkedList">
126
                <item >
127
                 <at name="value">
128
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
129
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
130
                    <at name="name">border</at>
131
                   </super>
132
                  </object>
133
                 </at>
134
                </item>
135
               </object>
136
              </at>
137
             </object>
138
            </at>
139
           </object>
140
          </at>
141
         </object>
142
        </at>
143
       </object>
144
      </at>
145
     </item>
146
     <item >
147
      <at name="value">
148 94
       <object classname="com.jeta.forms.store.memento.FormMemento">
149 95
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
150 96
         <at name="cellconstraints">
......
160 106
         </at>
161 107
         <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
162 108
        </super>
163
        <at name="id">embedded.58007123</at>
109
        <at name="id">embedded.269660331</at>
164 110
        <at name="rowspecs">CENTER:DEFAULT:NONE</at>
165 111
        <at name="colspecs">FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE</at>
166 112
        <at name="components">
......
284 230
          <at name="classname">com.jeta.forms.gui.form.GridView</at>
285 231
          <at name="properties">
286 232
           <object classname="com.jeta.forms.store.support.PropertyMap">
287
            <at name="name"></at>
233
            <at name="name"/>
288 234
            <at name="fill">
289 235
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
290 236
              <at name="name">fill</at>
......
359 305
       </object>
360 306
      </at>
361 307
     </item>
308
     <item >
309
      <at name="value">
310
       <object classname="com.jeta.forms.store.memento.BeanMemento">
311
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
312
         <at name="cellconstraints">
313
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
314
           <at name="column">4</at>
315
           <at name="row">2</at>
316
           <at name="colspan">1</at>
317
           <at name="rowspan">1</at>
318
           <at name="halign">default</at>
319
           <at name="valign">default</at>
320
           <at name="insets" object="insets">0,0,0,0</at>
321
          </object>
322
         </at>
323
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
324
        </super>
325
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
326
        <at name="beanclass">javax.swing.JTextField</at>
327
        <at name="beanproperties">
328
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
329
          <at name="classname">javax.swing.JTextField</at>
330
          <at name="properties">
331
           <object classname="com.jeta.forms.store.support.PropertyMap">
332
            <at name="height">20</at>
333
            <at name="width">846</at>
334
            <at name="name">txtDistance</at>
335
            <at name="border">
336
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
337
              <super classname="com.jeta.forms.store.properties.BorderProperty">
338
               <at name="name">border</at>
339
              </super>
340
              <at name="borders">
341
               <object classname="java.util.LinkedList">
342
                <item >
343
                 <at name="value">
344
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
345
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
346
                    <at name="name">border</at>
347
                   </super>
348
                  </object>
349
                 </at>
350
                </item>
351
               </object>
352
              </at>
353
             </object>
354
            </at>
355
           </object>
356
          </at>
357
         </object>
358
        </at>
359
       </object>
360
      </at>
361
     </item>
362 362
    </object>
363 363
   </at>
364 364
   <at name="properties">
......
366 366
     <at name="classname">com.jeta.forms.gui.form.GridView</at>
367 367
     <at name="properties">
368 368
      <object classname="com.jeta.forms.store.support.PropertyMap">
369
       <at name="name"></at>
369
       <at name="name"/>
370 370
       <at name="fill">
371 371
        <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
372 372
         <at name="name">fill</at>
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsShowMeasuresParamsView.java
9 9
import javax.swing.Box;
10 10
import javax.swing.ImageIcon;
11 11
import javax.swing.JButton;
12
import javax.swing.JFormattedTextField;
13 12
import javax.swing.JFrame;
14 13
import javax.swing.JLabel;
15 14
import javax.swing.JPanel;
15
import javax.swing.JTextField;
16 16

  
17 17

  
18 18
public class JLrsShowMeasuresParamsView extends JPanel
19 19
{
20 20
   JLabel lblDistance = new JLabel();
21
   JFormattedTextField txtDistance = new JFormattedTextField();
22 21
   JButton btnAccept = new JButton();
23 22
   JButton btnCancel = new JButton();
23
   JTextField txtDistance = new JTextField();
24 24

  
25 25
   /**
26 26
    * Default constructor
......
120 120
      lblDistance.setText("distance");
121 121
      jpanel1.add(lblDistance,cc.xy(2,2));
122 122

  
123
      jpanel1.add(createPanel1(),new CellConstraints(2,4,3,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
123 124
      txtDistance.setName("txtDistance");
124 125
      jpanel1.add(txtDistance,cc.xy(4,2));
125 126

  
126
      jpanel1.add(createPanel1(),new CellConstraints(2,4,3,1,CellConstraints.RIGHT,CellConstraints.DEFAULT));
127 127
      addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3,4,5 });
128 128
      return jpanel1;
129 129
   }
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsShowMeasuresParamsController.java
76 76
    /**
77 77
     *
78 78
     */
79

  
80

  
81 79
    private static final Logger logger = LoggerFactory.getLogger(JLrsShowMeasuresParamsController.class);
82 80

  
83 81
    private boolean canceled;
......
154 152

  
155 153
        validateLayer(layer);
156 154

  
157
        txtDistance.setValue(new Double(0));
155
        txtDistance.setText(new Double(0).toString());
158 156

  
159 157
        this.btnAccept.addActionListener(new ActionListener() {
160 158

  
......
207 205
        LrsShowMeasuresAlgorithmParams params = manager.createLrsShowMeasuresAlgorithmParams();
208 206
        // Recorrer todo del interfaz y rellenar los parametros
209 207

  
210
        Object distance = this.txtDistance.getValue();
211
        if (distance!=null && distance instanceof Double){
208
        try {
209
            Double distance = Double.valueOf(this.txtDistance.getText());
212 210
            params.setDistance((Double)distance);
213
        }else {
214
            params.setDistance(0);
211
        } catch (Exception e) {
212
            params.setDistance(1);
215 213
        }
216 214

  
217 215
        return params;
......
225 223
        // Rellena los campos con los valores de params
226 224
        LrsShowMeasuresAlgorithmParams parameters = (LrsShowMeasuresAlgorithmParams) params;
227 225

  
228
        this.txtDistance.setValue(parameters.getDistance());
226
        this.txtDistance.setText(Double.toString(parameters.getDistance()));
229 227

  
230 228
    }
231 229

  
232 230
    public void clear() {
233 231

  
234
        this.txtDistance.setValue(0.0);
232
        this.txtDistance.setText(Double.toString(1.0));
235 233

  
236 234
    }
237 235

  
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/java/org/gvsig/lrs/app/showmeasures/WiperMeasuresExtension.java
1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2015 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.lrs.app.showmeasures;
24

  
25
import org.apache.commons.lang3.StringUtils;
26
import org.slf4j.Logger;
27
import org.slf4j.LoggerFactory;
28

  
29
import org.gvsig.andami.IconThemeHelper;
30
import org.gvsig.andami.plugins.Extension;
31
import org.gvsig.app.ApplicationLocator;
32
import org.gvsig.app.ApplicationManager;
33
import org.gvsig.app.project.documents.view.ViewDocument;
34
import org.gvsig.app.project.documents.view.gui.IView;
35
import org.gvsig.fmap.mapcontext.MapContext;
36
import org.gvsig.fmap.mapcontext.layers.FLayer;
37
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
38
import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
39
import org.gvsig.lrs.swing.impl.JLrsShowMeasuresParamsController;
40

  
41
/**
42
 * @author dmartinez
43
 *
44
 */
45
public class WiperMeasuresExtension extends Extension {
46

  
47
    private static final Logger logger = LoggerFactory.getLogger(WiperMeasuresExtension.class);
48

  
49
    private JLrsShowMeasuresParamsController panel;
50

  
51

  
52
    /*
53
     * (non-Javadoc)
54
     *
55
     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
56
     */
57
    public void execute(String actionCommand) {
58
        if (StringUtils.equalsIgnoreCase(actionCommand, "wiper-measures")) {
59
            IView view = getActiveView();
60
            final MapContext mapContext = view.getMapControl().getMapContext();
61
            final GraphicLayer graphics = mapContext.getGraphicsLayer();
62

  
63
            graphics.removeGraphics(ShowMeasuresExtension.SHOW_MEASURES_GRAPHICS_ID);
64
            mapContext.invalidate();
65

  
66
        }
67
    }
68

  
69
    /*
70
     * (non-Javadoc)
71
     *
72
     * @see org.gvsig.andami.plugins.IExtension#initialize()
73
     */
74
    public void initialize() {
75
        registerIcons();
76
    }
77

  
78
    /*
79
     * (non-Javadoc)
80
     *
81
     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
82
     */
83
    public boolean isEnabled() {
84
        IView view = getActiveView();
85
        FLyrVect activeLayer = getActiveLayer(view);
86
        if (panel == null && activeLayer != null) {
87
            return true;
88
        }
89
        return false;
90
    }
91

  
92
    /*
93
     * (non-Javadoc)
94
     *
95
     * @see org.gvsig.andami.plugins.IExtension#isVisible()
96
     */
97
    public boolean isVisible() {
98
        return true;
99
    }
100

  
101
    private void registerIcons() {
102
        IconThemeHelper.registerIcon("lrs", "wiper", this);
103
    }
104

  
105
    private IView getActiveView() {
106
        ApplicationManager application = ApplicationLocator.getManager();
107
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
108
        return view;
109
    }
110

  
111
    private FLyrVect getActiveLayer(IView vista) {
112
        if (vista != null) {
113
            ViewDocument viewDocument = vista.getViewDocument();
114
            FLayer[] actives = viewDocument.getMapContext().getLayers().getActives();
115

  
116
            if ((actives.length == 1) && (actives[0] instanceof FLyrVect)) {
117
                return (FLyrVect) actives[0];
118
            }
119
        }
120
        return null;
121
    }
122
}
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/java/org/gvsig/lrs/app/showmeasures/ShowMeasuresExtension.java
22 22
 */
23 23
package org.gvsig.lrs.app.showmeasures;
24 24

  
25
import java.awt.Dimension;
25
import java.awt.Color;
26 26
import java.awt.event.ActionEvent;
27 27
import java.awt.event.ActionListener;
28
import java.awt.event.ComponentEvent;
29
import java.awt.event.ComponentListener;
30
import java.text.DecimalFormat;
31
import java.util.ArrayList;
32
import java.util.Iterator;
33
import java.util.List;
28 34

  
29 35
import javax.swing.JOptionPane;
30 36

  
......
38 44
import org.gvsig.app.ApplicationManager;
39 45
import org.gvsig.app.project.documents.view.ViewDocument;
40 46
import org.gvsig.app.project.documents.view.gui.IView;
47
import org.gvsig.fmap.dal.DataSet;
41 48
import org.gvsig.fmap.dal.exception.DataException;
42
import org.gvsig.fmap.dal.exception.ReadException;
43 49
import org.gvsig.fmap.dal.feature.Feature;
44
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
45 50
import org.gvsig.fmap.dal.feature.FeatureSelection;
46 51
import org.gvsig.fmap.dal.feature.FeatureStore;
47
import org.gvsig.fmap.dal.feature.FeatureType;
48
import org.gvsig.fmap.geom.DataTypes;
49 52
import org.gvsig.fmap.geom.Geometry;
50
import org.gvsig.fmap.geom.type.GeometryType;
53
import org.gvsig.fmap.geom.GeometryLocator;
54
import org.gvsig.fmap.geom.GeometryManager;
55
import org.gvsig.fmap.geom.aggregate.MultiLine;
56
import org.gvsig.fmap.geom.exception.CreateGeometryException;
57
import org.gvsig.fmap.geom.primitive.Line;
58
import org.gvsig.fmap.geom.primitive.Point;
59
import org.gvsig.fmap.mapcontext.MapContext;
60
import org.gvsig.fmap.mapcontext.MapContextLocator;
51 61
import org.gvsig.fmap.mapcontext.layers.FLayer;
52
import org.gvsig.fmap.mapcontext.layers.FLayers;
53
import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
54 62
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
63
import org.gvsig.fmap.mapcontext.layers.vectorial.GraphicLayer;
64
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
65
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
66
import org.gvsig.gui.beans.ProgressDialog;
55 67
import org.gvsig.lrs.lib.api.LrsAlgorithm;
56 68
import org.gvsig.lrs.lib.api.LrsAlgorithmsLocator;
57 69
import org.gvsig.lrs.lib.api.LrsAlgorithmsManager;
58
import org.gvsig.lrs.lib.api.LrsCalibrateRouteAlgorithmParams;
59 70
import org.gvsig.lrs.lib.api.LrsShowMeasuresAlgorithmParams;
60 71
import org.gvsig.lrs.lib.api.exceptions.LrsGettingParametersException;
61 72
import org.gvsig.lrs.lib.api.exceptions.LrsNeededParameterException;
......
63 74
import org.gvsig.lrs.swing.api.JLrsProgressDialog;
64 75
import org.gvsig.lrs.swing.api.LrsAlgorithmsSwingLocator;
65 76
import org.gvsig.lrs.swing.api.LrsAlgorithmsSwingManager;
66
import org.gvsig.lrs.swing.impl.JLrsCalibrateRouteParamsController;
67 77
import org.gvsig.lrs.swing.impl.JLrsShowMeasuresParamsController;
68 78
import org.gvsig.lrs.swing.impl.JLrsUtils;
79
import org.gvsig.symbology.SymbologyLocator;
80
import org.gvsig.symbology.SymbologyManager;
81
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
69 82
import org.gvsig.tools.ToolsLocator;
70
import org.gvsig.tools.dispose.DisposeUtils;
71
import org.gvsig.tools.exception.BaseException;
83
import org.gvsig.tools.dispose.DisposableIterator;
72 84
import org.gvsig.tools.i18n.I18nManager;
73
import org.gvsig.tools.observer.Observable;
74
import org.gvsig.tools.observer.Observer;
85
import org.gvsig.tools.locator.LocatorException;
75 86
import org.gvsig.tools.swing.api.ToolsSwingLocator;
76 87
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
77 88
import org.gvsig.tools.task.SimpleTaskStatus;
78
import org.gvsig.tools.visitor.VisitCanceledException;
79
import org.gvsig.tools.visitor.Visitor;
80 89

  
81

  
82 90
/**
83 91
 * @author dmartinez
84 92
 *
85 93
 */
86
public class ShowMeasuresExtension extends Extension {
94
public class ShowMeasuresExtension extends Extension implements ComponentListener {
87 95

  
88 96
    private static final Logger logger = LoggerFactory.getLogger(ShowMeasuresExtension.class);
89 97

  
90
    /* (non-Javadoc)
98
    public static final String SHOW_MEASURES_GRAPHICS_ID = "ShowMeasures";
99

  
100
    private JLrsShowMeasuresParamsController panel;
101

  
102

  
103
    /*
104
     * (non-Javadoc)
105
     *
91 106
     * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
92 107
     */
93 108
    public void execute(String actionCommand) {
94 109
        if (StringUtils.equalsIgnoreCase(actionCommand, "show-measures")) {
95 110
            IView view = getActiveView();
96
            FLyrVect activeLayer = getActiveLayer(view);
111
            final MapContext mapContext = view.getMapControl().getMapContext();
112
            final GraphicLayer graphics = mapContext.getGraphicsLayer();
97 113

  
114
            final FLyrVect activeLayer = getActiveLayer(view);
115

  
98 116
            final WindowManager winManager = ToolsSwingLocator.getWindowManager();
99 117

  
100 118
            final LrsAlgorithmsSwingManager manager = LrsAlgorithmsSwingLocator.getLrsAlgorithmsSwingManager();
101 119

  
102 120
            final I18nManager i18nManager = ToolsLocator.getI18nManager();
103 121

  
104
            JLrsShowMeasuresParamsController panel;
105 122
            try {
106
                panel = (JLrsShowMeasuresParamsController)manager.createJLrsShowMeasuresAlgorithmParameters(activeLayer, null);
123
                panel =
124
                    (JLrsShowMeasuresParamsController) manager.createJLrsShowMeasuresAlgorithmParameters(activeLayer,
125
                        null);
126
                panel.addComponentListener(this);
107 127
            } catch (LrsNeededParameterException e2) {
108 128
                logger.error("Error creating panel", e2);
109 129
                JOptionPane.showMessageDialog(
110 130
                    null,
111
                    new StringBuilder().append(i18nManager.getTranslation("error_creating_panel"))
112
                        .append(":").append(e2.getLocalizedMessage()),
113
                    i18nManager.getTranslation("error"), JOptionPane.ERROR_MESSAGE);
131
                    new StringBuilder().append(i18nManager.getTranslation("error_creating_panel")).append(":")
132
                        .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"),
133
                    JOptionPane.ERROR_MESSAGE);
114 134
                return;
115 135
            }
116 136
            panel.setVisibleAceptCancel(true);
......
123 143
                    }
124 144
                    LrsShowMeasuresAlgorithmParams params = null;
125 145
                    try {
126
                        params = (LrsShowMeasuresAlgorithmParams)panel.getParams();
146
                        params = (LrsShowMeasuresAlgorithmParams) panel.getParams();
127 147
                    } catch (LrsGettingParametersException e1) {
128 148
                        logger.error("Error getting parameters", e1);
129 149
                        JOptionPane.showMessageDialog(
130 150
                            null,
131 151
                            new StringBuilder().append(i18nManager.getTranslation("error_getting_parameters"))
132
                                .append(":").append(e1.getLocalizedMessage()),
133
                            i18nManager.getTranslation("error"), JOptionPane.ERROR_MESSAGE);
152
                                .append(":").append(e1.getLocalizedMessage()), i18nManager.getTranslation("error"),
153
                            JOptionPane.ERROR_MESSAGE);
134 154
                        return;
135 155
                    } catch (LrsNeededParameterException e1) {
136 156
                        logger.warn("Error getting parameters", e1);
137
                        JOptionPane.showMessageDialog(
138
                            null,
139
                            i18nManager.getTranslation(e1.getMessage()),
157
                        JOptionPane.showMessageDialog(null, i18nManager.getTranslation(e1.getMessage()),
140 158
                            i18nManager.getTranslation("warning"), JOptionPane.WARNING_MESSAGE);
141 159
                        return;
142 160
                    }
143
                    LrsAlgorithmsManager algorithmsManager = LrsAlgorithmsLocator.getLrsAlgorithmsManager();
144
                    final LrsAlgorithm algorithm = algorithmsManager.createLrsAlgorithm(params);
145 161
                    final SimpleTaskStatus taskStatus =
146
                        ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(i18nManager.getTranslation("progress"));
162
                        ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus(
163
                            i18nManager.getTranslation("progress"));
147 164

  
148 165
                    final JLrsProgressDialog progressDialog = manager.createJLrsProgressDialog(taskStatus);
149 166

  
150 167
                    winManager.showWindow(progressDialog.asJComponent(), i18nManager.getTranslation("show_measures"),
151 168
                        WindowManager.MODE.WINDOW);
152 169

  
170
                    final double distance = params.getDistance();
171

  
153 172
                    Thread task = new Thread(new Runnable() {
154 173

  
155 174
                        public void run() {
156 175
                            try {
157
                                algorithm.execute(taskStatus);
176
                                showMeasures(graphics, activeLayer, distance, taskStatus);
177
                                mapContext.invalidate();
178
                                if(!taskStatus.isRunning() && progressDialog.asJComponent().isVisible()){
179
                                    progressDialog.asJComponent().setVisible(false);
180
                                }
158 181
                            } catch (Exception e) {
159 182
                                logger.error("Error showing measures", e);
160 183
                                String message = e.getMessage();
161 184
                                if (e.getCause() != null) {
162 185
                                    message = e.getCause().getMessage();
163 186
                                }
164
//                                JOptionPane.showMessageDialog(progressDialog.asJComponent(), message);
165
                                JOptionPane.showMessageDialog(
166
                                    progressDialog.asJComponent(),
167
                                    message,
168
                                    i18nManager.getTranslation("show_measures"),
169
                                    JOptionPane.ERROR_MESSAGE
170
                                );
187
                                JOptionPane.showMessageDialog(progressDialog.asJComponent(), message,
188
                                    i18nManager.getTranslation("show_measures"), JOptionPane.ERROR_MESSAGE);
171 189
                            }
172 190
                        }
173 191
                    });
......
180 198
        }
181 199
    }
182 200

  
183
    /* (non-Javadoc)
201
    /*
202
     * (non-Javadoc)
203
     *
184 204
     * @see org.gvsig.andami.plugins.IExtension#initialize()
185 205
     */
186 206
    public void initialize() {
187 207
        registerIcons();
188 208
    }
189 209

  
190
    /* (non-Javadoc)
210
    /*
211
     * (non-Javadoc)
212
     *
191 213
     * @see org.gvsig.andami.plugins.IExtension#isEnabled()
192 214
     */
193 215
    public boolean isEnabled() {
194 216
        IView view = getActiveView();
195 217
        FLyrVect activeLayer = getActiveLayer(view);
196
        if (activeLayer != null) {
218
        if (panel == null && activeLayer != null) {
197 219
            return JLrsUtils.hasMLayersWithSelectedFeatures(activeLayer);
198 220
        }
199 221
        return false;
200 222
    }
201 223

  
202
    /* (non-Javadoc)
224
    /*
225
     * (non-Javadoc)
226
     *
203 227
     * @see org.gvsig.andami.plugins.IExtension#isVisible()
204 228
     */
205 229
    public boolean isVisible() {
......
210 234
        IconThemeHelper.registerIcon("lrs", "pk_green", this);
211 235
    }
212 236

  
237
    /*
238
     * Shows measurements along the selected features in a layer with a fixed spacing
239
     *
240
     */
241
    private void showMeasures(GraphicLayer graphics, FLyrVect layer, double distance, SimpleTaskStatus taskStatus)
242
        throws DataException, CreateGeometryException, LocatorException {
243
        FeatureStore featureStore = layer.getFeatureStore();
244
        FeatureSelection selection = featureStore.getFeatureSelection();
245
        if (selection != null && !selection.isEmpty()) {
246
            long range = getRange(selection);
247
            taskStatus.setRangeOfValues(0, range);
248
            long curValue = 0;
249
            taskStatus.setCurValue(curValue);
250
            DisposableIterator it = selection.fastIterator();
251
            while (it.hasNext()) {
252
                Feature feature = (Feature) it.next();
253
                Geometry geometry = feature.getDefaultGeometry();
254
                if (geometry instanceof Line) {
255
                    curValue = showLineMeasures(graphics, curValue, (Line) geometry, distance);
256
                    taskStatus.setCurValue(curValue);
257
                } else if (geometry instanceof MultiLine) {
258
                    MultiLine multiLine = (MultiLine) geometry;
259
                    int primitives = multiLine.getPrimitivesNumber();
260
                    for (int i = 0; i < primitives; i++) {
261
                        curValue = showLineMeasures(graphics, curValue, (Line) multiLine.getPrimitiveAt(i), distance);
262
                        taskStatus.setCurValue(curValue);
263
                    }
264
                }
265
            }
266
            it.dispose();
267
        }
268
        taskStatus.terminate();
269
    }
270

  
271
    /**
272
     * Shows measurements along a line with a fixed spacing
273
     *
274
     * @param curValue
275
     * @param taskStatus
276
     * @param geometry
277
     * @return
278
     * @throws LocatorException
279
     * @throws CreateGeometryException
280
     */
281
    private long showLineMeasures(GraphicLayer graphics, long curValue, Line line, Double distance) throws CreateGeometryException, LocatorException {
282
        long value = curValue;
283
        for (int i = 0; i < line.getNumVertices() - 1; i++) {
284
            value++;
285
            Point vertex = line.getVertex(i);
286
            double m0 = vertex.getCoordinateAt(vertex.getDimension() - 1);
287
            double div = m0 / distance;
288
            if (isMultiple(m0, distance)) {
289
                showMeasure(graphics, vertex, m0);
290
            }
291
            Point nextVertex = line.getVertex(i + 1);
292
            double m1 = nextVertex.getCoordinateAt(vertex.getDimension() - 1);
293
            List<Double> multiples = calculateMultiplesBetweenTwoValues(distance, m0, m1);
294
            for (Iterator iterator = multiples.iterator(); iterator.hasNext();) {
295
                Double m = (Double) iterator.next();
296
                Point point = getPointWithMBetweenTwoVertex(m, vertex, nextVertex);
297
                showMeasure(graphics, point, m);
298
            }
299
        }
300
        value++;
301
        return value;
302
    }
303

  
304
    /**
305
     * Show the m in the point p on the graphicLayer
306
     *
307
     * @param m
308
     */
309
    private void showMeasure(GraphicLayer graphics, Point p, double m) {
310

  
311
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
312
        SymbolManager symbolManager = MapContextLocator.getSymbolManager();
313

  
314
        ISymbol markerSymbol = symbolManager.createSymbol(Geometry.TYPES.POINT, Color.RED);
315
        ISimpleTextSymbol textSymbol = getTextSymbol();
316

  
317
        DecimalFormat formato = new DecimalFormat("####.000");
318
        textSymbol.setText(formato.format(m).replace(",", " + "));
319
        int idMarkerSymbol = graphics.addSymbol(markerSymbol);
320
        int idTextSymbol = graphics.addSymbol(textSymbol);
321
        graphics.addGraphic(SHOW_MEASURES_GRAPHICS_ID, p, idTextSymbol);
322
        graphics.addGraphic(SHOW_MEASURES_GRAPHICS_ID, p.cloneGeometry(), idMarkerSymbol);
323
    }
324

  
325
    /*
326
     * Creates a text symbol to be used in showMeasure
327
     */
328
    private ISimpleTextSymbol getTextSymbol(){
329
        SymbologyManager symbologyManager = SymbologyLocator.getSymbologyManager();
330
        ISimpleTextSymbol textSymbol = symbologyManager.createSimpleTextSymbol();
331
        textSymbol.setFontSize(10);
332
        return textSymbol;
333
    }
334

  
335
    /**
336
     * Dados dos puntos con coordenada M, calcula el punto correspondiente a la m dada.
337
     *
338
     * @param m
339
     * @param vertex
340
     * @param nextVertex
341
     * @return
342
     * @throws LocatorException
343
     * @throws CreateGeometryException
344
     */
345
    private Point getPointWithMBetweenTwoVertex(Double m, Point vertex, Point nextVertex) throws CreateGeometryException, LocatorException {
346
        Point point = (Point)GeometryLocator.getGeometryManager().create(Geometry.TYPES.POINT, Geometry.SUBTYPES.GEOM2D);
347
        point.setX(
348
            getCoordinateBetweenTwoValues(
349
                m,
350
                vertex.getCoordinateAt(vertex.getDimension()-1),
351
                nextVertex.getCoordinateAt(vertex.getDimension()-1),
352
                vertex.getX(),
353
                nextVertex.getX()));
354
        point.setY(
355
            getCoordinateBetweenTwoValues(
356
                m,
357
                vertex.getCoordinateAt(vertex.getDimension()-1),
358
                nextVertex.getCoordinateAt(vertex.getDimension()-1),
359
                vertex.getY(),
360
                nextVertex.getY()));
361

  
362
        return point;
363
    }
364

  
365
    /**
366
     * Dados los valores en una dimensi?n de dos puntos y sus "m" correspondientes,
367
     * calcula el valor en esa dimensi?n correspondiente a la "m" dada.
368
     *
369
     * @param m
370
     * @param m1
371
     * @param m2
372
     * @param v1
373
     * @param v2
374
     * @return
375
     */
376
    private double getCoordinateBetweenTwoValues(double m, double m1, double m2, double v1, double v2) {
377
        if (v1==v2){
378
            return Double.POSITIVE_INFINITY;
379
        }
380
         return ((v2-v1)*(m-m1)/(m2-m1))+v1;
381
    }
382

  
383
    /**
384
     * Calcula los m?ltiplos de "distance" que existen entre los valores "value0" y "value1"
385
     *
386
     * @param distance
387
     * @param value0
388
     * @param value1
389
     * @return
390
     */
391
    private List<Double> calculateMultiplesBetweenTwoValues(Double distance, double value0, double value1) {
392
        List<Double> result = new ArrayList<Double>();
393

  
394
        double v0;
395
        double v1;
396
        if(value0<=value1){
397
            v0 = value0;
398
            v1 = value1;
399
        } else {
400
            v0 = value1;
401
            v1 = value0;
402
        }
403

  
404
        int factor1 = (int) Math.ceil(v0/distance);
405
        int factor2 = (int) Math.floor(v1/distance);
406
            for (int factor = factor1; factor <= factor2; factor++) {
407
                double m = factor * distance;
408
                if(m>=v0 && m<=v1){
409
                    result.add(m);
410
                }
411
            }
412
        return result;
413
    }
414

  
415

  
416
    /**
417
     * Calcula si el valor del par?metro n es m?ltiplo del valor del par?metro d
418
     * @param n
419
     * @param d
420
     */
421
    private boolean isMultiple(double n, double d) {
422
        double div = n / d;
423
        return ((div - (int) div) < 0.000001);
424
    }
425

  
426
    /**
427
     * @param selection
428
     * @throws DataException
429
     */
430
    private long getRange(FeatureSelection selection) throws DataException {
431
        long range = 0;
432
        DisposableIterator it = selection.fastIterator();
433
        while (it.hasNext()) {
434
            Feature feature = (Feature) it.next();
435
            Geometry geometry = feature.getDefaultGeometry();
436
            if (geometry instanceof Line) {
437
                range += ((Line) geometry).getNumVertices();
438
            } else if (geometry instanceof MultiLine) {
439
                MultiLine multiLine = (MultiLine) geometry;
440
                int primitives = multiLine.getPrimitivesNumber();
441
                for (int i = 0; i < primitives; i++) {
442
                    range += ((Line) multiLine.getPrimitiveAt(i)).getNumVertices();
443
                }
444
            }
445
        }
446
        it.dispose();
447
        return range;
448
    }
449

  
213 450
    private IView getActiveView() {
214 451
        ApplicationManager application = ApplicationLocator.getManager();
215 452
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
......
219 456
    private FLyrVect getActiveLayer(IView vista) {
220 457
        if (vista != null) {
221 458
            ViewDocument viewDocument = vista.getViewDocument();
222
            FLayer[] actives =
223
                viewDocument.getMapContext().getLayers().getActives();
459
            FLayer[] actives = viewDocument.getMapContext().getLayers().getActives();
224 460

  
225 461
            if ((actives.length == 1) && (actives[0] instanceof FLyrVect)) {
226 462
                return (FLyrVect) actives[0];
......
228 464
        }
229 465
        return null;
230 466
    }
467

  
468
    /*
469
     * (non-Javadoc)
470
     *
471
     * @see java.awt.event.ComponentListener#componentResized(java.awt.event.
472
     * ComponentEvent)
473
     */
474
    public void componentResized(ComponentEvent e) {
475
        // TODO Auto-generated method stub
476

  
477
    }
478

  
479
    /*
480
     * (non-Javadoc)
481
     *
482
     * @see
483
     * java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent
484
     * )
485
     */
486
    public void componentMoved(ComponentEvent e) {
487
        // TODO Auto-generated method stub
488

  
489
    }
490

  
491
    /*
492
     * (non-Javadoc)
493
     *
494
     * @see
495
     * java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent
496
     * )
497
     */
498
    public void componentShown(ComponentEvent e) {
499
        // TODO Auto-generated method stub
500

  
501
    }
502

  
503
    /*
504
     * (non-Javadoc)
505
     *
506
     * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.
507
     * ComponentEvent)
508
     */
509
    public void componentHidden(ComponentEvent e) {
510
        panel = null;
511
    }
231 512
}
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/config.xml
68 68
      </tool-bar>
69 69
    </extension>
70 70

  
71
    <extension class-name="org.gvsig.lrs.app.showmeasures.WiperMeasuresExtension"
72
      description="" active="true" priority="1">
73
      <action name="wiper-measures" label="wiper_measures" tooltip="wiper_measures"
74
        position="600800040" action-command="wiper-measures" icon="wiper"
75
        accelerator="" />
76
      <menu text="linear_reference_system/wiper_measures" name="wiper-measures" />
77
      <tool-bar name="linear_reference_system" position="600800040">
78
        <action-tool name="wiper-measures" />
79
      </tool-bar>
80
    </extension>
81

  
71 82
    <extension class-name="org.gvsig.lrs.app.generatedynamicsegmentation.GenerateDynamicSegmentationExtension"
72 83
      description="" active="true" priority="1">
73 84
      <action name="generate-dynamic-segmentation" label="generate_dynamic_segmentation" tooltip="generate_dynamic_segmentation"
74 85
        position="600800040" action-command="generate-dynamic-segmentation" icon="pk_yellow"
75 86
        accelerator="" />
76 87
      <menu text="linear_reference_system/generate_dynamic_segmentation" name="generate-dynamic-segmentation" />
77
      <tool-bar name="linear_reference_system" position="600800040">
88
      <tool-bar name="linear_reference_system" position="600800050">
78 89
        <action-tool name="generate-dynamic-segmentation" />
79 90
      </tool-bar>
80 91
    </extension>
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/i18n/text.properties
113 113

  
114 114
#SHOW MEASURES
115 115
at_least_a_line_needed=Al menos una l\u00ednea es necesaria
116
show_measures=Mostrar Medidas
116
show_measures=Mostrar medidas
117
wiper_measures=Limpiar medidas
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
114 114
#SHOW MEASURES
115 115
at_least_a_line_needed=At least a line is needed
116 116
show_measures=Show Measures
117
wiper_measures=Clean measures
118

  

Also available in: Unified diff