|
From: <de...@us...> - 2013-01-22 17:00:19
|
Revision: 8242
http://fudaa.svn.sourceforge.net/fudaa/?rev=8242&view=rev
Author: deniger
Date: 2013-01-22 16:59:58 +0000 (Tue, 22 Jan 2013)
Log Message:
-----------
Modified Paths:
--------------
trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePoint.java
trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePolygone.java
Modified: trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePoint.java
===================================================================
--- trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePoint.java 2013-01-22 16:09:51 UTC (rev 8241)
+++ trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePoint.java 2013-01-22 16:59:58 UTC (rev 8242)
@@ -1,6 +1,9 @@
/**
- * @creation 2000-11-09 @modification $Date: 2008-02-20 10:16:01 $ @license GNU General Public License 2 @copyright (c)1998-2001
- * CETMEF 2 bd Gambetta F-60231 Compiegne @mail de...@fu...
+ * @creation 2000-11-09
+ * @modification $Date: 2008-02-20 10:16:01 $
+ * @license GNU General Public License 2
+ * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail de...@fu...
*/
package org.fudaa.ebli.calque;
@@ -9,16 +12,20 @@
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.LinearRing;
+import gnu.trove.TIntArrayList;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.swing.table.AbstractTableModel;
import org.fudaa.ctulu.CtuluLib;
import org.fudaa.ctulu.CtuluListSelection;
import org.fudaa.ctulu.gis.GISGeometryFactory;
import org.fudaa.ctulu.gis.GISLib;
import org.fudaa.ebli.commun.EbliLib;
+import org.fudaa.ebli.commun.EbliSelectionState;
import org.fudaa.ebli.geometrie.GrBoite;
import org.fudaa.ebli.geometrie.GrMorphisme;
import org.fudaa.ebli.geometrie.GrPoint;
@@ -252,7 +259,7 @@
@Override
public void paintDonnees(final Graphics2D _g, final GrMorphisme _versEcran, final GrMorphisme _versReel,
- final GrBoite _clipReel) {
+ final GrBoite _clipReel) {
if ((modele_ != null) && (modele_.getNombre() > 0)) {
paintDonnees(_g, modele_.getNombre(), _versEcran, _clipReel);
}
@@ -311,6 +318,7 @@
/**
* Called for each point. By default use to color palette to set the color
+ *
* @param model
* @param i
* @param z
@@ -324,15 +332,39 @@
model.setCouleur(c);
}
}
+ TIntArrayList firstTwoSelected = new TIntArrayList();
@Override
+ public void clearSelection() {
+ super.clearSelection();
+ firstTwoSelected.clear();
+ }
+
+ protected int[] getTwoFirstSelected() {
+ return firstTwoSelected.toNativeArray();
+ }
+
+ @Override
public LineString getSelectedLine() {
if (getNbSelected() != 2) {
return null;
}
final Coordinate[] cs = new Coordinate[2];
- cs[0] = new Coordinate(modele_.getX(getLayerSelection().getMinIndex()), modele_.getY(getLayerSelection().getMinIndex()));
- cs[1] = new Coordinate(modele_.getX(getLayerSelection().getMaxIndex()), modele_.getY(getLayerSelection().getMaxIndex()));
+ int firstIdx = getLayerSelection().getMinIndex();
+ int lastIdx = getLayerSelection().getMaxIndex();
+ if (firstTwoSelected.size() == 2) {
+ int newFirst = firstTwoSelected.get(0);
+ int newLast = firstTwoSelected.get(1);
+ boolean isOk = (newFirst == firstIdx && newLast == lastIdx) || (newFirst == lastIdx && newLast == firstIdx);
+ if (!isOk) {
+ Logger.getLogger(ZCalquePoint.class.getName()).log(Level.INFO, "probleme dans la determination des 2 deux premiers points s\xE9lectionn\xE9s");
+ } else {
+ firstIdx = newFirst;
+ lastIdx = newLast;
+ }
+ }
+ cs[0] = new Coordinate(modele_.getX(firstIdx), modele_.getY(firstIdx));
+ cs[1] = new Coordinate(modele_.getX(lastIdx), modele_.getY(lastIdx));
if (cs[0].compareTo(cs[1]) > 0) {
final Coordinate tmp = cs[0];
cs[0] = cs[1];
@@ -344,7 +376,7 @@
@Override
public void doPaintSelection(final Graphics2D _g, final ZSelectionTrace _trace, final GrMorphisme _versEcran,
- final GrBoite _clipReel) {
+ final GrBoite _clipReel) {
if ((modele_ == null) || (modele_.getNombre() <= 0) || isSelectionEmpty() || isRapide()) {
return;
}
@@ -388,6 +420,37 @@
return selectionBasic(_poly, _mode);
}
+ @Override
+ public boolean changeSelection(CtuluListSelection _s, int _action) {
+ boolean res = super.changeSelection(_s, _action);
+ if (_s != null) {
+ switch (_action) {
+ case EbliSelectionState.ACTION_ADD:
+ if (_s.getNbSelectedIndex() == 1 && firstTwoSelected.size() < 2) {
+ firstTwoSelected.add(_s.getMinIndex());
+ }
+ break;
+ case EbliSelectionState.ACTION_DEL:
+ for (int j = firstTwoSelected.size() - 1; j >= 0; j--) {
+ if (_s.isSelected(firstTwoSelected.get(j))) {
+ firstTwoSelected.remove(j);
+ }
+ }
+ break;
+ case EbliSelectionState.ACTION_REPLACE:
+ firstTwoSelected.clear();
+ if (_s.getNbSelectedIndex() == 1) {
+ firstTwoSelected.add(_s.getMinIndex());
+ }
+ break;
+ default:
+ firstTwoSelected.clear();
+ break;
+ }
+ }
+ return res;
+ }
+
public CtuluListSelection selectionBasic(final LinearRing _poly, final int _mode) {
if (modele_ == null || modele_.getNombre() == 0 || !isVisible()) {
return null;
@@ -395,7 +458,7 @@
final Envelope polyEnv = _poly.getEnvelopeInternal();
final GrBoite domaineBoite = getDomaine();
final Envelope domaine = new Envelope(domaineBoite.e_.x_, domaineBoite.o_.x_, domaineBoite.e_.y_,
- domaineBoite.o_.y_);
+ domaineBoite.o_.y_);
// si l'envelop du polygone n'intersect pas le domaine, il n'y a pas de selection
if (!polyEnv.intersects(domaine)) {
return null;
@@ -424,7 +487,7 @@
}
public static int getSelectedPoint(final ZModelePoint _modele, final GrPoint _p, final int _tolerance,
- final GrMorphisme _versReel, final GrBoite _clipReel) {
+ final GrMorphisme _versReel, final GrBoite _clipReel) {
final GrBoite bClip = _modele.getDomaine();
final double toleranceReel = GrMorphisme.convertDistanceXY(_versReel, _tolerance);
if ((!bClip.contientXY(_p)) && (bClip.distanceXY(_p) > toleranceReel)) {
@@ -473,4 +536,4 @@
public boolean isConfigurable() {
return true;
}
-}
\ No newline at end of file
+}
Modified: trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePolygone.java
===================================================================
--- trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePolygone.java 2013-01-22 16:09:51 UTC (rev 8241)
+++ trunk/framework/ebli-2d/src/main/java/org/fudaa/ebli/calque/ZCalquePolygone.java 2013-01-22 16:59:58 UTC (rev 8242)
@@ -31,16 +31,19 @@
/**
* Un calque d'affichage de polyligne.
- *
+ *
* @version $Id: ZCalquePolygone.java,v 1.37.6.1 2008-02-20 10:16:02 bmarchan Exp $
* @author Fred Deniger
*/
public class ZCalquePolygone extends ZCalqueAffichageDonneesLineAbstract {
- /** Propriete modele. */
+ /**
+ * Propriete modele.
+ */
protected ZModelePolygone modele_;
- /** */
+ /**
+ * */
public ZCalquePolygone() {
super();
ligneModel_ = new TraceLigneModel();
@@ -96,7 +99,6 @@
public ZModeleDonnees modeleDonnees() {
return modele();
}
-
protected GrPolygone poly_ = new GrPolygone();
/**
@@ -105,17 +107,16 @@
* @param _idx l'indice du polygone
*/
protected void updateTrace(final TraceIconModel _ic, final TraceLigneModel _ligne, final int _idx) {
-
}
/**
* Ne dessine que les donn\xE9es.
- *
+ *
* @param _g le graphics cible
*/
@Override
public void paintDonnees(final Graphics2D _g, final GrMorphisme _versEcran, final GrMorphisme _versReel,
- final GrBoite _clipReel) {
+ final GrBoite _clipReel) {
if ((modele_ == null) || (modele_.getNombre() <= 0)) {
return;
}
@@ -142,7 +143,7 @@
}
}
for (int i = 0; i < nombre; i++) {
- if(!modele_.isPainted(i)){
+ if (!modele_.isPainted(i)) {
continue;
}
// si le polygone i est filtre on passe.
@@ -180,7 +181,7 @@
* @param _parent le composant parent pour dessiner les icones
*/
public static void paintPoly(final GrPolygone _p, final int _inc, final TraceLigne _tl, final TraceIcon _ic, final Graphics _g,
- final Component _parent) {
+ final Component _parent) {
GrPoint ptOri = _p.sommets_.renvoie(0);
GrPoint ptDest = null;
@@ -197,7 +198,7 @@
/**
* Ne dessine que la selection.
- *
+ *
* @param _g le graphics cible
*/
@Override
@@ -313,11 +314,15 @@
if (_cq.getNbSelected() != 2) {
return null;
}
+ return getSelectedLine(_cq.getLayerSelection().getMinIndex(), _cq.getLayerSelection().getMaxIndex(), _modele);
+ }
+
+ public static LineString getSelectedLine(int first, int last, final ZModelePolygone _modele) {
final Coordinate[] cs = new Coordinate[2];
final GrPolygone poly = new GrPolygone();
- _modele.polygone(poly, _cq.getLayerSelection().getMinIndex(), true);
+ _modele.polygone(poly, first, true);
cs[0] = poly.sommets_.barycentre();
- _modele.polygone(poly, _cq.getLayerSelection().getMaxIndex(), true);
+ _modele.polygone(poly, last, true);
cs[1] = poly.sommets_.barycentre();
if (cs[0].compareTo(cs[1]) > 0) {
final Coordinate tmp = cs[0];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|