From: <bma...@us...> - 2011-12-01 13:46:49
|
Revision: 6747 http://fudaa.svn.sourceforge.net/fudaa/?rev=6747&view=rev Author: bmarchan Date: 2011-12-01 13:46:42 +0000 (Thu, 01 Dec 2011) Log Message: ----------- Add : Possibilit?\195?\169 de modiification de structure pour une g?\195?\169om?\195?\169trie Modified Paths: -------------- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivTransfView.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivTransfView.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivTransfView.java 2011-12-01 13:43:22 UTC (rev 6746) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivTransfView.java 2011-12-01 13:46:42 UTC (rev 6747) @@ -17,12 +17,10 @@ import javax.units.NonSI; import org.fudaa.ebli.calque.BCalqueAffichage; -import org.fudaa.ebli.calque.ZCalqueImageRaster; import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.edition.ZCalqueLigneBriseeEditable; import org.fudaa.ebli.calque.edition.ZCalquePointEditable; import org.fudaa.ebli.calque.edition.ZModelePointEditable; -import org.fudaa.ebli.commun.EbliActionAbstract; import org.fudaa.ebli.commun.EbliCoordinateDefinition; import org.fudaa.ebli.commun.EbliFormatter; import org.fudaa.ebli.commun.EbliUIProperties; @@ -177,6 +175,13 @@ } /** + * @return Le calque comportant le contour de grille + */ + public ZCalqueLigneBriseeEditable getCntGridLayer() { + return cqCntGrille_; + } + + /** * Construction des outils sp\xE9cifiques \xE0 cette vue. */ private void buildTools() { Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java 2011-12-01 13:43:22 UTC (rev 6746) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeGridDefinitionAction.java 2011-12-01 13:46:42 UTC (rev 6747) @@ -7,13 +7,15 @@ */ package org.fudaa.fudaa.piv.action; -import com.memoire.bu.BuDesktop; import java.awt.Container; + import javax.swing.JComponent; import javax.swing.JInternalFrame; import javax.swing.SwingUtilities; import javax.swing.event.InternalFrameAdapter; import javax.swing.event.InternalFrameEvent; + +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction; import org.fudaa.ebli.calque.edition.ZCalqueEditionInteractionTargetI; @@ -29,6 +31,8 @@ import org.fudaa.fudaa.piv.metier.PivCntGrid; import org.fudaa.fudaa.piv.metier.PivGrid; +import com.memoire.bu.BuDesktop; + /** * Une action pour saisir le contour de grille et la grille de calcul. * @@ -66,8 +70,9 @@ * @return true. */ public boolean addNewPolygone(GrPolygone _pg, ZEditionAttributesDataI _data) { - if (_pg.sommets_.nombre()!=4) { - pnCalques_.getCtuluUI().error(PivResource.getS("Le contour de grille doit comporter 4 sommets.")); + CtuluAnalyze ana=new CtuluAnalyze(); + if (!pnCalques_.getTransfView().getCntGridLayer().modeleDonnees().isDataValid(_pg.toCoordinateSequence(), _data, ana)) { + pnCalques_.getCtuluUI().error(ana.getFatalError()); cqEdition_.cancelEdition(); atomicChanged(); return true; Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java 2011-12-01 13:43:22 UTC (rev 6746) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivOrthoGRPAction.java 2011-12-01 13:46:42 UTC (rev 6747) @@ -7,13 +7,11 @@ */ package org.fudaa.fudaa.piv.action; -import com.memoire.bu.BuButton; -import com.memoire.bu.BuDesktop; -import com.memoire.fu.FuLog; import java.awt.Container; import java.awt.Dimension; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; + import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.JDialog; @@ -21,6 +19,8 @@ import javax.swing.SwingUtilities; import javax.swing.event.InternalFrameAdapter; import javax.swing.event.InternalFrameEvent; + +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.edition.BPaletteEdition; import org.fudaa.ebli.calque.edition.BPaletteEditionClientInterface; @@ -38,6 +38,10 @@ import org.fudaa.fudaa.piv.layer.PivOrthoPointsModel; import org.fudaa.fudaa.piv.metier.PivOrthoPoint; +import com.memoire.bu.BuButton; +import com.memoire.bu.BuDesktop; +import com.memoire.fu.FuLog; + /** * Une action pour saisir les points de r\xE9f\xE9rence au sol. Cette action est * utilis\xE9e comme controller \xE0 la palette et au calque d'\xE9dition d\xE9di\xE9. @@ -79,26 +83,19 @@ * @return Si false, la saisie n'est pas stopp\xE9e. */ public boolean addNewMultiPoint(GrPolyligne _pg, ZEditionAttributesDataI _data) { - if (_pg.sommets_.nombre() < 6) { - pnCalques_.getCtuluUI().error(PivResource.getS("Le nombre de points doit \xEAtre au minimum de 6.")); -// pnCalques_.getCalqueDessin().cancelEdition(); -// atomicChanged(); + CtuluAnalyze ana=new CtuluAnalyze(); + if (!pnCalques_.getOriginalView().getOrthoPointsLayer().modeleDonnees().isDataValid(_pg.toCoordinateSequence(), _data, ana)) { + pnCalques_.getCtuluUI().error(ana.getFatalError()); return false; } - - // Controle des valeurs des points r\xE9els. + + // Valeurs des points r\xE9els. GrPoint[] realPts = new GrPoint[_pg.sommets_.nombre()]; for (int i = 0; i < _pg.sommets_.nombre(); i++) { Double x = (Double) _data.getValue(PivOrthoPointsModel.ATT_IND_XR, i); Double y = (Double) _data.getValue(PivOrthoPointsModel.ATT_IND_YR, i); Double z = (Double) _data.getValue(PivVisuPanel.ATT_IND_ZR, i); realPts[i] = new GrPoint(x.doubleValue(), y.doubleValue(), z.doubleValue()); - for (int j = 0; j < i; j++) { - if (realPts[j].distance(realPts[i]) == 0) { - pnCalques_.getCtuluUI().error(PivResource.getS("Les points {0} et {1} ont des coordonn\xE9es r\xE9elles confondues.",j+1,i+1)); - return false; - } - } } // Cr\xE9ation des orthopoints => les coordonn\xE9es images sont invers\xE9es. Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java 2011-12-01 13:43:22 UTC (rev 6746) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivCntGridModel.java 2011-12-01 13:46:42 UTC (rev 6747) @@ -1,15 +1,19 @@ package org.fudaa.fudaa.piv.layer; -import com.vividsolutions.jts.geom.CoordinateSequence; +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.gis.GISAttribute; import org.fudaa.ctulu.gis.GISAttributeModelObjectArray; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.ebli.calque.edition.ZEditionAttributesDataI; import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; import org.fudaa.ebli.geometrie.GrPolygone; +import org.fudaa.fudaa.piv.PivResource; import org.fudaa.fudaa.piv.PivVisuPanel; import org.fudaa.fudaa.piv.metier.PivCntGrid; import org.fudaa.fudaa.piv.metier.PivProject; +import com.vividsolutions.jts.geom.CoordinateSequence; + /** * Un modele pour le contour de grille * @@ -27,11 +31,20 @@ */ public PivCntGridModel() { super(new GISZoneCollectionLigneBrisee()); - + GISAttribute[] attrs = new GISAttribute[]{PivVisuPanel.ATT_LABEL}; getGeomData().setAttributes(attrs, null); } + @Override + public boolean isDataValid(CoordinateSequence _seq, ZEditionAttributesDataI _data, CtuluAnalyze _ana) { + if (_seq.size()!=5) { + _ana.addFatalError(PivResource.getS("Le contour de grille doit comporter 4 sommets.")); + return false; + } + return true; + } + /** * Redefinit le projet, et remet a jour le modele. * @param _prj Le projet courant. @@ -53,8 +66,8 @@ this.addGeometry(pl, null, null, null); // Les labels - GISAttributeModelObjectArray lbData = (GISAttributeModelObjectArray) PivVisuPanel.ATT_LABEL.createDataForGeom(null, pl.nombre()); - for (int i=0; i<pl.nombre(); i++) { + GISAttributeModelObjectArray lbData = (GISAttributeModelObjectArray) PivVisuPanel.ATT_LABEL.createDataForGeom(null, pl.nombre()+1); + for (int i=0; i<lbData.getSize(); i++) { lbData.set(i, "P"+(i+1)); } zl.getModel(PivVisuPanel.ATT_LABEL) .setObject(0, lbData, null); Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java 2011-12-01 13:43:22 UTC (rev 6746) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/layer/PivOrthoPointsModel.java 2011-12-01 13:46:42 UTC (rev 6747) @@ -1,7 +1,8 @@ package org.fudaa.fudaa.piv.layer; -import com.vividsolutions.jts.geom.CoordinateSequence; import java.awt.Dimension; + +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.gis.GISAttribute; import org.fudaa.ctulu.gis.GISAttributeDouble; import org.fudaa.ctulu.gis.GISAttributeModelDoubleArray; @@ -9,6 +10,7 @@ import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISZoneCollectionMultiPoint; +import org.fudaa.ebli.calque.edition.ZEditionAttributesDataI; import org.fudaa.ebli.calque.edition.ZModeleMultiPointEditable; import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.fudaa.piv.PivResource; @@ -16,6 +18,8 @@ import org.fudaa.fudaa.piv.metier.PivOrthoPoint; import org.fudaa.fudaa.piv.metier.PivProject; +import com.vividsolutions.jts.geom.CoordinateSequence; + /** * Un modele pour les points d'orthorectification, soit dans l'espace d'image * reconditionn\xE9e, soit dans l'espace r\xE9el. @@ -57,9 +61,9 @@ } }; - // Le projet. + /** Le projet. */ PivProject prj_; - // Le type de mod\xE8le + /** Le type de mod\xE8le */ int type_=PivVisuPanel.MODE_ORIGINAL_VIEW; /** @@ -83,6 +87,41 @@ getGeomData().setAttributes(attrs, null); } + @Override + public boolean isDataValid(CoordinateSequence _seq, ZEditionAttributesDataI _data, CtuluAnalyze _ana) { + + if (_seq.size() < 6) { + _ana.addFatalError(PivResource.getS("Le nombre de points doit \xEAtre au minimum de 6.")); + return false; + } + + // Controle des valeurs des points r\xE9els. + GrPoint[] realPts = new GrPoint[_seq.size()]; + for (int i = 0; i < _seq.size(); i++) { + Double x; + Double y; + if (type_ == PivVisuPanel.MODE_ORIGINAL_VIEW) { + x = (Double) _data.getValue(PivOrthoPointsModel.ATT_IND_XR, i); + y = (Double) _data.getValue(PivOrthoPointsModel.ATT_IND_YR, i); + } + else { + x = _seq.getOrdinate(i, 0); + y = _seq.getOrdinate(i, 1); + } + Double z = (Double) _data.getValue(PivVisuPanel.ATT_IND_ZR, i); + realPts[i] = new GrPoint(x.doubleValue(), y.doubleValue(), z.doubleValue()); + + for (int j = 0; j < i; j++) { + if (realPts[j].distance(realPts[i]) == 0) { + _ana.addFatalError(PivResource.getS("Les points {0} et {1} ont des coordonn\xE9es r\xE9elles confondues.", j + 1, i + 1)); + return false; + } + } + } + + return true; + } + /** * Redefinit le projet, et remet a jour le modele * @param _prj Le projet associ\xE9 au mod\xE8le. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |