From: <emm...@us...> - 2008-10-01 11:00:50
|
Revision: 4016 http://fudaa.svn.sourceforge.net/fudaa/?rev=4016&view=rev Author: emmanuel_martin Date: 2008-10-01 11:00:40 +0000 (Wed, 01 Oct 2008) Log Message: ----------- Utilisation de 'pointPlusProche' de GrSegement pour la projection au lieu d'un calcul dans addPoint. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2008-10-01 10:02:14 UTC (rev 4015) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2008-10-01 11:00:40 UTC (rev 4016) @@ -15,6 +15,7 @@ import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluUI; +import org.fudaa.ctulu.gis.GISPolygone; import org.fudaa.ebli.calque.ZCalqueLigneBrisee; import org.fudaa.ebli.calque.ZModeleLigneBrisee; import org.fudaa.ebli.calque.dessin.DeForme; @@ -168,39 +169,36 @@ final GrBoite bClip = getDomaine(); bClip.autoApplique(versEcran); final int tolerance = 5; + // Point \xE0 projeter final GrPoint pt = new GrPoint(_xEcran, _yEcran, 0); if ((!bClip.contientXY(pt)) && (bClip.distanceXY(pt) > tolerance)) { return false; } final double distanceReel = GrMorphisme.convertDistanceXY(versReel, tolerance); - // bClip = getClipReel(getGraphics()); final GrPoint ptToTest = pt.applique(versReel); final GrSegment seg = new GrSegment(new GrPoint(), new GrPoint()); final GrBoite bPoly = new GrBoite(new GrPoint(), new GrPoint()); - + int i=selection_.getMinIndex(); - -// for (int i = modele_.getNbLigneBrisee() - 1; i >= 0; i--) { - modele_.getDomaineForGeometry(i, bPoly); - if (bPoly.contientXY(ptToTest) || bPoly.distanceXY(ptToTest) < distanceReel) { - for (int j = modele_.getNbPointForGeometry(i) - 1; j > 0; j--) { - modele_.point(seg.e_, i, j); - modele_.point(seg.o_, i, j - 1); - if (seg.distanceXY(ptToTest) < distanceReel) { - addPoint(i, j - 1, ptToTest.x_, ptToTest.y_, _cmd); - return true; - } + modele_.getDomaineForGeometry(i, bPoly); + if (bPoly.contientXY(ptToTest)||bPoly.distanceXY(ptToTest)<distanceReel) { + for (int j=modele_.getNbPointForGeometry(i)-1; j>0; j--) { + modele_.point(seg.e_, i, j); + modele_.point(seg.o_, i, j-1); + if (seg.distanceXY(ptToTest)<distanceReel) { + addPoint(i, j-1, ptToTest.x_, ptToTest.y_, _cmd); + return true; } - if (modele_.isGeometryFermee(i)) { - modele_.point(seg.e_, i, 0); - modele_.point(seg.o_, i, modele_.getNbPointForGeometry(i) - 1); - if (seg.distanceXY(ptToTest) < distanceReel) { - addPoint(i, modele_.getNbPointForGeometry(i) - 1, ptToTest.x_, ptToTest.y_, _cmd); - return true; - } + } + if (modele_.isGeometryFermee(i)) { + modele_.point(seg.e_, i, 0); + modele_.point(seg.o_, i, modele_.getNbPointForGeometry(i)-1); + if (seg.distanceXY(ptToTest)<distanceReel) { + addPoint(i, modele_.getNbPointForGeometry(i)-1, ptToTest.x_, ptToTest.y_, _cmd); + return true; } } -// } + } return false; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2008-10-01 10:02:14 UTC (rev 4015) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2008-10-01 11:00:40 UTC (rev 4016) @@ -26,8 +26,10 @@ import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.commun.EbliListeSelectionMultiInterface; +import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.ebli.geometrie.GrPolygone; import org.fudaa.ebli.geometrie.GrPolyligne; +import org.fudaa.ebli.geometrie.GrSegment; import com.memoire.fu.FuLog; import com.vividsolutions.jts.geom.Coordinate; @@ -257,21 +259,14 @@ if (geometries_ == null) { return; } - double x = _x; final CoordinateSequence g = ((LineString) geometries_.getGeometry(_ligneIdx)) .getCoordinateSequence(); - final double x1 = g.getX(_idxBefore); - final double y1 = g.getY(_idxBefore); - final double x2 = g.getX(_idxBefore + 1); - final double y2 = g.getY(_idxBefore + 1); - double y; - if(x2!=x1) // Cas g\xE9n\xE9ral - y = y2 + (x2 - x) * (y1 - y2) / (x2 - x1); - else{ // Cas d'un segment vertical - x = x1; - y = _y; - } - geometries_.addPoint(_ligneIdx, _idxBefore, x, y, _cmd); + // Cr\xE9ation du segment d\xE9fini par les deux point de la forme + // Construction du point projet\xE9 grace \xE0 'pointPlusProche' + GrPoint point = (new GrSegment(new GrPoint(g.getX(_idxBefore), g.getY(_idxBefore), 0), + new GrPoint(g.getX(_idxBefore + 1), g.getY(_idxBefore + 1), 0))) + .pointPlusProche(new GrPoint(_x, _y, 0)); + geometries_.addPoint(_ligneIdx, _idxBefore, point.x_, point.y_, _cmd); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |