From: <emm...@us...> - 2009-02-13 15:33:09
|
Revision: 4468 http://fudaa.svn.sourceforge.net/fudaa/?rev=4468&view=rev Author: emmanuel_martin Date: 2009-02-13 15:33:04 +0000 (Fri, 13 Feb 2009) Log Message: ----------- Modeleur 1d : la trace de profil lors de l'exportation somporte jusqu'?\195?\160 4 points. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/UtilsProfil1d.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java 2009-02-13 15:28:57 UTC (rev 4467) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java 2009-02-13 15:33:04 UTC (rev 4468) @@ -20,8 +20,7 @@ import org.fudaa.ctulu.fileformat.FortranInterface; import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ctulu.gis.GISAttributeModelDoubleInterface; -import org.fudaa.ctulu.gis.GISGeometryFactory; -import org.fudaa.ctulu.gis.GISPoint; +import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.dodico.commun.DodicoLib; @@ -218,11 +217,20 @@ throw new MascaretDataError("Un profil \xE0 plusieurs ou aucun point(s) d'intersection(s) avec l'axe hydraulique."); profilAbs.coordIntersectionAxeHydraulique=new double[]{intersection.getCoordinate().x, intersection.getCoordinate().y}; // Abscisse curviligne axe hydraulique + int idxAttrCommHydraulique=zoneProfil.getIndiceOf(GISAttributeConstants.COMMENTAIRE_HYDRO); + if(idxAttrCommHydraulique==-1) + throw new MascaretDataError("L'attribut COMMENTAIRE_HYDRO doit \xEAtre pr\xE9sent."); + String comm=(String) zoneProfil.getValue(idxAttrCommHydraulique, idxProfil); + if(!GISLib.isHydroCommentValued(comm, "PK")) + throw new MascaretDataError("La propri\xE9t\xE9 PK de COMMENTAIRE_HYDRO doit \xEAtre valu\xE9e."); + profilAbs.abscisseCurvilingeAxeHydraulique=GISLib.getHydroCommentDouble(comm, "PK"); CoordinateSequence coordSeq=axeHydraulique.getCoordinateSequence(); - profilAbs.abscisseCurvilingeAxeHydraulique=absCurv(coordSeq, intersection.getCoordinate()); // Trace profil coordSeq=profil.getCoordinateSequence(); + Coordinate coord[]=getPointsRuptures(coordSeq); profilAbs.coordXYTraceProfil.add(new double[]{coordSeq.getX(0), coordSeq.getY(0)}); + for(int j=0;j<coord.length;j++) + profilAbs.coordXYTraceProfil.add(new double[]{coord[j].x, coord[j].y}); profilAbs.coordXYTraceProfil.add(new double[]{coordSeq.getX(coordSeq.size()-1), coordSeq.getY(coordSeq.size()-1)}); // Information atomiques sur le profil \\ @@ -325,20 +333,124 @@ } /** - * Calcul l'abscisse curviligne du point indiqu\xE9 en param\xE8tre + * Retourne la liste des points de ruptures. */ - private double absCurv(CoordinateSequence _coordSeq, Coordinate _point){ - int k=idxIntersection(_coordSeq, _point); - // Calcule de l'abscisse curviligne - double valueCurviligne=0; - for (int j=1; j<=k; j++) - valueCurviligne+=_coordSeq.getCoordinate(j).distance(_coordSeq.getCoordinate(j-1)); - // Mise \xE0 jour de l'abscisse curviligne - valueCurviligne+=_coordSeq.getCoordinate(k).distance(_point); - return valueCurviligne; + private Coordinate[] getPointsRuptures(CoordinateSequence _seq) { + List<Coordinate> coord=new ArrayList<Coordinate>(); + int idx1=0; + int idx2=1; + int idx3=2; + int idxPointRupturePrecedent=-1; + while(idx3<_seq.size()) { + if(idx1==idx2) + idx2++; + else if(idx2==idx3) + idx3++; + else if(_seq.getCoordinate(idx1).equals(_seq.getCoordinate(idx2))) + idx2++; + else if(_seq.getCoordinate(idx2).equals(_seq.getCoordinate(idx3))) + idx3++; + else { + if(getAngle(_seq.getCoordinate(idx1), _seq.getCoordinate(idx2), _seq.getCoordinate(idx3))<(Math.PI-0.0001)) + if(idxPointRupturePrecedent<0||!_seq.getCoordinate(idxPointRupturePrecedent).equals(_seq.getCoordinate(idx2))) + coord.add(_seq.getCoordinate(idx2)); + if(idx2+1<idx3) + idx2++; + else + idx1=idx2; + } + } + return coord.toArray(new Coordinate[0]); } /** + * Retourne l'angle form\xE9 par les segments _a_b et _b_c. _a, _b et _c doivent + * \xEAtre non confondus sous peine d'avoir un {@link IllegalArgumentException}. + * L'angle est toujours positif. + * L'ordonn\xE9 z n'est pas prise en compte. + * L'angle retourn\xE9 est en radian. + */ + private double getAngle(Coordinate _a, Coordinate _b, Coordinate _c) { + Coordinate a=new Coordinate(_a.x, _a.y, 0); + Coordinate b=new Coordinate(_b.x, _b.y, 0); + Coordinate c=new Coordinate(_c.x, _c.y, 0); + if(egal(a, b)||egal(b, c)||egal(a, c)) + throw new IllegalArgumentException("Les trois points doivent \xEAtre non confonus."); + // Projection de b sur ac + Coordinate b2=proj(b, a, c); + // Calcul des angles interm\xE9diaires + double angleCBB2=Math.asin(b2.distance(c)/c.distance(b)); + double angleB2BA=Math.asin(b2.distance(a)/a.distance(b)); + if(angleCBB2==Double.NaN||angleB2BA==Double.NaN) + return Math.PI; + // Selon que B2 appartient ou non \xE0 ac, la d\xE9termination de l'angle final diff\xE8re. + double angle; + int position=getPositionXY(b2, a, c); + if(position==-1) + angle=angleCBB2-angleB2BA; + else if(position==1) + angle=angleB2BA-angleCBB2; + else + angle=angleCBB2+angleB2BA; + return angle; + } + + /** + * Soit _a, _b, _c align\xE9s et non confondus. Retourne -1 si _a avant _b_c, 0 + * si _a est entre _b_c (inclu), +1 sinon. Si _a, _b et _c ne sont pas + * align\xE9s, {@link IllegalArgumentException} est lev\xE9. + */ + private int getPositionXY(Coordinate _a, Coordinate _b, Coordinate _c) { + if(!egal(proj(_a, _b, _c), _a)||egal(_a, _b)||egal(_b, _c)||egal(_a, _c)) + throw new IllegalArgumentException("Les trois points doivent \xEAtre align\xE9s et non confonus."); + Coordinate vecBC=vec(_b, _c); + double k; + if(vecBC.x!=0) + k=(_a.x-_b.x)/vecBC.x; + else + k=(_a.y-_b.y)/vecBC.y; + if(k<0) + return -1; + else if(k>1) + return 1; + else + return 0; + } + + /** + * Retourne la projection de _a sur la droite _b_c. + * Attention : Il s'agit bien d'une projection sur une + * droite et non un segment de droite : le r\xE9sultat + * peut \xEAtre en dehors de [_b, _c] + */ + private Coordinate proj(Coordinate _a, Coordinate _b, Coordinate _c){ + Coordinate vBC=vec(_b, _c); + Coordinate vBA=vec(_b, _a); + double normeBC=Math.sqrt(vBC.x*vBC.x+vBC.y*vBC.y+vBC.z*vBC.z); + double produitScalaireBCBA=vBC.x*vBA.x+vBC.y*vBA.y+vBC.z*vBA.z; + double rapportSurBC=produitScalaireBCBA/(normeBC*normeBC); + return new Coordinate(vBC.x*rapportSurBC+_b.x, vBC.y*rapportSurBC+_b.y, vBC.z*rapportSurBC+_b.z); + } + + /** + * Compars les deux vecteurs avec la tol\xE9rance donn\xE9e. Le dernier param\xE8tre + * indique si un normalisation des deux vecteurs doit \xEAtre faite avec la + * comparaison. Les vecteurs ne sont pas modif\xE9s dans l'op\xE9ration. _testZ doit + * \xEAtre mit \xE0 vrai pour que la comparaison tienne compte du z. + */ + private boolean egal(Coordinate _a, Coordinate _b) { + Coordinate diff=vec(_a, _b); + return Math.abs(diff.x)<0.0001&&Math.abs(diff.y)<0.0001; + } + + /** + * retourne le vecteur _a, _b sous forme de Coordinate. + */ + private Coordinate vec(Coordinate _a, Coordinate _b){ + return new Coordinate(_b.x-_a.x, _b.y-_a.y, _b.z-_a.z); + } + + /** * Calcul l'abscisse curviligne du point indiqu\xE9 en param\xE8tre */ private double absCurv(CoordinateSequence _coordSeq, int _idxPoint){ @@ -349,19 +461,4 @@ valueCurviligne+=_coordSeq.getCoordinate(j).distance(_coordSeq.getCoordinate(j-1)); return valueCurviligne; } - - /** - * Retourne l'indice pr\xE9c\xE9dent d'un point d'intersectin avec une geometrie. - */ - private int idxIntersection(CoordinateSequence _coordSeq, Coordinate _point){ - /* Recherche de l'index du dernier point de la polyligne \xE0 prendre en - * compte. */ - boolean fini=false; - int k=-1; - GISPoint point= new GISPoint(_point); - while (!fini&&++k<_coordSeq.size()-1) - fini=(GISGeometryFactory.INSTANCE - .createLineString(new Coordinate[]{_coordSeq.getCoordinate(k), _coordSeq.getCoordinate(k+1)})).intersects(point); - return k; - } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/UtilsProfil1d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/UtilsProfil1d.java 2009-02-13 15:28:57 UTC (rev 4467) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/UtilsProfil1d.java 2009-02-13 15:33:04 UTC (rev 4468) @@ -52,7 +52,7 @@ GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(i), seq.getCoordinate(i+1)})) .getNumPoints()>1) ok=false; - // Aucun point d'intersectin avec les axes qui suivent + // Aucun point d'intersection avec les axes qui suivent int j=i; while (ok&&++j+1<seq.size()) ok=!mainAxe.intersects(GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(j), @@ -65,49 +65,30 @@ // / D\xE9termination des points de ruptures et verification qu'il y en a // au maximun deux. \\\ int nbPointsRupture=0; - double upsilon=0.0001; // Marge d'erreur des calculs sur double - double coefDirecteur=0; - // coefDirX : Indique si le coefficient directeur est calcul\xE9 sur les x - // ou sur les y (au d\xE9nominateur). - boolean coefDirX; - // Initialisation : calcul du premier cofficient directeur \\ - int idx=1; - // Calcul du coefficient directeur - if (seq.getX(idx)!=seq.getX(idx-1)) { - // Calcul sur les x - coefDirX=true; - coefDirecteur=(seq.getY(idx)-seq.getY(idx-1))/(seq.getX(idx)-seq.getX(idx-1)); - } - else { - // Calcul sur les y - coefDirX=false; - coefDirecteur=0; - } - // Coeur : Calcul de tous les coefficients directeur et m\xE9morisation des - // ruptures \\ - for (idx=2; idx<seq.size(); idx++) { - double newCoefDirecteur; - boolean newCoefDirX; - // Calcul du coefficient directeur - if (seq.getX(idx)!=seq.getX(idx-1)) { - // Calcul sur les x - newCoefDirX=true; - newCoefDirecteur=(seq.getY(idx)-seq.getY(idx-1))/(seq.getX(idx)-seq.getX(idx-1)); - } + int idx1=0; + int idx2=1; + int idx3=2; + int idxPointRupturePrecedent=-1; + while(idx3<seq.size()) { + if(idx1==idx2) + idx2++; + else if(idx2==idx3) + idx3++; + else if(seq.getCoordinate(idx1).equals(seq.getCoordinate(idx2))) + idx2++; + else if(seq.getCoordinate(idx2).equals(seq.getCoordinate(idx3))) + idx3++; else { - // Calcul sur les y - newCoefDirX=false; - newCoefDirecteur=0; - } - // D\xE9tection des ruptures - if (coefDirX!=newCoefDirX||Math.abs(coefDirecteur-newCoefDirecteur)>upsilon) { - nbPointsRupture++; + if(UtilsProfil1d.getAngle(seq.getCoordinate(idx1), seq.getCoordinate(idx2), seq.getCoordinate(idx3))<(Math.PI-0.0001)) + if(idxPointRupturePrecedent<0||!seq.getCoordinate(idxPointRupturePrecedent).equals(seq.getCoordinate(idx2))) + nbPointsRupture++; if (nbPointsRupture>2) return false; + if(idx2+1<idx3) + idx2++; + else + idx1=idx2; } - // Pr\xE9paration de l'it\xE9ration suivante - coefDirecteur=newCoefDirecteur; - coefDirX=newCoefDirX; } return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-02-17 16:34:51
|
Revision: 4478 http://fudaa.svn.sourceforge.net/fudaa/?rev=4478&view=rev Author: bmarchan Date: 2009-02-17 16:34:47 +0000 (Tue, 17 Feb 2009) Log Message: ----------- D?\195?\169placement avec accrochage. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDeplacement.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementTargetInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java Removed Paths: ------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionAbstract.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -343,7 +343,7 @@ } } - protected boolean editionAsked() { + public boolean editionAsked() { return false; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueSelectionInteractionSimple.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -39,7 +39,7 @@ super(); } - protected boolean editionAsked() { + public boolean editionAsked() { String message = editor_.edit(); if(message!=null) FuLog.trace("EBL : ZCalqueSelectionInteractionSimple : "+message); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneDeplacementAction.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -15,7 +15,7 @@ import org.fudaa.ebli.calque.ZScene; import org.fudaa.ebli.calque.edition.BPaletteDeplacement; import org.fudaa.ebli.calque.edition.BPaletteEdition; -import org.fudaa.ebli.calque.edition.ZCalqueDeplacement; +import org.fudaa.ebli.calque.edition.ZCalqueDeplacementInteraction; import org.fudaa.ebli.calque.edition.ZCalqueEditable; import org.fudaa.ebli.calque.edition.ZEditorInterface; import org.fudaa.ebli.calque.edition.BPaletteRotation; @@ -36,12 +36,12 @@ ZSceneEditor sceneEditor_; EbliFormatterInterface formatter_; - ZCalqueDeplacement cqDep_; + ZCalqueDeplacementInteraction cqDep_; /** * @param _m l'arbre des calques */ - public SceneDeplacementAction(final TreeSelectionModel _m, final ZSceneEditor _sceneEditor, EbliFormatterInterface _formatter, ZCalqueDeplacement _cqDep) { + public SceneDeplacementAction(final TreeSelectionModel _m, final ZSceneEditor _sceneEditor, EbliFormatterInterface _formatter, ZCalqueDeplacementInteraction _cqDep) { super(EbliResource.EBLI.getString("D\xE9placer des objets"), EbliResource.EBLI.getToolIcon("fleche-deplacement"), "GLOBAL_MOVE", _m); formatter_=_formatter; cqDep_=_cqDep; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDeplacement.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDeplacement.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDeplacement.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -41,11 +41,11 @@ * @version $Id: BPaletteDeplacement.java,v 1.1.2.1 2008-05-13 12:10:31 bmarchan Exp $ */ public class BPaletteDeplacement extends JPanel implements BPalettePanelInterface, ZSelectionListener, - ZCalqueDeplacement.SpecPanel, ActionListener { + ZCalqueDeplacementInteraction.SpecPanel, ActionListener { JButton btApply_; - ZCalqueDeplacement deplacement_; + ZCalqueDeplacementInteraction deplacement_; private ZSceneEditor sceneEditor_; EbliFormatterInterface formatter_; @@ -108,13 +108,13 @@ Double dz=new Double(0); if (tfDz_.isEnabled()) dz=(Double) tfDz_.getValue(); if (dx != null && dy != null && dz!=null) { - deplacement_.manualMove(dx.doubleValue(), dy.doubleValue(), dz.doubleValue()); + deplacement_.getTarget().moved(dx.doubleValue(), dy.doubleValue(), dz.doubleValue(),false); } } } - public void setCalqueDeplacement(ZCalqueDeplacement _dep) { + public void setCalqueDeplacement(ZCalqueDeplacementInteraction _dep) { deplacement_=_dep; deplacement_.specPanel_ = this; } @@ -138,11 +138,13 @@ btApply_.setEnabled(false); tfDx_.setText(formatter_.getXYFormatter().format(deplacement_.getReelDx())); tfDy_.setText(formatter_.getXYFormatter().format(deplacement_.getReelDy())); + tfDz_.setText(formatter_.getXYFormatter().format(deplacement_.getReelDz())); } else { if (!tfDx_.isEditable()) { tfDx_.setText(CtuluLibString.ZERO); tfDy_.setText(CtuluLibString.ZERO); + tfDz_.setText(CtuluLibString.ZERO); } tfDx_.setEditable(true); tfDy_.setEditable(true); Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -1,251 +0,0 @@ -/* - * @creation 4 avr. 2005 - * @modification $Date: 2008-05-13 12:10:33 $ - * @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.edition; - -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; - -import javax.swing.SwingUtilities; - -import com.memoire.bu.BuResource; - -import org.fudaa.ebli.calque.BCalqueInteraction; -import org.fudaa.ebli.calque.ZCalqueSelectionInteractionAbstract; -import org.fudaa.ebli.commun.EbliLib; -import org.fudaa.ebli.commun.EbliSelectionState; -import org.fudaa.ebli.geometrie.GrPoint; -import org.fudaa.ebli.geometrie.GrVecteur; -import org.fudaa.ebli.ressource.EbliResource; -import org.fudaa.ebli.trace.TraceIcon; - -/** - * @author Fred Deniger - * @version $Id: ZCalqueDeplacement.java,v 1.13.6.2 2008-05-13 12:10:33 bmarchan Exp $ - */ -public class ZCalqueDeplacement extends BCalqueInteraction implements MouseListener, MouseMotionListener { - /** - * @author fred deniger - * @version $Id: ZCalqueDeplacement.java,v 1.13.6.2 2008-05-13 12:10:33 bmarchan Exp $ - */ - public interface SpecPanel { - void updateState(); - } - - SpecPanel specPanel_; - int dx_, dy_; - - TraceIcon ic_ = new TraceIcon(TraceIcon.CARRE, 2, Color.LIGHT_GRAY); - int initX_, initY_; - - private boolean isDragged_; - - ZCalqueDeplacementTargetInterface target_; - - GrVecteur vect_; - - public final SpecPanel getSpecPanel() { - return specPanel_; - } - - public Cursor getSpecificCursor() { - return EbliResource.EBLI.getCursor("fleche-deplacement", -1, new Point(0, 0)); - } - - public String getDescription() { - return BuResource.BU.getString("D\xE9placer"); - } - - /** - * Deplacement des objets s\xE9lectionn\xE9s. - * - * @param _dx dx reel - * @param _dy dy reel - */ - public final void manualMove(final double _dx, final double _dy, final double _dz) { -// if (isGele()) { -// return; -// } - isDragged_ = false; - if (target_ != null) { - target_.moved(_dx, _dy, _dz); - repaint(); - } - } - - public final void setSpecPanel(final SpecPanel _specPanel) { - specPanel_ = _specPanel; - } - - private void updateVect() { - if (vect_ == null) { - vect_ = new GrVecteur(); - } - vect_.x_ = dx_; - vect_.y_ = dy_; - vect_.autoApplique(getVersReel()); - } - - public double getReelDx() { - updateVect(); - return vect_.x_; - - } - - public double getReelDy() { - updateVect(); - return vect_.y_; - - } - - /** - * @return true si en cours de deplacement - */ - public final boolean isDragged() { - return isDragged_; - } - - /** - * @return true si selection vide - */ - public final boolean isSelectionEmpty() { - return target_.getSupport() == null || target_.getSupport().isSelectionEmpty(); - } - - /** - * @param _select le calque de selection - */ - public ZCalqueDeplacement(final ZCalqueSelectionInteractionAbstract _select) { - super(); - selection_ = _select; - setName("cqDeplacement"); - addMouseListener(this); - addMouseMotionListener(this); - } - - public boolean alwaysPaint() { - return true; - } - - public final ZCalqueDeplacementTargetInterface getTarget() { - return target_; - } - - public void mouseClicked(final MouseEvent _e) {} - - public void mouseDragged(final MouseEvent _e) { - if (isGele()) { - isDragged_ = false; - return; - } - if (_e.isControlDown() || _e.isAltDown()) { - return; - } - dx_ = _e.getX() - initX_; - dy_ = _e.getY() - initY_; - if (!isDragged_ && (dx_ * dx_ + dy_ * dy_) > 10) { - isDragged_ = true; - } - updateSpecPanel(); - repaint(); - } - - private void updateSpecPanel() { - if (specPanel_ != null) { - specPanel_.updateState(); - } - } - - public void mouseEntered(final MouseEvent _e) { - if (isGele()) { - isDragged_ = false; - return; - } - isDragged_ = false; - repaint(); - } - - public void mouseExited(final MouseEvent _e) { - if (isGele()) { - isDragged_ = false; - return; - } - isDragged_ = false; - repaint(); - } - - public void mouseMoved(final MouseEvent _e) {} - - public void mousePressed(final MouseEvent _e) { - if (!SwingUtilities.isLeftMouseButton(_e) || EbliLib.isPopupMouseEvent(_e)) { - return; - } - if (isGele()) { - isDragged_ = false; - return; - } - initX_ = _e.getX(); - initY_ = _e.getY(); - if (state_ == null) { - state_ = new EbliSelectionState(); - } - state_.majControleDesc(_e); - final GrPoint pt = new GrPoint(initX_, initY_, 0); - pt.autoApplique(getVersReel()); - target_.getSupport().changeSelection(pt, 5, state_.getModificateur()); - updateSpecPanel(); - repaint(); - } - - EbliSelectionState state_; - - public void mouseReleased(final MouseEvent _e) { - if (!SwingUtilities.isLeftMouseButton(_e) || EbliLib.isPopupMouseEvent(_e)) { - return; - } - if (isGele()) { - isDragged_ = false; - return; - } else if (isDragged_ && target_ != null && !_e.isControlDown() && !_e.isAltDown()) { - dx_ = _e.getX() - initX_; - dy_ = _e.getY() - initY_; - target_.moved(getReelDx(), getReelDy(),0); - isDragged_ = false; - } - updateSpecPanel(); - repaint(); - } - - ZCalqueSelectionInteractionAbstract selection_; - - public void paintComponent(final Graphics _g) { - if (isGele() || target_ == null || target_.getSupport() == null) { - return; - } - if (selection_ != null && !target_.getSupport().isSelectionEmpty()) { - target_.getSupport() - .paintSelection((Graphics2D) _g, selection_.getTrace(), getVersEcran(), getClipReel(_g)); - } - if (target_ != null && isDragged_) { - target_.paintMove((Graphics2D) _g, dx_, dy_, ic_); - } - - } - - public final void setTarget(final ZCalqueDeplacementTargetInterface _target) { - if (target_ != _target) { - target_ = _target; - isDragged_ = false; - } - } -} Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java (from rev 4477, branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacement.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementInteraction.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -0,0 +1,269 @@ +/* + * @creation 4 avr. 2005 + * @modification $Date: 2008-05-13 12:10:33 $ + * @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.edition; + +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; + +import javax.swing.SwingUtilities; + +import com.memoire.bu.BuResource; + +import org.fudaa.ebli.calque.BCalqueInteraction; +import org.fudaa.ebli.calque.ZCalqueSelectionInteractionAbstract; +import org.fudaa.ebli.calque.ZCatchEvent; +import org.fudaa.ebli.calque.ZCatchListener; +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.commun.EbliSelectionState; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrVecteur; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.ebli.trace.TraceIcon; + +/** + * Un calque d'interaction d\xE9placement. + * @author Fred Deniger, Bertrand Marchand + * @version $Id: ZCalqueDeplacement.java,v 1.13.6.2 2008-05-13 12:10:33 bmarchan Exp $ + */ +public class ZCalqueDeplacementInteraction extends BCalqueInteraction implements MouseListener, MouseMotionListener, ZCatchListener { + /** + * @author fred deniger + * @version $Id: ZCalqueDeplacement.java,v 1.13.6.2 2008-05-13 12:10:33 bmarchan Exp $ + */ + public interface SpecPanel { + void updateState(); + } + SpecPanel specPanel_; + TraceIcon ic_ = new TraceIcon(TraceIcon.CARRE, 2, Color.LIGHT_GRAY); + private boolean isDragged_; + ZCalqueDeplacementTargetInterface target_; + + /** Le point d'accrochage, pass\xE9 par le calque d'accrochage */ + GrPoint ptAccroch_=null; + /** Le point d'origine */ + GrPoint ptOrig_=null; + /** Vrai si le point d'origine est accroch\xE9 */ + boolean baccrOrig_=false; + /** Vrai si le point courant est accroch\xE9 */ + boolean baccrCurrent_=false; + /** Le vecteur de deplacement, en coordonn\xE9es reelles. */ + GrVecteur vect_; + + + public final SpecPanel getSpecPanel() { + return specPanel_; + } + + public Cursor getSpecificCursor() { + return EbliResource.EBLI.getCursor("fleche-deplacement", -1, new Point(0, 0)); + } + + public String getDescription() { + return BuResource.BU.getString("D\xE9placer"); + } + + public final void setSpecPanel(final SpecPanel _specPanel) { + specPanel_ = _specPanel; + } + + public double getReelDx() { + return vect_.x_; + + } + + public double getReelDy() { + return vect_.y_; + } + + public double getReelDz() { + if (baccrCurrent_&&baccrOrig_) + return vect_.z_; + else + return 0; + } + + /** + * @return true si en cours de deplacement + */ + public final boolean isDragged() { + return isDragged_; + } + + /** + * @return true si selection vide + */ + public final boolean isSelectionEmpty() { + return target_.getSupport() == null || target_.getSupport().isSelectionEmpty(); + } + + /** + * @param _select le calque de selection + */ + public ZCalqueDeplacementInteraction(final ZCalqueSelectionInteractionAbstract _select) { + super(); + selection_ = _select; + setName("cqDeplacement"); + addMouseListener(this); + addMouseMotionListener(this); + } + + public boolean alwaysPaint() { + return true; + } + + public final ZCalqueDeplacementTargetInterface getTarget() { + return target_; + } + + public void mouseClicked(final MouseEvent _e) { + if (_e.getClickCount() >= 2) + selection_.editionAsked(); + } + + public void mouseDragged(final MouseEvent _e) { + if (isGele()) { + isDragged_ = false; + return; + } + if (_e.isControlDown() || _e.isAltDown()) { + return; + } + + baccrCurrent_=ptAccroch_!=null; + vect_=getCurrentPoint(_e).soustraction(ptOrig_); + + if (!isDragged_ && vect_.applique(getVersEcran()).norme() > 10) { + isDragged_ = true; + } + updateSpecPanel(); + repaint(); + } + + private void updateSpecPanel() { + if (specPanel_ != null) { + specPanel_.updateState(); + } + } + + public void mouseEntered(final MouseEvent _e) { + if (isGele()) { + isDragged_ = false; + return; + } + isDragged_ = false; + repaint(); + } + + public void mouseExited(final MouseEvent _e) { + if (isGele()) { + isDragged_ = false; + return; + } + isDragged_ = false; + repaint(); + } + + public void mouseMoved(final MouseEvent _e) {} + + public void mousePressed(final MouseEvent _e) { + if (!SwingUtilities.isLeftMouseButton(_e) || EbliLib.isPopupMouseEvent(_e)) { + return; + } + if (isGele()) { + isDragged_ = false; + return; + } + if (state_ == null) { + state_ = new EbliSelectionState(); + } + state_.majControleDesc(_e); + + baccrOrig_=ptAccroch_!=null; + ptOrig_=getCurrentPoint(_e); + + target_.getSupport().changeSelection(ptOrig_, 5, state_.getModificateur()); + updateSpecPanel(); + repaint(); + } + + EbliSelectionState state_; + + public void mouseReleased(final MouseEvent _e) { + if (!SwingUtilities.isLeftMouseButton(_e) || EbliLib.isPopupMouseEvent(_e)) { + return; + } + if (isGele()) { + isDragged_ = false; + return; + } + else if (isDragged_ && target_ != null && !_e.isControlDown() && !_e.isAltDown()) { + + baccrCurrent_=ptAccroch_!=null; + vect_=getCurrentPoint(_e).soustraction(ptOrig_); + + target_.moved(vect_.x_, vect_.y_, baccrOrig_&&baccrCurrent_?vect_.z_:0,true); + isDragged_ = false; + } + updateSpecPanel(); + repaint(); + } + + /** + * Retourne le point courant, qui peut \xEAtre un point d'accrochage. + * @param _e L'evenement souris + * @return Le point courant. + */ + private GrPoint getCurrentPoint(MouseEvent _e) { + GrPoint pt; + if (ptAccroch_!=null) { + pt=ptAccroch_; + } + else { + pt=new GrPoint(_e.getX(),_e.getY(),0); + pt.autoApplique(getVersReel()); + } + return pt; + } + + ZCalqueSelectionInteractionAbstract selection_; + + public void paintComponent(final Graphics _g) { + if (isGele() || target_ == null || target_.getSupport() == null) { + return; + } + if (selection_ != null && !target_.getSupport().isSelectionEmpty()) { + target_.getSupport() + .paintSelection((Graphics2D) _g, selection_.getTrace(), getVersEcran(), getClipReel(_g)); + } + if (target_ != null && isDragged_) { + GrVecteur vct=vect_.applique(getVersEcran()); + target_.paintMove((Graphics2D) _g, (int)vct.x_,(int)vct.y_, ic_); + } + + } + + public final void setTarget(final ZCalqueDeplacementTargetInterface _target) { + if (target_ != _target) { + target_ = _target; + isDragged_ = false; + } + } + + public void catchChanged(ZCatchEvent _evt) { + if (_evt.type==ZCatchEvent.CAUGHT) + ptAccroch_=_evt.selection.getScene().getVertex(_evt.idxGeom,_evt.idxVertex); + else + ptAccroch_=null; + } +} Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementPanel.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementPanel.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -35,11 +35,11 @@ * @version $Id: ZCalqueDeplacementPanel.java,v 1.6.8.2 2008-02-21 15:18:29 bmarchan Exp $ */ public class ZCalqueDeplacementPanel extends JPanel implements ZEditorPanelInterface, - ZCalqueDeplacement.SpecPanel, ActionListener { + ZCalqueDeplacementInteraction.SpecPanel, ActionListener { JButton btApply_; - final ZCalqueDeplacement deplacement_; + final ZCalqueDeplacementInteraction deplacement_; EbliFormatterInterface formatter_; @@ -53,7 +53,7 @@ * @param _deplacement le calque de deplacement * @param _formatter */ - public ZCalqueDeplacementPanel(final ZCalqueDeplacement _deplacement, + public ZCalqueDeplacementPanel(final ZCalqueDeplacementInteraction _deplacement, final EbliFormatterInterface _formatter) { super(); @@ -100,7 +100,7 @@ Double dz=new Double(0); if (tfDz_.isEnabled()) dz=(Double) tfDz_.getValue(); if (dx != null && dy != null && dz!=null) { - deplacement_.manualMove(dx.doubleValue(), dy.doubleValue(), dz.doubleValue()); + deplacement_.getTarget().moved(dx.doubleValue(), dy.doubleValue(), dz.doubleValue(),false); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementTargetInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementTargetInterface.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDeplacementTargetInterface.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -30,11 +30,13 @@ /** + * Translate les objets. * @param _dx le dx reel * @param _dy le dy reel * @param _dz le dz reel. S'applique au Z attribut du calque support. + * @param _confirmOnZ true : Pour demander \xE0 l'utilisateur de confirmer le d\xE9placement suivant Z. */ - void moved(double _dx,double _dy, double _dz); + void moved(double _dx,double _dy, double _dz, boolean _confirmOnZ); /** * @return le calque contenant la selection Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -113,7 +113,7 @@ protected ZSceneEditor sceneEditor_=null; - ZCalqueDeplacement move_; + ZCalqueDeplacementInteraction move_; ZCalqueClickInteraction nodeAdd_; @@ -247,9 +247,9 @@ return "GLOBAL_MOVE".equals(state_); } - private ZCalqueDeplacement buildDeplacement() { + private ZCalqueDeplacementInteraction buildDeplacement() { if (move_ == null) { - move_ = new ZCalqueDeplacement(panel_.getCqSelectionI()); + move_ = new ZCalqueDeplacementInteraction(panel_.getCqSelectionI()); move_.addPropertyChangeListener("gele", this); panel_.addCalqueInteraction(move_); move_.setTarget(this); @@ -616,18 +616,14 @@ } } - public void moved(final double _dx, final double _dy, final double _dz) { + public void moved(double _dx, double _dy, double _dz, boolean _confirmOnZ) { + if (_confirmOnZ && _dz!=0 && + !ui_.question(EbliLib.getS("Accroche suivant Z"), + EbliLib.getS("Voulez vous translater les objets\ns\xE9lectionn\xE9s suivant DZ={0} ?", + getXYFormatter().getXYFormatter().format(_dz)))) + _dz=0; + sceneEditor_.moveSelectedObjects(_dx, _dy, _dz); -// ZCalqueEditable[] cqs=getSupport().getEditableLayers(); -// final CtuluCommandComposite cmp = new CtuluCommandComposite(); -// for (int i=0; i<cqs.length; i++) { -// if (/*target_ != null && */(_dx != 0 || _dy != 0 || _dz!=0)) { -// cqs[i].moveSelectedObjects(_dx, _dy, _dz, cmp, ui_); -// } -// } -// if (mng_ != null) { -// mng_.addCmd(cmp.getSimplify()); -// } } public void paintMove(final Graphics2D _g, final int _dx, final int _dy, final TraceIcon _ic) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -29,7 +29,7 @@ import org.fudaa.ebli.calque.action.SceneSelectNextAction; import org.fudaa.ebli.calque.action.SceneSelectPreviousAction; import org.fudaa.ebli.calque.action.SceneShowDistanceAction; -import org.fudaa.ebli.calque.edition.ZCalqueDeplacement; +import org.fudaa.ebli.calque.edition.ZCalqueDeplacementInteraction; import org.fudaa.ebli.calque.edition.ZCalqueEditionGroup; import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.commun.EbliActionInterface; @@ -92,10 +92,10 @@ return cq; } - protected ZCalqueDeplacement getCalqueDeplacement() { - ZCalqueDeplacement cqDep=null; - if ((cqDep=(ZCalqueDeplacement)getVueCalque().getCalque().getCalqueParNom("cqDeplacement"))==null) { - cqDep=new ZCalqueDeplacement(getCqSelectionI()); + protected ZCalqueDeplacementInteraction getCalqueDeplacement() { + ZCalqueDeplacementInteraction cqDep=null; + if ((cqDep=(ZCalqueDeplacementInteraction)getVueCalque().getCalque().getCalqueParNom("cqDeplacement"))==null) { + cqDep=new ZCalqueDeplacementInteraction(getCqSelectionI()); this.addCalqueInteraction(cqDep); cqDep.setGele(true); cqDep.setTarget(getEditor()); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java 2009-02-16 21:23:26 UTC (rev 4477) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java 2009-02-17 16:34:47 UTC (rev 4478) @@ -38,7 +38,7 @@ import org.fudaa.ebli.calque.ZModeleStatiqueImageRaster; import org.fudaa.ebli.calque.ZScene; import org.fudaa.ebli.calque.action.CalqueActionInteraction; -import org.fudaa.ebli.calque.edition.ZCalqueDeplacement; +import org.fudaa.ebli.calque.edition.ZCalqueDeplacementInteraction; import org.fudaa.ebli.calque.edition.ZCalqueDeplacementTargetInterface; import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.ebli.commun.EbliComponentFactory; @@ -145,7 +145,7 @@ tb.add(tbTool); center.add(tb, BuBorderLayout.NORTH); add(center, BuBorderLayout.CENTER); - final ZCalqueDeplacement move = new ZCalqueDeplacement(pn_.getCqSelectionI()); + final ZCalqueDeplacementInteraction move = new ZCalqueDeplacementInteraction(pn_.getCqSelectionI()); move.setGele(true); pn_.addCalqueInteraction(move); move.setTarget(new ZCalqueDeplacementTargetInterface() { @@ -155,7 +155,7 @@ } - public void moved(final double _dx, final double _dy, double _dz) { + public void moved(final double _dx, final double _dy, double _dz, boolean _confirmOnZ) { controller.getCalageCalque().moveSelectedObjects(_dx, _dy, _dz, control_.getMng(), control_.getUi()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-02-19 09:29:46
|
Revision: 4485 http://fudaa.svn.sourceforge.net/fudaa/?rev=4485&view=rev Author: bmarchan Date: 2009-02-19 09:29:35 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Export vers Rubar : Prise en compte correcte des fichiers de semis. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuFileFilter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuFileFilter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuFileFilter.java 2009-02-19 08:32:57 UTC (rev 4484) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuFileFilter.java 2009-02-19 09:29:35 UTC (rev 4485) @@ -48,7 +48,7 @@ filters_ = new Hashtable(_filters.length); for (int i = 0; i < _filters.length; i++) addExtension(_filters[i]); - setDescription(_description); + setShortDescription(_description); } protected String _(String _s) { @@ -118,7 +118,19 @@ return fullDescription_; } - public void setDescription(String _description) { + /** + * Retourne la description, sans les extensions. + * @return La description + */ + public String getShortDescription() { + return description_; + } + + /** + * Definit la description, sans les extensions. + * @param _description La description. + */ + public void setShortDescription(String _description) { description_ = _description; fullDescription_ = null; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java 2009-02-19 08:32:57 UTC (rev 4484) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java 2009-02-19 09:29:35 UTC (rev 4485) @@ -26,7 +26,7 @@ extensions_ = new String[] { "sem" }; super.description_ = H2dResource.getS("Fichier de semis de points"); super.id_ = "RUBAR_SEM"; - super.nom_ = "Rubar Sem"; + super.nom_ = "Rubar semis"; } public FileReadOperationAbstract createReader() { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-02-19 08:32:57 UTC (rev 4484) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-02-19 09:29:35 UTC (rev 4485) @@ -52,6 +52,8 @@ CtuluUI ui_; BuFileFilter selectedFilter_=null; Map<BuFileFilter, FSigLayerExporter> filter2Exporter_; + /** Le filtre de fichier pour Rubar */ + BuFileFilter fltRubar_; public MdlProjectExportPanel(CtuluUI _ui) { ui_=_ui; @@ -92,12 +94,12 @@ private BuFileFilter[] buildFilter2Export() { final BuFileFilter sx = SinusxFileFormat.getInstance().createFileFilter(); - final BuFileFilter st = RubarStCnFileFormat.createStFilter(); + fltRubar_=new BuFileFilter(new String[]{"cn","st","sem"},"Rubar"); final BuFileFilter dunes= DunesGEOFileFormat.getInstance().createFileFilter(); filter2Exporter_ = new HashMap<BuFileFilter, FSigLayerExporter>(5);// pour l'instant ..... filter2Exporter_.put(sx, new FSigLayerExporter.ToSinusX()); - filter2Exporter_.put(st, new FSigLayerExporter.ToRubar()); + filter2Exporter_.put(fltRubar_, new FSigLayerExporter.ToRubar()); filter2Exporter_.put(dunes, new FSigLayerExporter.ToDunes()); filters_ = new BuFileFilter[filter2Exporter_.size()]; @@ -125,33 +127,43 @@ setErrorText(CtuluLib.getS("Ne mettez pas plusieurs '.' dans le nom.")); return false; } - String result=""; + String s=""; + int nbFiles=0; - if (f.exists()){ - result+=f.getName(); - nbFiles++; - } - String name=CtuluLibFile.getSansExtension(f.getName()); - // Test sur l'existence des fichier. Dans le cas d'un enregistrement en - // rubar, il faut aussi tester avec les extensions .sem et .cn et aussi <nom>_autres.st - if (CtuluLibFile.getExtension(f.getName()).equalsIgnoreCase("st")) { + + // Dans le cas d'un export vers Rubar, il faut aussi tester avec les extensions .sem et .cn et aussi <nom>_autres.st + if (selectedFilter_==fltRubar_) { + String name=CtuluLibFile.getSansExtension(f.getName()); if ((new File(f.getParent()+File.separatorChar+name+".sem")).exists()) { - result+=(result.length()!=0 ? ", ":"")+name+".sem"; + s+=(s.length()!=0 ? ", ":"")+name+".sem"; nbFiles++; } + if ((new File(f.getParent()+File.separatorChar+name+".st")).exists()) { + s+=(s.length()!=0 ? ", ":"")+name+".st"; + nbFiles++; + } if ((new File(f.getParent()+File.separatorChar+name+".cn")).exists()) { - result+=(result.length()!=0 ? ", ":"")+name+".cn"; + s+=(s.length()!=0 ? ", ":"")+name+".cn"; nbFiles++; } if ((new File(f.getParent()+File.separatorChar+name+"_autres.st")).exists()) { - result+=(result.length()!=0 ? ", ":"")+name+"_autres.st"; + s+=(s.length()!=0 ? ", ":"")+name+"_autres.st"; nbFiles++; } } + else { + if (f.exists()){ + s+=f.getName(); + nbFiles++; + } + } + if (nbFiles>0) - if(nbFiles==1&&!ui_.question(CtuluLib.getS("Attention"), CtuluLib.getS("Le fichier {0} existe d\xE9j\xE0. Voulez-vous l'\xE9craser?", result))) + if(nbFiles==1&&!ui_.question(CtuluLib.getS("Export {0}",selectedFilter_.getShortDescription()), + CtuluLib.getS("Le fichier {0} existe d\xE9j\xE0. Voulez-vous l'\xE9craser?", s))) return false; - else if(nbFiles>1&&!ui_.question(CtuluLib.getS("Attention"), CtuluLib.getS("Les fichiers {0} existent d\xE9j\xE0. Voulez-vous les \xE9craser?", result))) + else if(nbFiles>1&&!ui_.question(CtuluLib.getS("Export {0}",selectedFilter_.getShortDescription()), + CtuluLib.getS("Les fichiers {0} existent d\xE9j\xE0. Voulez-vous les \xE9craser?", s))) return false; setErrorText(null); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-02-19 08:33:04
|
Revision: 4484 http://fudaa.svn.sourceforge.net/fudaa/?rev=4484&view=rev Author: bmarchan Date: 2009-02-19 08:32:57 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Tache #149 : Export des donn?\195?\169es Bief au format Rubar st. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStCnFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/Controller1d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarSt.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO1dFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO2dFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/Exporter1d.java Removed Paths: ------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java 2009-02-18 20:47:31 UTC (rev 4483) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java 2009-02-19 08:32:57 UTC (rev 4484) @@ -1,38 +0,0 @@ -/* - * @creation 13 nov. 2008 - * @modification $Date$ - * @license GNU General Public License 2 - * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.dodico.mascaret.io; - -import org.fudaa.ctulu.fileformat.FileFormatUnique; -import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; -import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; - -/** - * @author Emmanuel MARTIN - * @version $Id$ - */ -public class MascaretFileFormat extends FileFormatUnique { - - public MascaretFileFormat() { - super(1); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.fileformat.FileFormatVersionInterface#createReader() - */ - public FileReadOperationAbstract createReader() { - return new MascaretReader(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.fileformat.FileFormatVersionInterface#createWriter() - */ - public FileWriteOperationAbstract createWriter() { - return null; - } - -} Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO1dFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO1dFileFormat.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO1dFileFormat.java 2009-02-19 08:32:57 UTC (rev 4484) @@ -0,0 +1,46 @@ +/* + * @creation 13 nov. 2008 + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.dodico.mascaret.io; + +import org.fudaa.ctulu.fileformat.FileFormatUnique; +import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; +import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; +import org.fudaa.dodico.commun.DodicoLib; +import org.fudaa.dodico.h2d.resource.H2dResource; + +/** + * Un format pour Mascaret 1D (sans coordonn\xE9es g\xE9or\xE9f\xE9renc\xE9es). + * @author Bertrand Marchand + * @version $Id$ + */ +public class MascaretGEO1dFileFormat extends FileFormatUnique { + + private MascaretGEO1dFileFormat() { + super(1); + nom_ = DodicoLib.getS("Mascaret profils 1d"); + description_ = H2dResource.getS("Fichier contenant des profils 1D"); + extensions_=new String[]{"geo"}; + } + + static final MascaretGEO1dFileFormat INSTANCE = new MascaretGEO1dFileFormat(); + + /** + * @return singleton + */ + public static MascaretGEO1dFileFormat getInstance() { + return INSTANCE; + } + + public FileReadOperationAbstract createReader() { + return null; + } + + public FileWriteOperationAbstract createWriter() { + return new MascaretGEOWriter(true); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO1dFileFormat.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO2dFileFormat.java (from rev 4481, branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO2dFileFormat.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEO2dFileFormat.java 2009-02-19 08:32:57 UTC (rev 4484) @@ -0,0 +1,45 @@ +/* + * @creation 13 nov. 2008 + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.dodico.mascaret.io; + +import org.fudaa.ctulu.fileformat.FileFormatUnique; +import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; +import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; +import org.fudaa.dodico.commun.DodicoLib; +import org.fudaa.dodico.h2d.resource.H2dResource; +import org.fudaa.dodico.reflux.io.ReflucadBERFileFormat; + +/** + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class MascaretGEO2dFileFormat extends FileFormatUnique { + + public MascaretGEO2dFileFormat() { + super(1); + nom_ = DodicoLib.getS("Mascaret profils 2d"); + description_ = H2dResource.getS("Fichier contenant des profils g\xE9or\xE9f\xE9renc\xE9s"); + extensions_=new String[]{"georef"}; + } + static final MascaretGEO2dFileFormat INSTANCE = new MascaretGEO2dFileFormat(); + + /** + * @return singleton + */ + public static MascaretGEO2dFileFormat getInstance() { + return INSTANCE; + } + + public FileReadOperationAbstract createReader() { + return new MascaretGEOReader(); + } + + public FileWriteOperationAbstract createWriter() { + return new MascaretGEOWriter(false); + } + +} Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOReader.java (from rev 4481, branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOReader.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOReader.java 2009-02-19 08:32:57 UTC (rev 4484) @@ -0,0 +1,250 @@ +/* + * @creation 13 nov. 2008 + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.dodico.mascaret.io; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.fudaa.ctulu.CtuluAnalyze; +import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; +import org.fudaa.ctulu.fileformat.FortranInterface; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISPolyligne; +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.dodico.commun.DodicoLib; + +import com.vividsolutions.jts.geom.impl.CoordinateArraySequence; + +/** + * Parser du format Mascaret. (versions 6.0 et pr\xE9c\xE9dentes) + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class MascaretGEOReader extends FileReadOperationAbstract { + + /** Exception lev\xE9e quand une probl\xE8me est trouv\xE9 pendant le parsing. */ + private class ParseError extends Exception{ + public ParseError(String _message){ + super(_message); + } + } + + /** Le fichier \xE0 lire */ + private FileReader rawData_; + private String fileName_; + /** Les caract\xE8res de 's\xE9paration' */ + private char[] charSeparation_=new char[]{' ', '\t'}; + private char charSeparationNewLigne_='\n'; + /** Profiles extraits */ + List<MascaretProfilAbstractRepresentation> profils_=new ArrayList<MascaretProfilAbstractRepresentation>(); + + public MascaretGEOReader() { + rawData_=null; + } + + /** + * Retourne vrai si _element est dans _tabElements + * @param _element + * @param _tabElements + * @return retourne vrai si _element est dans _tabElements + */ + private boolean in(final char _element, final char[] _tabElements){ + boolean found=false; + int i=-1; + while(!found&&++i<_tabElements.length) + found=_element==_tabElements[i]; + return found; + } + + /** + * @return token dont le caract\xE8re de s\xE9paration est le retour \xE0 la ligne. Null si rien \xE0 lire. + */ + private StringBuffer nextLineToken(){ + StringBuffer token=new StringBuffer(); + int currentRawChar; + try { + currentRawChar=rawData_.read(); + // Lecture du token : lecture tant qu'un caract\xE8re de s\xE9paration n'est pas + // trouv\xE9. + while (currentRawChar!=-1&&((char)currentRawChar)!=charSeparationNewLigne_) { + token.append((char)currentRawChar); + currentRawChar=rawData_.read(); + } + } + catch (IOException _exc) { + // Erreur dans un des rawData_.read() + _exc.printStackTrace(); + } + // Retour du token + return token.length()==0 ? null:token; + } + + /** + * Retourne le token suivant dans le flux (liste de caract\xE8re jusqu'au + * caract\xE8re de s\xE9paration suivant). + * @return le token ou null si il n'y en a pas. + */ + private String nextWordToken(StringBuffer _lineToken) { + StringBuffer token=new StringBuffer(); + // Elimination des caract\xE8res de s\xE9paration avant le token + while (_lineToken.length()>0&&in(_lineToken.charAt(0), charSeparation_)) + _lineToken.deleteCharAt(0); + // Lecture du token : lecture tant qu'un caract\xE8re de s\xE9paration n'est pas + // trouv\xE9. + while (_lineToken.length()>0&&!in(_lineToken.charAt(0), charSeparation_)) { + token.append(_lineToken.charAt(0)); + _lineToken.deleteCharAt(0); + } + // Retour du token + return token.toString().length()==0 ? null:token.toString(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.fileformat.FileReadOperationAbstract#internalRead() + */ + @Override + protected Object internalRead() { + try { + StringBuffer lineToken=nextLineToken(); + if(lineToken==null) + throw new ParseError(fileName_+DodicoLib.getS(" : le fichier est vide.")); + /* + * Boucle principale : une it\xE9ration par profil + */ + String token=nextWordToken(lineToken); + while (lineToken!=null&&token.equalsIgnoreCase("profil")) { + MascaretProfilAbstractRepresentation profil=new MascaretProfilAbstractRepresentation(); + + // Premi\xE8re ligne \\ + // Extraction des informations commune \xE0 1d et 2d + profil.nomBief=nextWordToken(lineToken); + profil.nomProfil=nextWordToken(lineToken); + profil.abscisseCurvilingeAxeHydraulique=Double.parseDouble(nextWordToken(lineToken)); + // Coordonn\xE9es de trace de profile : non pr\xE9sent dans les fichiers 1d + token=nextWordToken(lineToken); + while (token!=null&&!token.equals("AXE")) { + profil.coordXYTraceProfil.add(new double[]{Double.parseDouble(token), Double.parseDouble(nextWordToken(lineToken))}); + token=nextWordToken(lineToken); + } + // Coordonn\xE9e d'intersection du profile et de l'axe hydraulique + if (token!=null&&token.equals("AXE")) + profil.coordIntersectionAxeHydraulique=new double[]{Double.parseDouble(nextWordToken(lineToken)), + Double.parseDouble(nextWordToken(lineToken))}; + + // Lignes suivantes : coordonn\xE9es du profile \\ + lineToken=nextLineToken(); + while (lineToken!=null&&!(token=nextWordToken(lineToken)).equalsIgnoreCase("profil")) { + profil.coordCurviligneProfil.add(Double.parseDouble(token)); + profil.coordZ.add(Double.parseDouble(nextWordToken(lineToken))); + profil.bathyOuTopoOuStockage.add(nextWordToken(lineToken).charAt(0)); + // Coordonn\xE9es XY : non pr\xE9sent dans les fichiers 1d + token=nextWordToken(lineToken); + if (token!=null) + profil.coordXYProfil.add(new double[]{Double.parseDouble(token), Double.parseDouble(nextWordToken(lineToken))}); + lineToken=nextLineToken(); + } + // Verification de la coh\xE9rance des informations + if (profil.is1d()) + throw new ParseError(fileName_+DodicoLib.getS(" : les profils 1D ne sont pas g\xE9r\xE9s")); + else if (!(profil.is2d()&&profil.check2D())) + throw new ParseError(fileName_+DodicoLib.getS(" : le fichier source comporte des erreurs.")); + // Ajout du profile \xE0 la liste et traitement du profile suivant + profils_.add(profil); + } + // G\xE9n\xE9ration d'un GISZoneCollection avec les informations extraites et + // retour de celle-ci + return generateGIS(); + } + catch (ParseError _exc) { + analyze_.addFatalError(_exc.getMessage()); + } + catch (NumberFormatException _exc){ + analyze_.addFatalError(fileName_+DodicoLib.getS(" : le fichier source comporte des erreurs.")); + } + catch (NullPointerException _exc){ + analyze_.addFatalError(fileName_+DodicoLib.getS(" : le fichier source comporte des erreurs.")); + } + return null; + } + + private GISZoneCollectionLigneBrisee generateGIS(){ + progress_.setDesc(DodicoLib.getS("Lecture de ")+fileName_); + // Cr\xE9ation de la GISZoneCollectionLigneBrisee + GISZoneCollectionLigneBrisee zone=new GISZoneCollectionLigneBrisee(); + zone.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.NATURE, GISAttributeConstants.BATHY}, null); + // G\xE9n\xE9ration des profiles et des traces de profiles \\ + for(int k=0;k<profils_.size();k++){ + progress_.setProgression((int)((float)k/profils_.size()*100)); + MascaretProfilAbstractRepresentation profil=profils_.get(k); + CoordinateArraySequence coordSeq=new CoordinateArraySequence(profil.coordXYTraceProfil.size()); + // Trace profil + for(int i=0;i<profil.coordXYTraceProfil.size();i++){ + coordSeq.setOrdinate(i, 0, profil.coordXYTraceProfil.get(i)[0]); + coordSeq.setOrdinate(i, 1, profil.coordXYTraceProfil.get(i)[1]); + coordSeq.setOrdinate(i, 2, 0); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_TP, null}, null); + // Profil + coordSeq=new CoordinateArraySequence(profil.coordXYProfil.size()); + Object[] z=new Object[profil.coordXYProfil.size()]; + for(int i=0;i<profil.coordXYProfil.size();i++){ + coordSeq.setOrdinate(i, 0, profil.coordXYProfil.get(i)[0]); + coordSeq.setOrdinate(i, 1, profil.coordXYProfil.get(i)[1]); + coordSeq.setOrdinate(i, 2, 0); + z[i]=profil.coordZ.get(i); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_PF, z}, null); + } + if (profils_.size()>1) { + // G\xE9n\xE9ration de l'axe hydraulique \\ + CoordinateArraySequence coordSeq=new CoordinateArraySequence(profils_.size()); + for (int i=0; i<profils_.size(); i++) { + coordSeq.setOrdinate(i, 0, profils_.get(i).coordIntersectionAxeHydraulique[0]); + coordSeq.setOrdinate(i, 1, profils_.get(i).coordIntersectionAxeHydraulique[1]); + coordSeq.setOrdinate(i, 2, 0); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{null, GISAttributeConstants.ATT_NATURE_AH, null}, null); + } + else + analyze_.addInfo(fileName_+DodicoLib.getS(" : le fichier ne comporte qu'un profil, aucun axe hydraulique ne sera g\xE9n\xE9r\xE9.")); + return zone; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.fileformat.FileOperationAbstract#getFortranInterface() + */ + @Override + protected FortranInterface getFortranInterface() { + return new FortranInterface() { + public void close() throws IOException{ + if (rawData_ != null) + rawData_.close(); + } + }; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.fileformat.FileOperationAbstract#setFile(java.io.File) + */ + @Override + public void setFile(File _f) { + fileName_=_f.getName(); + analyze_ = new CtuluAnalyze(); + analyze_.setResource(_f.getAbsolutePath()); + try { + rawData_=new FileReader(_f); + } + catch (FileNotFoundException _exc) { + } + } + +} Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOWriter.java (from rev 4481, branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOWriter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretGEOWriter.java 2009-02-19 08:32:57 UTC (rev 4484) @@ -0,0 +1,465 @@ +/* + * @creation 19 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.dodico.mascaret.io; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.fudaa.ctulu.CtuluAnalyze; +import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; +import org.fudaa.ctulu.fileformat.FortranInterface; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeModelDoubleInterface; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISPolyligne; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.dodico.commun.DodicoLib; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Ecrit au format mascaret 1d ou 2d. + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class MascaretGEOWriter extends FileWriteOperationAbstract { + + /** Le flux de sorti. */ + private Writer out_; + /** Les profils \xE0 \xE9crire. */ + private MascaretProfilAbstractRepresentation[] profils_; + /** Type du fichier mascaret de destination 1D ou 2D. */ + private boolean is1D_=true; + + /** + * Cette classe permet \xE0 l'exporteur de selectionner les + * profils \xE0 exporter. G\xE9n\xE9ralement les profiles invalides sont ignor\xE9s. + * @author Emmanuel MARTIN + * @version $Id$ + */ + public interface FunctorSelectProfil { + public boolean exportProfil(GISZoneCollection _zone, int _idxProfil); + } + + public MascaretGEOWriter(boolean _is1D) { + is1D_=_is1D; + } + + /** + * L'argument doit \xEAtre un tableau contenant : + * 0 : string : le nom du bief + * 1 : GISZoneCollectionLigneBrisee[] : les zones dans lesquelles trouver les g\xE9om\xE9tries + * 2 : FunctorSelectProfil : pour selectionner les profils \xE0 exporter + * + * On passe en param\xE8tre les diff\xE9rentes GISZoneCollectionLigneBrisee qui + * contiennent les g\xE9om\xE9tries n\xE9c\xE9ssaires \xE0 l'exportation. Ces zone peuvent + * contenir des g\xE9om\xE9tries incompatible avec l'export (comme des polygones), + * elles seront simplement ignor\xE9es. Dans le cas o\xF9 des g\xE9om\xE9tries manqueront, + * une exception du type MascaretDataIncomplete est lev\xE9e. Les profils invalides + * sont \xE9galements ignor\xE9s. Si certaines donn\xE9es sont incoh\xE9rentes une exception + * du type MascaretDataError est lev\xE9e. La version du fichier de destination ('1d' + * ou '2d'). Si un des trois param\xE8tres est null une exception de type + * {@link IllegalArgumentException} est lev\xE9e. + */ + @Override + protected void internalWrite(Object _o) { + try { + if(((Object[])_o).length!=3) + throw new IllegalArgumentException("Il doit y avoir 3 param\xE8tres dans _o."); + String nomBief=(String)((Object[])_o)[0]; + GISZoneCollection[] zones=(GISZoneCollection[])((Object[])_o)[1]; + FunctorSelectProfil selectorProfil=(FunctorSelectProfil)((Object[])_o)[2]; + if (nomBief==null) + throw new IllegalArgumentException("nomBief ne doit pas \xEAtre null"); + if (zones==null) + throw new IllegalArgumentException("zones mustn't be null"); + generateMascaretProfilAbstractRepresentations(nomBief, zones, selectorProfil); + + for (int i=0; i<profils_.length; i++) { + MascaretProfilAbstractRepresentation profil=profils_[i]; + // Premi\xE8re ligne + out_.write("Profil "+profil.nomBief+" "+profil.nomProfil+" "+profil.abscisseCurvilingeAxeHydraulique); + if (is1D_) + out_.write('\n'); + else { + out_.write(' '); + for (int j=0; j<profil.coordXYTraceProfil.size(); j++) { + out_.write(profil.coordXYTraceProfil.get(j)[0]+" "); + out_.write(profil.coordXYTraceProfil.get(j)[1]+" "); + } + out_.write("AXE "+profil.coordIntersectionAxeHydraulique[0]+" "+profil.coordIntersectionAxeHydraulique[1]); + out_.write('\n'); + } + // Les autres lignes + for (int j=0; j<profil.coordXYProfil.size(); j++) { + out_.write(profil.coordCurviligneProfil.get(j)+" "+profil.coordZ.get(j)+" "+profil.bathyOuTopoOuStockage.get(j)); + if (is1D_) + out_.write('\n'); + else + out_.write(" "+profil.coordXYProfil.get(j)[0]+" "+profil.coordXYProfil.get(j)[1]+"\n"); + } + } + } + catch (Exception _exp) { + analyze_.manageException(_exp); + } + } + + @Override + protected FortranInterface getFortranInterface() { + return new FortranInterface() { + public void close() throws IOException { + if (out_ != null) { + out_.close(); + } + } + }; + } + + @Override + public void setFile(File _f) { + analyze_ = new CtuluAnalyze(); + analyze_.setResource(_f.getAbsolutePath()); + FileWriter out = null; + try { + out = new FileWriter(_f); + } catch (final IOException _e) { + analyze_.manageException(_e); + } + if (out != null) { + out_ = out; + } + } + + /** + * G\xE9n\xE8re les repr\xE9sentatino interm\xE9diaires des profils. + * @param zones_ + * @throws MascaretDataError + * @throws MascaretDataIncomplete + */ + private void generateMascaretProfilAbstractRepresentations(String _nomBief, GISZoneCollection[] _zones, FunctorSelectProfil _selectorProfil) throws MascaretDataError, MascaretDataIncomplete{ + // Recherche de l'axe hydraulique \\ + GISZoneCollection zoneAxeHydraulique=null; + int indexAxeHydraulique=-1; + for (int i=0; i<_zones.length; i++) { + int idxAttNature=_zones[i].getIndiceOf(GISAttributeConstants.NATURE); + if (idxAttNature!=-1) + for (int j=0; j<_zones[i].getNbGeometries(); j++) + if (_zones[i].getValue(idxAttNature, j)==GISAttributeConstants.ATT_NATURE_AH) + if (zoneAxeHydraulique==null) { + zoneAxeHydraulique=_zones[i]; + indexAxeHydraulique=j; + } + else + throw new MascaretDataError("Il existe plusieurs axes hydrauliques."); + } + if(zoneAxeHydraulique==null) + throw new MascaretDataIncomplete("Il n'y a pas d'axes hydrauliques."); + + // Recherche des profils \\ + List<GISZoneCollection> profils=new ArrayList<GISZoneCollection>(); + List<Integer> indexProfils=new ArrayList<Integer>(); + int nbProfilNotKeep=0; + for (int i=0; i<_zones.length; i++) { + int idxAttNature=_zones[i].getIndiceOf(GISAttributeConstants.NATURE); + if (idxAttNature!=-1) + for (int j=0; j<_zones[i].getNbGeometries(); j++) + if (_zones[i].getValue(idxAttNature, j)==GISAttributeConstants.ATT_NATURE_PF) { + if(_selectorProfil.exportProfil(_zones[i], j)) { + profils.add(_zones[i]); + indexProfils.add(j); + } + else + nbProfilNotKeep++; + } + } + if (nbProfilNotKeep>0) + analyze_.addWarn(DodicoLib.getS("{0} profils sur {1} n'ont pas \xE9t\xE9 export\xE9s car ils ne sont pas conformes",""+nbProfilNotKeep,""+(indexProfils.size()+nbProfilNotKeep)), -1); + else + analyze_.addInfo(DodicoLib.getS("{0} profils ont \xE9t\xE9 export\xE9s",""+(indexProfils.size()+nbProfilNotKeep))); + + + // G\xE9n\xE9ration des MascaretProfilAbstractRepresentations \\ + profils_=new MascaretProfilAbstractRepresentation[profils.size()]; + int countNoName=1; + GISPolyligne axeHydraulique=(GISPolyligne)zoneAxeHydraulique.getGeometry(indexAxeHydraulique); + for (int i=0;i<profils.size();i++) { + GISZoneCollection zoneProfil=profils.get(i); + int idxProfil=indexProfils.get(i); + GISPolyligne profil=(GISPolyligne) zoneProfil.getGeometry(idxProfil); + MascaretProfilAbstractRepresentation profilAbs=new MascaretProfilAbstractRepresentation(); + + // Information globales sur le profil \\ + // Nom bief + profilAbs.nomBief=_nomBief.replace(' ', '_'); + // Nom profil + int idxTitle=zoneProfil.getIndiceOf(GISAttributeConstants.TITRE); + if(idxTitle!=-1){ + String nomProfil=(String) zoneProfil.getValue(idxTitle, idxProfil); + profilAbs.nomProfil=nomProfil.replace(' ', '_'); + } + else + profilAbs.nomProfil="No_Name_"+countNoName++; + // Intersection axe hydraulique + Geometry intersection=axeHydraulique.intersection(profil); + if(intersection.getNumPoints()!=1) + throw new MascaretDataError("Un profil \xE0 plusieurs ou aucun point(s) d'intersection(s) avec l'axe hydraulique."); + profilAbs.coordIntersectionAxeHydraulique=new double[]{intersection.getCoordinate().x, intersection.getCoordinate().y}; + // Abscisse curviligne axe hydraulique + int idxAttrCommHydraulique=zoneProfil.getIndiceOf(GISAttributeConstants.COMMENTAIRE_HYDRO); + if(idxAttrCommHydraulique==-1) + throw new MascaretDataError("L'attribut COMMENTAIRE_HYDRO doit \xEAtre pr\xE9sent."); + String comm=(String) zoneProfil.getValue(idxAttrCommHydraulique, idxProfil); + if(!GISLib.isHydroCommentValued(comm, "PK")) + throw new MascaretDataError("La propri\xE9t\xE9 PK de COMMENTAIRE_HYDRO doit \xEAtre valu\xE9e."); + profilAbs.abscisseCurvilingeAxeHydraulique=GISLib.getHydroCommentDouble(comm, "PK"); + CoordinateSequence coordSeq=axeHydraulique.getCoordinateSequence(); + // Trace profil + coordSeq=profil.getCoordinateSequence(); + Coordinate coord[]=getPointsRuptures(coordSeq); + profilAbs.coordXYTraceProfil.add(new double[]{coordSeq.getX(0), coordSeq.getY(0)}); + for(int j=0;j<coord.length;j++) + profilAbs.coordXYTraceProfil.add(new double[]{coord[j].x, coord[j].y}); + profilAbs.coordXYTraceProfil.add(new double[]{coordSeq.getX(coordSeq.size()-1), coordSeq.getY(coordSeq.size()-1)}); + + // Information atomiques sur le profil \\ + coordSeq=profil.getCoordinateSequence(); + int idxZ=zoneProfil.getIndiceOf(zoneProfil.getAttributeIsZ()); + for(int j=0;j<profil.getNumPoints();j++){ + // Valeur curviligne + profilAbs.coordCurviligneProfil.add(absCurv(coordSeq, j)); + // Coordonn\xE9es X Y + profilAbs.coordXYProfil.add(new double[]{coordSeq.getCoordinate(j).x, coordSeq.getCoordinate(j).y}); + // Coordinate Z + if(idxZ!=-1) + profilAbs.coordZ.add(((GISAttributeModelDoubleInterface)zoneProfil.getValue(idxZ, idxProfil)).getValue(j)); + } + // Extraction des valeurs d'intersection + ArrayList<Integer> seps=new ArrayList<Integer>(); + //INTERSECTION_RIVE_GAUCHE + int idxInterRiveG=zoneProfil.getIndiceOf(GISAttributeConstants.INTERSECTION_RIVE_GAUCHE); + Integer idxRG=-1; + if(idxInterRiveG!=-1) { + idxRG=(Integer) zoneProfil.getValue(idxInterRiveG, idxProfil); + seps.add(idxRG); + } + //INTERSECTION_RIVE_DROITE + int idxInterRiveD=zoneProfil.getIndiceOf(GISAttributeConstants.INTERSECTION_RIVE_DROITE); + Integer idxRD=-1; + if(idxInterRiveD!=-1) { + idxRD=(Integer) zoneProfil.getValue(idxInterRiveD, idxProfil); + seps.add(idxRD); + } + //INTERSECTION_LIMITE_STOCKAGE_GAUCHE + int idxInterStockageG=zoneProfil.getIndiceOf(GISAttributeConstants.INTERSECTION_LIMITE_STOCKAGE_GAUCHE); + Integer idxSG=-1; + if(idxInterStockageG!=-1) { + idxSG=(Integer) zoneProfil.getValue(idxInterStockageG, idxProfil); + seps.add(idxSG); + } + //INTERSECTION_LIMITE_STOCKAGE_DROITE + int idxInterStockageD=zoneProfil.getIndiceOf(GISAttributeConstants.INTERSECTION_LIMITE_STOCKAGE_DROITE); + Integer idxSD=-1; + if(idxInterStockageD!=-1) { + idxSD=(Integer) zoneProfil.getValue(idxInterStockageD, idxProfil); + seps.add(idxSD); + } + if(idxRG==-1&&idxRD!=-1||idxRG!=-1&&idxRD==-1) + throw new MascaretDataIncomplete("Il y a une seule rive (il doit y en avoir soit 0 soit 2)"); + if(idxSG==-1&&idxSD!=-1||idxSG!=-1&&idxSD==-1) + throw new MascaretDataIncomplete("Il y a une seule limite de stockage (il doit y en avoir soit 0 soit 2)"); + Integer[] sepsT=seps.toArray(new Integer[0]); + Arrays.sort(sepsT); + // Bathy Topo ou Stockage + if(sepsT.length==4){ + int j; + for(j=0;j<sepsT[0];j++) + profilAbs.bathyOuTopoOuStockage.add('S'); + for(;j<sepsT[1];j++) + profilAbs.bathyOuTopoOuStockage.add('T'); + for(;j<=sepsT[2];j++) + profilAbs.bathyOuTopoOuStockage.add('B'); + for(;j<=sepsT[3];j++) + profilAbs.bathyOuTopoOuStockage.add('T'); + for(;j<coordSeq.size();j++) + profilAbs.bathyOuTopoOuStockage.add('S'); + } + else if(sepsT.length==2) { + if(sepsT[0]==idxRG||sepsT[0]==idxRD){ + int j; + for(j=0;j<=sepsT[0];j++) + profilAbs.bathyOuTopoOuStockage.add('T'); + for(;j<sepsT[1];j++) + profilAbs.bathyOuTopoOuStockage.add('B'); + for(;j<coordSeq.size();j++) + profilAbs.bathyOuTopoOuStockage.add('T'); + } + else{ + int j; + for(j=0;j<=sepsT[0];j++) + profilAbs.bathyOuTopoOuStockage.add('S'); + for(;j<sepsT[1];j++) + profilAbs.bathyOuTopoOuStockage.add('B'); + for(;j<coordSeq.size();j++) + profilAbs.bathyOuTopoOuStockage.add('S'); + } + } + else + for(int j=0;j<coordSeq.size();j++) + profilAbs.bathyOuTopoOuStockage.add('B'); + + // Verification de la coh\xE9rence des r\xE9sultats + if(is1D_) + if(!profilAbs.check1D()) + throw new MascaretDataError("Erreur de programmation : les donn\xE9es g\xE9n\xE9r\xE9es ne sont pas coh\xE9rentes pour le 1d."); + else + if(!profilAbs.check2D()) + throw new MascaretDataError("Erreur de programmation : les donn\xE9es g\xE9n\xE9r\xE9es ne sont pas coh\xE9rentes pour le 2d."); + + // Stockage avec les autres \\ + profils_[i]=profilAbs; + } + } + + /** + * Retourne la liste des points de ruptures. + */ + private Coordinate[] getPointsRuptures(CoordinateSequence _seq) { + List<Coordinate> coord=new ArrayList<Coordinate>(); + int idx1=0; + int idx2=1; + int idx3=2; + int idxPointRupturePrecedent=-1; + while(idx3<_seq.size()) { + if(idx1==idx2) + idx2++; + else if(idx2==idx3) + idx3++; + else if(_seq.getCoordinate(idx1).equals(_seq.getCoordinate(idx2))) + idx2++; + else if(_seq.getCoordinate(idx2).equals(_seq.getCoordinate(idx3))) + idx3++; + else { + if(getAngle(_seq.getCoordinate(idx1), _seq.getCoordinate(idx2), _seq.getCoordinate(idx3))<(Math.PI-0.0001)) + if(idxPointRupturePrecedent<0||!_seq.getCoordinate(idxPointRupturePrecedent).equals(_seq.getCoordinate(idx2))) + coord.add(_seq.getCoordinate(idx2)); + if(idx2+1<idx3) + idx2++; + else + idx1=idx2; + } + } + return coord.toArray(new Coordinate[0]); + } + + /** + * Retourne l'angle form\xE9 par les segments _a_b et _b_c. _a, _b et _c doivent + * \xEAtre non confondus sous peine d'avoir un {@link IllegalArgumentException}. + * L'angle est toujours positif. + * L'ordonn\xE9 z n'est pas prise en compte. + * L'angle retourn\xE9 est en radian. + */ + private double getAngle(Coordinate _a, Coordinate _b, Coordinate _c) { + Coordinate a=new Coordinate(_a.x, _a.y, 0); + Coordinate b=new Coordinate(_b.x, _b.y, 0); + Coordinate c=new Coordinate(_c.x, _c.y, 0); + if(egal(a, b)||egal(b, c)||egal(a, c)) + throw new IllegalArgumentException("Les trois points doivent \xEAtre non confonus."); + // Projection de b sur ac + Coordinate b2=proj(b, a, c); + // Calcul des angles interm\xE9diaires + double angleCBB2=Math.asin(b2.distance(c)/c.distance(b)); + double angleB2BA=Math.asin(b2.distance(a)/a.distance(b)); + if(angleCBB2==Double.NaN||angleB2BA==Double.NaN) + return Math.PI; + // Selon que B2 appartient ou non \xE0 ac, la d\xE9termination de l'angle final diff\xE8re. + double angle; + int position=getPositionXY(b2, a, c); + if(position==-1) + angle=angleCBB2-angleB2BA; + else if(position==1) + angle=angleB2BA-angleCBB2; + else + angle=angleCBB2+angleB2BA; + return angle; + } + + /** + * Soit _a, _b, _c align\xE9s et non confondus. Retourne -1 si _a avant _b_c, 0 + * si _a est entre _b_c (inclu), +1 sinon. Si _a, _b et _c ne sont pas + * align\xE9s, {@link IllegalArgumentException} est lev\xE9. + */ + private int getPositionXY(Coordinate _a, Coordinate _b, Coordinate _c) { + if(!egal(proj(_a, _b, _c), _a)||egal(_a, _b)||egal(_b, _c)||egal(_a, _c)) + throw new IllegalArgumentException("Les trois points doivent \xEAtre align\xE9s et non confonus."); + Coordinate vecBC=vec(_b, _c); + double k; + if(vecBC.x!=0) + k=(_a.x-_b.x)/vecBC.x; + else + k=(_a.y-_b.y)/vecBC.y; + if(k<0) + return -1; + else if(k>1) + return 1; + else + return 0; + } + + /** + * Retourne la projection de _a sur la droite _b_c. + * Attention : Il s'agit bien d'une projection sur une + * droite et non un segment de droite : le r\xE9sultat + * peut \xEAtre en dehors de [_b, _c] + */ + private Coordinate proj(Coordinate _a, Coordinate _b, Coordinate _c){ + Coordinate vBC=vec(_b, _c); + Coordinate vBA=vec(_b, _a); + double normeBC=Math.sqrt(vBC.x*vBC.x+vBC.y*vBC.y+vBC.z*vBC.z); + double produitScalaireBCBA=vBC.x*vBA.x+vBC.y*vBA.y+vBC.z*vBA.z; + double rapportSurBC=produitScalaireBCBA/(normeBC*normeBC); + return new Coordinate(vBC.x*rapportSurBC+_b.x, vBC.y*rapportSurBC+_b.y, vBC.z*rapportSurBC+_b.z); + } + + /** + * Compars les deux vecteurs avec la tol\xE9rance donn\xE9e. Le dernier param\xE8tre + * indique si un normalisation des deux vecteurs doit \xEAtre faite avec la + * comparaison. Les vecteurs ne sont pas modif\xE9s dans l'op\xE9ration. _testZ doit + * \xEAtre mit \xE0 vrai pour que la comparaison tienne compte du z. + */ + private boolean egal(Coordinate _a, Coordinate _b) { + Coordinate diff=vec(_a, _b); + return Math.abs(diff.x)<0.0001&&Math.abs(diff.y)<0.0001; + } + + /** + * retourne le vecteur _a, _b sous forme de Coordinate. + */ + private Coordinate vec(Coordinate _a, Coordinate _b){ + return new Coordinate(_b.x-_a.x, _b.y-_a.y, _b.z-_a.z); + } + + /** + * Calcul l'abscisse curviligne du point indiqu\xE9 en param\xE8tre + */ + private double absCurv(CoordinateSequence _coordSeq, int _idxPoint){ + if(_idxPoint==0) + return 0; + double valueCurviligne=0; + for (int j=1; j<=_idxPoint; j++) + valueCurviligne+=_coordSeq.getCoordinate(j).distance(_coordSeq.getCoordinate(j-1)); + return valueCurviligne; + } +} Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java 2009-02-18 20:47:31 UTC (rev 4483) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java 2009-02-19 08:32:57 UTC (rev 4484) @@ -1,251 +0,0 @@ -/* - * @creation 13 nov. 2008 - * @modification $Date$ - * @license GNU General Public License 2 - * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.dodico.mascaret.io; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.fudaa.ctulu.CtuluAnalyze; -import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; -import org.fudaa.ctulu.fileformat.FortranInterface; -import org.fudaa.ctulu.gis.GISAttributeConstants; -import org.fudaa.ctulu.gis.GISAttributeInterface; -import org.fudaa.ctulu.gis.GISPolyligne; -import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; -import org.fudaa.dodico.commun.DodicoLib; - -import com.vividsolutions.jts.geom.impl.CoordinateArraySequence; - -/** - * Parser du format Mascaret. (versions 6.0 et pr\xE9c\xE9dentes) - * @author Emmanuel MARTIN - * @version $Id$ - */ -public class MascaretReader extends FileReadOperationAbstract { - - /** Exception lev\xE9e quand une probl\xE8me est trouv\xE9 pendant le parsing. */ - private class ParseError extends Exception{ - public ParseError(String _message){ - super(_message); - } - } - - /** Le fichier \xE0 lire */ - private FileReader rawData_; - private String fileName_; - /** Les caract\xE8res de 's\xE9paration' */ - private char[] charSeparation_=new char[]{' ', '\t'}; - private char charSeparationNewLigne_='\n'; - /** Profiles extraits */ - List<MascaretProfilAbstractRepresentation> profils_=new ArrayList<MascaretProfilAbstractRepresentation>(); - - public MascaretReader() { - rawData_=null; - } - - /** - * Retourne vrai si _element est dans _tabElements - * @param _element - * @param _tabElements - * @return retourne vrai si _element est dans _tabElements - */ - private boolean in(final char _element, final char[] _tabElements){ - boolean found=false; - int i=-1; - while(!found&&++i<_tabElements.length) - found=_element==_tabElements[i]; - return found; - } - - /** - * @return token dont le caract\xE8re de s\xE9paration est le retour \xE0 la ligne. Null si rien \xE0 lire. - */ - private StringBuffer nextLineToken(){ - StringBuffer token=new StringBuffer(); - int currentRawChar; - try { - currentRawChar=rawData_.read(); - // Lecture du token : lecture tant qu'un caract\xE8re de s\xE9paration n'est pas - // trouv\xE9. - while (currentRawChar!=-1&&((char)currentRawChar)!=charSeparationNewLigne_) { - token.append((char)currentRawChar); - currentRawChar=rawData_.read(); - } - } - catch (IOException _exc) { - // Erreur dans un des rawData_.read() - _exc.printStackTrace(); - } - // Retour du token - return token.length()==0 ? null:token; - } - - /** - * Retourne le token suivant dans le flux (liste de caract\xE8re jusqu'au - * caract\xE8re de s\xE9paration suivant). - * @return le token ou null si il n'y en a pas. - */ - private String nextWordToken(StringBuffer _lineToken) { - StringBuffer token=new StringBuffer(); - // Elimination des caract\xE8res de s\xE9paration avant le token - while (_lineToken.length()>0&&in(_lineToken.charAt(0), charSeparation_)) - _lineToken.deleteCharAt(0); - // Lecture du token : lecture tant qu'un caract\xE8re de s\xE9paration n'est pas - // trouv\xE9. - while (_lineToken.length()>0&&!in(_lineToken.charAt(0), charSeparation_)) { - token.append(_lineToken.charAt(0)); - _lineToken.deleteCharAt(0); - } - // Retour du token - return token.toString().length()==0 ? null:token.toString(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.fileformat.FileReadOperationAbstract#internalRead() - */ - @Override - protected Object internalRead() { - try { - StringBuffer lineToken=nextLineToken(); - if(lineToken==null) - throw new ParseError(fileName_+DodicoLib.getS(" : le fichier est vide.")); - /* - * Boucle principale : une it\xE9ration par profil - */ - String token=nextWordToken(lineToken); - while (lineToken!=null&&token.equalsIgnoreCase("profil")) { - MascaretProfilAbstractRepresentation profil=new MascaretProfilAbstractRepresentation(); - - // Premi\xE8re ligne \\ - // Extraction des informations commune \xE0 1d et 2d - profil.nomBief=nextWordToken(lineToken); - profil.nomProfil=nextWordToken(lineToken); - profil.abscisseCurvilingeAxeHydraulique=Double.parseDouble(nextWordToken(lineToken)); - // Coordonn\xE9es de trace de profile : non pr\xE9sent dans les fichiers 1d - token=nextWordToken(lineToken); - while (token!=null&&!token.equals("AXE")) { - profil.coordXYTraceProfil.add(new double[]{Double.parseDouble(token), Double.parseDouble(nextWordToken(lineToken))}); - token=nextWordToken(lineToken); - } - // Coordonn\xE9e d'intersection du profile et de l'axe hydraulique - if (token!=null&&token.equals("AXE")) - profil.coordIntersectionAxeHydraulique=new double[]{Double.parseDouble(nextWordToken(lineToken)), - Double.parseDouble(nextWordToken(lineToken))}; - - // Lignes suivantes : coordonn\xE9es du profile \\ - lineToken=nextLineToken(); - while (lineToken!=null&&!(token=nextWordToken(lineToken)).equalsIgnoreCase("profil")) { - profil.coordCurviligneProfil.add(Double.parseDouble(token)); - profil.coordZ.add(Double.parseDouble(nextWordToken(lineToken))); - profil.bathyOuTopoOuStockage.add(nextWordToken(lineToken).charAt(0)); - // Coordonn\xE9es XY : non pr\xE9sent dans les fichiers 1d - token=nextWordToken(lineToken); - if (token!=null) - profil.coordXYProfil.add(new double[]{Double.parseDouble(token), Double.parseDouble(nextWordToken(lineToken))}); - lineToken=nextLineToken(); - } - // Verification de la coh\xE9rance des informations - if (profil.is1d()) - throw new ParseError(fileName_+DodicoLib.getS(" : les profils 1D ne sont pas g\xE9r\xE9s")); - else if (!(profil.is2d()&&profil.check2D())) - throw new ParseError(fileName_+DodicoLib.getS(" : le fichier source comporte des erreurs.")); - // Ajout du profile \xE0 la liste et traitement du profile suivant - profils_.add(profil); - } - // G\xE9n\xE9ration d'un GISZoneCollection avec les informations extraites et - // retour de celle-ci - return generateGIS(); - } - catch (ParseError _exc) { - analyze_.addFatalError(_exc.getMessage()); - } - catch (NumberFormatException _exc){ - analyze_.addFatalError(fileName_+DodicoLib.getS(" : le fichier source comporte des erreurs.")); - } - catch (NullPointerException _exc){ - analyze_.addFatalError(fileName_+DodicoLib.getS(" : le fichier source comporte des erreurs.")); - } - return null; - } - - private GISZoneCollectionLigneBrisee generateGIS(){ - progress_.setDesc(DodicoLib.getS("Lecture de ")+fileName_); - // Cr\xE9ation de la GISZoneCollectionLigneBrisee - GISZoneCollectionLigneBrisee zone=new GISZoneCollectionLigneBrisee(); - zone.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.NATURE, GISAttributeConstants.BATHY}, null); - // G\xE9n\xE9ration des profiles et des traces de profiles \\ - for(int k=0;k<profils_.size();k++){ - progress_.setProgression((int)((float)k/profils_.size()*100)); - MascaretProfilAbstractRepresentation profil=profils_.get(k); - CoordinateArraySequence coordSeq=new CoordinateArraySequence(profil.coordXYTraceProfil.size()); - // Trace profil - for(int i=0;i<profil.coordXYTraceProfil.size();i++){ - coordSeq.setOrdinate(i, 0, profil.coordXYTraceProfil.get(i)[0]); - coordSeq.setOrdinate(i, 1, profil.coordXYTraceProfil.get(i)[1]); - coordSeq.setOrdinate(i, 2, 0); - } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_TP, null}, null); - // Profil - coordSeq=new CoordinateArraySequence(profil.coordXYProfil.size()); - Object[] z=new Object[profil.coordXYProfil.size()]; - for(int i=0;i<profil.coordXYProfil.size();i++){ - coordSeq.setOrdinate(i, 0, profil.coordXYProfil.get(i)[0]); - coordSeq.setOrdinate(i, 1, profil.coordXYProfil.get(i)[1]); - coordSeq.setOrdinate(i, 2, 0); - z[i]=profil.coordZ.get(i); - } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_PF, z}, null); - } - if (profils_.size()>1) { - // G\xE9n\xE9ration de l'axe hydraulique \\ - CoordinateArraySequence coordSeq=new CoordinateArraySequence(profils_.size()); - for (int i=0; i<profils_.size(); i++) { - coordSeq.setOrdinate(i, 0, profils_.get(i).coordIntersectionAxeHydraulique[0]); - coordSeq.setOrdinate(i, 1, profils_.get(i).coordIntersectionAxeHydraulique[1]); - coordSeq.setOrdinate(i, 2, 0); - } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{null, GISAttributeConstants.ATT_NATURE_AH, null}, null); - } - else - analyze_.addInfo(fileName_+DodicoLib.getS(" : le fichier ne comporte qu'un profil, aucun axe hydraulique ne sera g\xE9n\xE9r\xE9.")); - return zone; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.fileformat.FileOperationAbstract#getFortranInterface() - */ - @Override - protected FortranInterface getFortranInterface() { - return new FortranInterface() { - public void close() throws IOException{ - if (rawData_ != null) - rawData_.close(); - } - }; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.fileformat.FileOperationAbstract#setFile(java.io.File) - */ - @Override - public void setFile(File _f) { - fileName_=_f.getName(); - analyze_ = new CtuluAnalyze(); - analyze_.setResource(_f.getAbsolutePath()); - try { - rawData_=new FileReader(_f); - } - catch (FileNotFoundException _exc) { - } - } - -} Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java 2009-02-18 20:47:31 UTC (rev 4483) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretWriter.java 2009-02-19 08:32:57 UTC (rev 4484) @@ -1,468 +0,0 @@ -/* - * @creation 19 d\xE9c. 2008 - * @modification $Date:$ - * @license GNU General Public License 2 - * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.dodico.mascaret.io; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.fudaa.ctulu.CtuluAnalyze; -import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; -import org.fudaa.ctulu.fileformat.FortranInterface; -import org.fudaa.ctulu.gis.GISAttributeConstants; -import org.fudaa.ctulu.gis.GISAttributeModelDoubleInterface; -import org.fudaa.ctulu.gis.GISLib; -import org.fudaa.ctulu.gis.GISPolyligne; -import org.fudaa.ctulu.gis.GISZoneCollection; -import org.fudaa.dodico.commun.DodicoLib; - -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.CoordinateSequence; -import com.vividsolutions.jts.geom.Geometry; - -/** - * Ecrit au format mascaret 1d et 2d. - * @author Emmanuel MARTIN - * @version $Id$ - */ -public class MascaretWriter extends FileWriteOperationAbstract { - - /** Le flux de sorti. */ - private Writer out_; - /** Les profils \xE0 \xE9crire. */ - private MascaretProfilAbstractRepresentation[] profils_; - /** Version du fichier mascaret de destination. */ - private String version_; - - /** - * Cette classe permet \xE0 l'exporteur de selectionner les - * profils \xE0 exporter. G\xE9n\xE9ralement les profiles invalides sont ignor\xE9s. - * @author Emmanuel MARTIN - * @version $Id$ - */ - public interface FunctorSelectProfil { - public boolean exportProfil(GISZoneCollection _zone, int _idxProfil); - } - - public MascaretWriter() {} - - /** - * L'argument doit \xEAtre un tableau contenant : - * 0 : string : le nom du bief - * 1 : GISZoneCollectionLigneBrisee[] : les zones dans lesquelles trouver les g\xE9om\xE9tries - * 2 : FunctorSelectProfil : pour selectionner les profils \xE0 exporter - * 3 : string : la version du fichier mascaret g\xE9n\xE9r\xE9 - * - * On passe en param\xE8tre les diff\xE9rentes GISZoneCollectionLigneBrisee qui - * contiennent les g\xE9om\xE9tries n\xE9c\xE9ssaires \xE0 l'exportation. Ces zone peuvent - * contenir des g\xE9om\xE9tries incompatible avec l'export (comme des polygones), - * elles seront simplement ignor\xE9es. Dans le cas o\xF9 des g\xE9om\xE9tries manqueront, - * une exception du type MascaretDataIncomplete est lev\xE9e. Les profils invalides - * sont \xE9galements ignor\xE9s. Si certaines donn\xE9es sont incoh\xE9rentes une exception - * du type MascaretDataError est lev\xE9e. La version du fichier de destination ('1d' - * ou '2d'). Si un des trois param\xE8tres est null une exception de type - * {@link IllegalArgumentException} est lev\xE9e, si version n'est pas soit '1d' - * soit '2d' (case ignor\xE9e) la m\xEAme exception est lev\xE9e. - */ - @Override - protected void internalWrite(Object _o) { - try { - if(((Object[])_o).length!=4) - throw new IllegalArgumentException("Il doit y avoir 4 param\xE8tres dans _o."); - String nomBief=(String)((Object[])_o)[0]; - GISZoneCollection[] zones=(GISZoneCollection[])((Object[])_o)[1]; - FunctorSelectProfil selectorProfil=(FunctorSelectProfil)((Object[])_o)[2]; - version_=(String)((Object[])_o)[3]; - if (nomBief==null) - throw new IllegalArgumentException("nomBief ne doit pas \xEAtre null"); - if (zones==null) - throw new IllegalArgumentException("zones mustn't be null"); - if (version_==null||!version_.equalsIgnoreCase("1d")&&!version_.equalsIgnoreCase("2d")) - throw new IllegalArgumentException("version doit \xEAtre \xE9gale \xE0 1d ou 2d"); - generateMascaretProfilAbstractRepresentations(nomBief, zones, selectorProfil); - - for (int i=0; i<profils_.length; i++) { - MascaretProfilAbstractRepresentation profil=profils_[i]; - // Premi\xE8re ligne - out_.write("Profil "+profil.nomBief+" "+profil.nomProfil+" "+profil.abscisseCurvilingeAxeHydraulique); - if (version_.equals("1d")) - out_.write('\n'); - else { - out_.write(' '); - for (int j=0; j<profil.coordXYTraceProfil.size(); j++) { - out_.write(profil.coordXYTraceProfil.get(j)[0]+" "); - out_.write(profil.coordXYTraceProfil.get(j)[1]+" "); - } - out_.write("AXE "+profil.coordIntersectionAxeHydraulique[0]+" "+profil.coordIntersectionAxeHydraulique[1]); - out_.write('\n'); - } - // Les autres lignes - for (int j=0; j<profil.coordXYProfil.size(); j++) { - out_.write(profil.coordCurviligneProfil.get(j)+" "+profil.coordZ.get(j)+" "+profil.bathyOuTopoOuStockage.get(j)); - if (version_.equals("1d")) - out_.write('\n'); - else - out_.write(" "+profil.coordXYProfil.get(j)[0]+" "+profil.coordXYProfil.get(j)[1]+"\n"); - } - } - } - catch (Exception _exp) { - analyze_.manageException(_exp); - } - } - - @Override - protected FortranInterface getFortranInterface() { - return new FortranInterface() { - public void close() throws IOException { - if (out_ != null) { - out_.close(); - } - } - }; - } - - @Override - public void setFile(File _f) { - analyze_ = new CtuluAnalyze(); - analyze_.setResource(_f.getAbsolutePath()); - FileWriter out = null; - try { - out = new FileWriter(_f); - } catch (final IOException _e) { - analyze_.manageException(_e); - } - if (out != null) { - out_ = out; - } - } - - /** - * G\xE9n\xE8re les repr\xE9sentatino interm\xE9diaires des profils. - * @param zones_ - * @throws MascaretDataError - * @throws MascaretDataIncomplete - */ - private void generateMascaretProfilAbstractRepresentations(String _nomBief, GISZoneCollection[] _zones, FunctorSelectProfil _selectorProfil) throws MascaretDataError, MascaretDataIncomplete{ - // Recherche de l'axe hydraulique \\ - GISZoneCollection zoneAxeHydraulique=null; - int indexAxeHydraulique=-1; - for (int i=0; i<_zones.length; i++) { - int idxAttNature=_zones[i].getIndiceOf(GISAttributeConstants.NATURE); - if (idxAttNature!=-1) - for (int j=0; j<_zones[i].getNbGeometries(); j++) - if (_zones[i].getValue(idxAttNature, j)==GISAttributeConstants.ATT_NATURE_AH) - if (zoneAxeHydraulique==null) { - zoneAxeHydraulique=_zones[i]; - indexAxeHydraulique=j; - } - else - throw new MascaretDataError("Il existe plusieurs axes hydrauliques."); - } - if(zoneAxeHydraulique==null) - throw new MascaretDataIncomplete("Il n'y a pas d'axes hydrauliques."); - - // Recherche des profils \\ - List<GISZoneCollection> profils=new ArrayList<GISZoneCollection>(); - List<Integer> indexProfils=new ArrayList<Integer>(); - int nbProfilNotKeep=0; - for (int i=0; i<_zones.length; i++) { - int idxAttNature=_zones[i].getIndiceOf(GISAttributeConstants.NATURE); - if (idxAttNature!=-1) - for (int j=0; j<_zones[i].getNbGeometries(); j++) - if (_zones[i].getValue(idxAttNature, j)==GISAttributeConstants.ATT_NATURE_PF) { - if(_selectorProfil.exportProfil(_zones[i], j)) { - profils.add(_zones[i]); - indexProfils.add(j); - } - else - nbProfilNotKeep++; - } - } - if (nbProfilNotKeep>0) - analyze_.addWarn(DodicoLib.getS("{0} profils sur {1} n'ont pas \xE9t\xE9 export\xE9s car ils ne sont pas conformes",""+nbProfilNotKeep,""+(indexProfils.size()+nbProfilNotKeep)), -1); - else - analyze_.addInfo(DodicoLib.getS("{0} profils ont \xE9t\xE9 export\xE9s",""+(indexProfils.size()+nbProfilNotKeep))); - - - // G\xE9n\xE9ration des MascaretProfilAbstractRepresentations \\ - profils_=new MascaretProfilAbstractRepresentation[profils.size()]; - int countNoName=1; - GISPolyligne axeHydraulique=(GISPolyligne)zoneAxeHydraulique.getGeometry(indexAxeHydraulique); - for (int i=0;i<profils.size();i++) { - GISZoneCollection zoneProfil=profils.get(i); - int idxProfil=indexProfils.get(i); - GISPolyligne profil=(GISPolyligne) zoneProfil.getGeometry(idxProfil); - MascaretProfilAbstractRepresentation profilAbs=new MascaretProfilAbstractRepresentation(); - - // Information globales sur le profil \\ - // Nom bief - profilAbs.nomBief=_nomBief.replace(' ', '_'); - // Nom profil - int idxTitle=zoneProfil.getIndiceOf(GISAttributeConstants.TITRE); - if(idxTitle!=-1){ - String nomProfil=(String) zoneProfil.getValue(idxTitle, idxProfil); - profilAbs.nomProfil=nomProfil.replace(' ', '_'); - } - else - profilAbs.nomProfil="No_Name_"+countNoName++; - // Intersection axe hydraulique - Geometry intersection=axeHydraulique.intersection(profil); - if(intersection.getNumPoints()!=1) - throw new MascaretDataError("Un profil \xE0 plusieurs ou aucun point(s) d'intersection(s) avec l'axe hydraulique."); - profilAbs.coordIntersectionAxeHydraulique=new double[]{intersection.getCoordinate().x, intersection.getCoordinate().y}; - // Abscisse curviligne axe hydraulique - int idxAttrCommHydraulique=zoneProfil.getIndiceOf(GISAttributeConstants.COMMENTAIRE_HYDRO); - if(idxAttrCommHydraulique==-1) - throw new MascaretDataError("L'attribut COMMENTAIRE_HYDRO doit \xEAtre pr\xE9sent."); - String comm=(String) zoneProfil.getValue(idxAttrCommHydraulique, idxProfil); - if(!GISLib.isHydroCommentValued(comm, "PK")) - throw new MascaretDataError("La propri\xE9t\xE9 PK de COMMENTAIRE_HYDRO doit \xEAtre valu\xE9e."); - profilAbs.abscisseCurvilingeAxeHydraulique=GISLib.getHydroCommentDouble(comm, "PK"); - CoordinateSequence coordSeq=axeHydraulique.getCoordinateSequence(); - // Trace profil - coordSeq=profil.getCoordinateSequence(); - Coordinate coord[]=getPointsRuptures(coordSeq); - profilAbs.coordXYTraceProfil.add(new double[]{coordSeq.getX(0), coordSeq.getY(0)}); - for(int j=0;j<coord.length;j++) - profilAbs.coordXYTraceProfil.add(new double[]{coord[j].x, coord[j].y}); - profilAbs.coordXYTraceProfil.add(new double[]{coordSeq.getX(coordSeq.size()-1), coordSeq.getY(coordSeq.size()-1)}); - - // Information atomiques sur le profil \\ - coordSeq=profil.getCoordinateSequence(); - int idxZ=zoneProfil.getIndiceOf(zoneProfil.getAttributeIsZ()); - for(int j=0;j<profil.getNumPoints();j++){ - // Valeur curviligne - profilAbs.coordCurviligneProfil.add(absCurv(coordSeq, j)); - // Coordonn\xE9es X Y - ... [truncated message content] |
From: <bma...@us...> - 2009-02-24 17:31:18
|
Revision: 4495 http://fudaa.svn.sourceforge.net/fudaa/?rev=4495&view=rev Author: bmarchan Date: 2009-02-24 17:31:06 +0000 (Tue, 24 Feb 2009) Log Message: ----------- Tache #179 : Finalisation recherche sur attributs atomiques. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneShowLabelAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindExpressionAtomic.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/commun/TestJEbliListeSelectionMulti.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -15,13 +15,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.fudaa.ctulu.CtuluExpr; -import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.gis.GISAttributeInterface; @@ -30,9 +24,8 @@ import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollection; -import org.fudaa.ebli.calque.edition.ZModeleEditable; import org.fudaa.ebli.calque.find.CalqueFindActionAtomic; -import org.fudaa.ebli.calque.find.CalqueFindExpression; +import org.fudaa.ebli.calque.find.CalqueFindExpressionAtomic; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.commun.EbliListeSelectionMulti; import org.fudaa.ebli.commun.EbliListeSelectionMultiInterface; @@ -51,7 +44,6 @@ import org.fudaa.ebli.trace.TraceLigneModel; import org.fudaa.ebli.trace.TraceSurface; import org.fudaa.ebli.trace.TraceSurfaceModel; -import org.nfunk.jep.Variable; import com.memoire.fu.FuLog; import com.vividsolutions.jts.algorithm.SIRtreePointInRing; @@ -72,117 +64,6 @@ */ public class ZCalqueGeometry extends ZCalqueAffichageDonneesLineAbstract implements ZModelGeometryListener { - /** - * @author Fred Deniger - * @version $Id$ - */ - private class VariableFindExpression extends CalqueFindExpression { - - Map<Variable,Integer> vars_; - Variable varX_; - Variable varY_; - List<Double> ord_=new ArrayList<Double>(50); - - public VariableFindExpression() { - super(ZCalqueGeometry.this.modeleDonnees()); - } - - public void initialiseExpr(final CtuluExpr _expr) { - if (isAtomicMode_) { - initialiseExprWhenAtomic(_expr); - return; - } - - super.initialiseExpr(_expr); - final GISZoneCollection coll = ((ZModeleEditable) super.data_).getGeomData(); - final int nb = coll.getNbAttributes(); - if (nb > 0) { - if (vars_ == null) { - vars_ = new HashMap<Variable,Integer>(nb); - } else { - vars_.clear(); - } - for (int i = 0; i < nb; i++) { - final GISAttributeInterface att = coll.getAttribute(i); - if (!att.isAtomicValue() /*&& Number.class.isAssignableFrom(att.getDataClass())*/) { - vars_.put(_expr.addVar(att.getName(), att.getLongName()), i); - } - } - } - } - - public void majVariable(final int _idx, final Variable[] _varToUpdate, final Object[] _values) { - if (isAtomicMode_) { - majVariableWhenAtomic(_idx, _varToUpdate, _values); - return; - } - - super.majVariable(_idx, _varToUpdate, _values); - if (vars_ != null && !CtuluLibArray.isEmpty(_varToUpdate)) { - final GISZoneCollection coll = ((ZModeleEditable) super.data_).getGeomData(); - for (int i = _varToUpdate.length - 1; i >= 0; i--) { - if (vars_.containsKey(_varToUpdate[i])) { - _values[i]=coll.getDataModel(vars_.get(_varToUpdate[i])).getObjectValueAt(_idx); - } - } - } - } - - public void initialiseExprWhenAtomic(CtuluExpr _expr) { - _expr.initVar(); - _expr.getParser().getFunctionTable().remove("str"); - - - // Indice, ajout\xE9 par defaut. - _expr.removeVar("i"); - - final GISZoneCollection coll = modeleDonnees().getGeomData(); - final int nb = coll.getNbAttributes(); - if (nb > 0) { - if (vars_ == null) { - vars_ = new HashMap<Variable,Integer>(nb); - } else { - vars_.clear(); - } - for (int i = 0; i < nb; i++) { - final GISAttributeInterface att = coll.getAttribute(i); - if (att.isAtomicValue() /*&& Number.class.isAssignableFrom(att.getDataClass())*/) { - vars_.put(_expr.addVar(att.getName(), att.getLongName()),i); - } - } - } - - varX_=_expr.addVar("x","L'abscisse des sommets"); - varY_=_expr.addVar("y","L'ordonn\xE9e des sommets"); - } - - public void majVariableWhenAtomic(int _idx, Variable[] _varToUpdate, Object[] _values) { - - final GISZoneCollection coll = modeleDonnees().getGeomData(); - int ivar; - if ((ivar=CtuluLibArray.getIndex(varX_, _varToUpdate))!=-1) - _values[ivar]=getOrdinate(_idx, 0); - if ((ivar=CtuluLibArray.getIndex(varY_, _varToUpdate))!=-1) - _values[ivar]=getOrdinate(_idx, 1); - - for (int i=0; i<_varToUpdate.length; i++) { - if ((vars_.containsKey(_varToUpdate[i]))) { - _values[i]= - ((GISAttributeModel)coll.getDataModel(vars_.get(_varToUpdate[i])).getObjectValueAt(_idx)).getObjectValues(); - } - } - } - - private Double[] getOrdinate(int _idxGeom, int _ordonnee) { - CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)modeleDonnees().getObject(_idxGeom)).getCoordinateSequence(); - ord_.clear(); - for (int i=0; i<seq.size(); i++) - ord_.add(seq.getOrdinate(i, _ordonnee)); - - return ord_.toArray(new Double[0]); - } - } - /** true si selection en mode sommets */ transient protected boolean isAtomicMode_; /** Le mod\xE8le des g\xE9om\xE9tries */ @@ -339,9 +220,11 @@ sentEvent = selectionMulti_.xor(_s); break; case EbliSelectionState.ACTION_REPLACE: - selectionMulti_.setSelection(_s); - sentEvent = true; + sentEvent = selectionMulti_.setSelection(_s); break; + case EbliSelectionState.ACTION_AND: + sentEvent = selectionMulti_.intersection(_s); + break; default: break; } @@ -375,7 +258,7 @@ } public EbliFindExpressionContainerInterface getExpressionContainer() { - return new VariableFindExpression(); + return new CalqueFindExpressionAtomic(this); } public EbliListeSelectionMultiInterface getLayerSelectionMulti() { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -15,6 +15,7 @@ import org.fudaa.ebli.calque.ZCalqueGeometry; import org.fudaa.ebli.calque.ZEbliCalquesPanel; import org.fudaa.ebli.commun.EbliListeSelectionMulti; +import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.find.EbliFindComponent; import org.fudaa.ebli.find.EbliFindComponentExpr; import org.fudaa.ebli.find.EbliFindable; @@ -26,7 +27,7 @@ * Une action de recherche permettant de rechercher des geometries ou des sommets. Cette action r\xE9agit au changement de mode de * selection sommet<->geometrie. * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ public class CalqueFindActionAtomic extends CalqueFindActionDefault implements PropertyChangeListener { Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindExpressionAtomic.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindExpressionAtomic.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindExpressionAtomic.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -0,0 +1,150 @@ +package org.fudaa.ebli.calque.find; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.fudaa.ctulu.CtuluExpr; +import org.fudaa.ctulu.CtuluLibArray; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISAttributeModel; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ebli.calque.ZCalqueGeometry; +import org.nfunk.jep.Variable; + +import com.vividsolutions.jts.geom.CoordinateSequence; + +/** + * Une recherche d'expression gerant le mode atomique ou global d'un calque. + * @author Bertrand Marchand + * @version $Id$ + */ +public class CalqueFindExpressionAtomic extends CalqueFindExpression { + + /** Le calque associ\xE9 */ + ZCalqueGeometry layer_; + /** La table des variables g\xE9r\xE9es par le calque */ + Map<Variable,Integer> vars_; + /** La variable X, dont le traitement est sp\xE9cial */ + Variable varX_; + /** La variable Y, dont le traitement est sp\xE9cial */ + Variable varY_; + /** Une table de stockage temporaire */ + List<Double> ord_=new ArrayList<Double>(50); + + public CalqueFindExpressionAtomic(ZCalqueGeometry _layer) { + super(_layer.modeleDonnees()); + layer_=_layer; + } + + public void initialiseExpr(final CtuluExpr _expr) { + if (layer_.isAtomicMode()) { + initialiseExprWhenAtomic(_expr); + return; + } + + super.initialiseExpr(_expr); + final GISZoneCollection coll = layer_.modeleDonnees().getGeomData(); + final int nb = coll.getNbAttributes(); + if (nb > 0) { + if (vars_ == null) { + vars_ = new HashMap<Variable,Integer>(nb); + } else { + vars_.clear(); + } + for (int i = 0; i < nb; i++) { + final GISAttributeInterface att = coll.getAttribute(i); + if (!att.isAtomicValue()) { + vars_.put(_expr.addVar(att.getName(), att.getLongName()), i); + } + } + } + } + + public void majVariable(final int _idx, final Variable[] _varToUpdate, final Object[] _values) { + if (layer_.isAtomicMode()) { + majVariableWhenAtomic(_idx, _varToUpdate, _values); + return; + } + + super.majVariable(_idx, _varToUpdate, _values); + if (vars_ != null && !CtuluLibArray.isEmpty(_varToUpdate)) { + final GISZoneCollection coll = layer_.modeleDonnees().getGeomData(); + for (int i = _varToUpdate.length - 1; i >= 0; i--) { + if (vars_.containsKey(_varToUpdate[i])) { + _values[i]=coll.getDataModel(vars_.get(_varToUpdate[i])).getObjectValueAt(_idx); + } + } + } + } + + /** + * Initialise le container d'expressions avec des variables atomiques uniquement. + * @param _expr Le container. + */ + public void initialiseExprWhenAtomic(CtuluExpr _expr) { + _expr.initVar(); + _expr.getParser().getFunctionTable().remove("str"); + + + // Suppression de l'indice, ajout\xE9 par defaut par la classe m\xE8re. + _expr.removeVar("i"); + + final GISZoneCollection coll = layer_.modeleDonnees().getGeomData(); + final int nb = coll.getNbAttributes(); + if (nb > 0) { + if (vars_ == null) { + vars_ = new HashMap<Variable,Integer>(nb); + } else { + vars_.clear(); + } + for (int i = 0; i < nb; i++) { + final GISAttributeInterface att = coll.getAttribute(i); + if (att.isAtomicValue()) { + vars_.put(_expr.addVar(att.getName(), att.getLongName()),i); + } + } + } + + varX_=_expr.addVar("x","L'abscisse des sommets"); + varY_=_expr.addVar("y","L'ordonn\xE9e des sommets"); + } + + /** + * Le traitement pour les variables atomiques. + * @param _idx L'indice de g\xE9om\xE9trie. + * @param _varToUpdate Les variables \xE0 mettre a jour. + * @param _values Les valeurs pour chaque variable. + */ + public void majVariableWhenAtomic(int _idx, Variable[] _varToUpdate, Object[] _values) { + + final GISZoneCollection coll = layer_.modeleDonnees().getGeomData(); + int ivar; + if ((ivar=CtuluLibArray.getIndex(varX_, _varToUpdate))!=-1) + _values[ivar]=getOrdinate(_idx, 0); + if ((ivar=CtuluLibArray.getIndex(varY_, _varToUpdate))!=-1) + _values[ivar]=getOrdinate(_idx, 1); + + for (int i=0; i<_varToUpdate.length; i++) { + if ((vars_.containsKey(_varToUpdate[i]))) { + _values[i]= + ((GISAttributeModel)coll.getDataModel(vars_.get(_varToUpdate[i])).getObjectValueAt(_idx)).getObjectValues(); + } + } + } + + protected Double[] getOrdinate(int _idxGeom, int _ordonnee) { + CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)layer_.modeleDonnees().getObject(_idxGeom)).getCoordinateSequence(); + ord_.clear(); + + if (_ordonnee==2) + layer_.modeleDonnees().getGeomData().initZCoordinate(_idxGeom); + + for (int i=0; i<seq.size(); i++) + ord_.add(seq.getOrdinate(i, _ordonnee)); + + return ord_.toArray(new Double[0]); + } +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindExpressionAtomic.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -31,6 +31,11 @@ idxListSelection_ = new TIntObjectHashMap(_n); } + /** + * Une op\xE9ration (and) d'intersection de la liste <code>this</code> avec une liste donn\xE9e. + * @param _selection La liste donn\xE9e. + * @return true : Si la liste <code>this</code> est modifi\xE9e par l'op\xE9ration. + */ public boolean intersection(final EbliListeSelectionMultiInterface _selection) { if ((_selection == null) || _selection.isEmpty()) { final boolean r = !isEmpty(); @@ -45,12 +50,8 @@ final CtuluListSelection thisSelection = (CtuluListSelection) it.value(); final CtuluListSelection selection = (CtuluListSelection)_selection.getSelection(idx); r |= thisSelection.intersection(selection); - if (thisSelection.remove((CtuluListSelection) it.value())) { - r = true; - if (thisSelection.isEmpty()) { - it.remove(); - } - + if (thisSelection.isEmpty()) { + it.remove(); } } return r; @@ -113,6 +114,11 @@ return true; } + /** + * Une op\xE9ration (xor) d'ajout si non existant et suppression si existant sur la liste <code>this</code> depuis une liste donn\xE9e. + * @param _selection La liste donn\xE9e. + * @return true : Si la liste <code>this</code> est modifi\xE9e par l'op\xE9ration. + */ public boolean xor(final EbliListeSelectionMultiInterface _m) { if ((_m == null) || _m.isEmpty()) { return false; @@ -142,6 +148,11 @@ return r; } + /** + * Une op\xE9ration (or) d'ajout de la liste donn\xE9e \xE0 la liste <code>this</code>. + * @param _m La liste donn\xE9e. + * @return true : Si la liste <code>this</code> est modifi\xE9e par l'op\xE9ration. + */ public boolean add(final EbliListeSelectionMultiInterface _m) { if ((_m == null) || _m.isEmpty()) { return false; @@ -182,6 +193,11 @@ return r; } + /** + * Une op\xE9ration de suppression de la liste donn\xE9e \xE0 la liste <code>this</code>. + * @param _m La liste donn\xE9e. + * @return true : Si la liste <code>this</code> est modifi\xE9e par l'op\xE9ration. + */ public boolean remove(final EbliListeSelectionMultiInterface _m) { if ((_m == null) || _m.isEmpty()) { return false; @@ -203,6 +219,11 @@ return r; } + /** + * Une op\xE9ration de remplacement de la liste <code>this</code> par la liste donn\xE9e. + * @param _m La liste donn\xE9e. + * @return true dans tous les cas. + */ public boolean setSelection(final EbliListeSelectionMultiInterface _m) { clear(); if (_m == null) { @@ -228,6 +249,11 @@ return idxListSelection_.iterator(); } + /** + * Efface la liste avant de definir l'unique sommet. + * @param _idxGlobal L'indice global + * @param _idxSelected L'indice de sommet. + */ public void set(final int _idxGlobal, final int _idxSelected) { idxListSelection_.clear(); final CtuluListSelection l = new CtuluListSelection(); @@ -235,6 +261,11 @@ idxListSelection_.put(_idxGlobal, l); } + /** + * Ajoute un sommet a la liste. + * @param _idxGlobal L'indice global + * @param _idxSelected L'indice de sommet. + */ public void add(final int _idxGlobal, final int _idxSelected) { CtuluListSelection l = (CtuluListSelection) idxListSelection_.get(_idxGlobal); if (l == null) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -29,7 +29,8 @@ * lancement de la selection. * @param _idx L'indice de l'objet dans le calque. * @param _varToUpdate Les variables dont la valeur est a intialiser. - * @param _values Les valeurs pour les variables, dans le m\xEAme ordre. + * @param _values Les valeurs pour les variables, dans le m\xEAme ordre. Pour des variables atomiques, les valeurs sont sous + * forme d'un tableau Object[][] dont la longueur correspond au nombre d'atomiques. */ void majVariable(int _idx,Variable[] _varToUpdate, Object[] _values); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -48,7 +48,6 @@ int i=CtuluLibArray.getIndex(i_,_varToUpdate); if (i!=-1) _values[i]=CtuluLib.getDouble(_idx + 1); -// i_.setValue(CtuluLib.getDouble(_idx + 1)); } } Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/commun/TestJEbliListeSelectionMulti.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/commun/TestJEbliListeSelectionMulti.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/commun/TestJEbliListeSelectionMulti.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -0,0 +1,124 @@ +/* + * @creation 24 f\xE9vr. 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ebli.commun; + +import junit.framework.TestCase; + +/** + * Pour tester les listes de selection multi. + * @author Bertrand Marchand + * @version $Id:$ + */ +public class TestJEbliListeSelectionMulti extends TestCase { + + /** + * Teste les listes issues des op\xE9rations. + */ + public void testOperation() { + EbliListeSelectionMulti l; + + // and + l=getListe1(); + l.intersection(getListe2()); + assertNull(l.get(0)); + assertNotNull(l.get(1)); + assertNull(l.get(2)); + assertNotNull(l.get(5)); + assertEquals(l.getNbSelectedItem(),2); + assertEquals(l.get(5).getNbSelectedIndex(),1); + + // or + l=getListe1(); + l.add(getListe2()); + assertNotNull(l.get(0)); + assertNotNull(l.get(1)); + assertNotNull(l.get(2)); + assertNotNull(l.get(5)); + assertEquals(l.getNbSelectedItem(),8); + assertEquals(l.get(5).getNbSelectedIndex(),3); + + // remove + l=getListe1(); + l.remove(getListe2()); + assertNotNull(l.get(0)); + assertNull(l.get(1)); + assertNull(l.get(2)); + assertNotNull(l.get(5)); + assertEquals(l.getNbSelectedItem(),3); + assertEquals(l.get(5).getNbSelectedIndex(),1); + + // xor + l=getListe1(); + l.xor(getListe2()); + assertNotNull(l.get(0)); + assertNull(l.get(1)); + assertNotNull(l.get(2)); + assertNotNull(l.get(5)); + assertEquals(l.getNbSelectedItem(),6); + assertEquals(l.get(5).getNbSelectedIndex(),2); + } + + /** + * Teste la modification des listes au cours des op\xE9rations. + */ + public void testModification() { + EbliListeSelectionMulti l; + + l=getListe1(); + assertFalse(l.add(getListe3())); + assertFalse(l.add(getListe1())); + assertTrue(l.add(getListe2())); + + l=getListe1(); + assertFalse(l.intersection(getListe1())); + assertTrue(l.intersection(getListe3())); + + l=getListe3(); + assertFalse(l.intersection(getListe1())); + assertFalse(l.intersection(getListe3())); + + l=getListe1(); + assertTrue(l.remove(getListe3())); + assertFalse(l.remove(getListe3())); + + l=getListe3(); + assertFalse(l.xor(null)); + assertTrue(l.xor(getListe2())); + assertTrue(l.xor(getListe2())); + assertFalse(l.add(getListe3())); + assertFalse(l.intersection(getListe3())); + } + + EbliListeSelectionMulti getListe1() { + EbliListeSelectionMulti l=new EbliListeSelectionMulti(3); + l.add(0,1); + l.add(0,5); + l.add(1,6); + l.add(5,12); + l.add(5,1); + return l; + } + + EbliListeSelectionMulti getListe2() { + EbliListeSelectionMulti l=new EbliListeSelectionMulti(3); + l.add(2,1); + l.add(2,5); + l.add(1,6); + l.add(5,12); + l.add(5,7); + return l; + } + + EbliListeSelectionMulti getListe3() { + EbliListeSelectionMulti l=new EbliListeSelectionMulti(2); + l.add(0,1); + l.add(5,12); + l.add(5,1); + return l; + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/test/org/fudaa/ebli/commun/TestJEbliListeSelectionMulti.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneShowLabelAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneShowLabelAction.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneShowLabelAction.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -14,6 +14,7 @@ import org.fudaa.ebli.calque.BArbreCalqueModel; import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.BCalqueVisitor; +import org.fudaa.ebli.calque.ZCalqueGeometry; import org.fudaa.ebli.calque.ZCalqueLigneBrisee; import org.fudaa.ebli.calque.ZCalqueMultiPoint; import org.fudaa.ebli.commun.EbliActionChangeState; @@ -41,10 +42,8 @@ private void applyConf(){ treeModel_.getRootCalque().apply(new BCalqueVisitor(){ public boolean visit(BCalque _cq) { - if(_cq instanceof ZCalqueLigneBrisee) - ((ZCalqueLigneBrisee)_cq).setAttributForLabels(isSelected()?GISAttributeConstants.LABEL:null); - else if(_cq instanceof ZCalqueMultiPoint) - ((ZCalqueMultiPoint)_cq).setAttributForLabels(isSelected()?GISAttributeConstants.LABEL:null); + if(_cq instanceof ZCalqueGeometry) + ((ZCalqueGeometry)_cq).setAttributForLabels(isSelected()?GISAttributeConstants.LABEL:null); return true; } }); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -28,7 +28,7 @@ /** * Un calque pour le stockage et la manipulation des donn\xE9es altim\xE9triques. * @author Bertrand Marchand - * @version $Id: MdlLayer2dCloud.java,v 1.1.2.4 2008/05/13 12:10:42 bmarchan Exp $ + * @version $Id$ */ public class MdlLayer2dCloud extends MdlLayer2dMultiPoint { @@ -42,7 +42,7 @@ setName(getExtName()); setIconModel(0, new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, new Color(0,190,0))); setTitle(MdlResource.MDL.getString("Semis de points")); - setAttributForLabels(GISAttributeConstants.BATHY); + setAttributForLabels(GISAttributeConstants.LABEL); } public MdlLayer2dCloud(FSigEditor _editor) { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -22,7 +22,7 @@ /** * Un calque pour le stockage et la manipulation des lignes de constraintes. * @author Bertrand Marchand - * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $ + * @version $Id$ */ public class MdlLayer2dConstraintLine extends MdlLayer2dLine { @@ -37,7 +37,7 @@ setLineModelOuvert(getLineModel(0)); setName(getExtName()); setTitle(MdlResource.MDL.getString("Lignes de contraintes")); - setAttributForLabels(GISAttributeConstants.BATHY); + setAttributForLabels(GISAttributeConstants.LABEL); } public MdlLayer2dConstraintLine(FSigEditor _editor) { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dConstraintLine.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dContour.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -41,7 +41,7 @@ setIconModel(1, new TraceIconModel(getIconModel(0))); setName(getExtName()); setTitle(MdlResource.MDL.getString("Contours d'\xE9tude")); - setAttributForLabels(GISAttributeConstants.BATHY); + setAttributForLabels(GISAttributeConstants.LABEL); } public MdlLayer2dContour(FSigEditor _editor) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -9,23 +9,60 @@ import java.awt.Color; +import org.fudaa.ctulu.CtuluExpr; +import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ebli.calque.BCalquePersistenceInterface; +import org.fudaa.ebli.calque.ZCalqueGeometry; import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; +import org.fudaa.ebli.calque.find.CalqueFindExpressionAtomic; +import org.fudaa.ebli.find.EbliFindExpressionContainerInterface; import org.fudaa.ebli.trace.TraceLigne; import org.fudaa.ebli.trace.TraceLigneModel; import org.fudaa.fudaa.modeleur.MdlResource; import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dLevelPersistence; import org.fudaa.fudaa.sig.layer.FSigEditor; +import org.nfunk.jep.Variable; /** * Un calque pour le stockage et la manipulation des donn\xE9es altim\xE9triques. * @author Bertrand Marchand - * @version $Id: MdlLayer2dLevel.java,v 1.1.2.8 2008/05/13 12:10:40 bmarchan Exp $ + * @version $Id$ */ public class MdlLayer2dLevel extends MdlLayer2dLine { /** + * Sp\xE9cifique, la valeur Z atomique pour les courbes de niveau. + * @author Bertrand Marchand + * @version $Id:$ + */ + class CalqueFindExpressionAtomicLevel extends CalqueFindExpressionAtomic { + Variable varZ_; + + @Override + public void initialiseExprWhenAtomic(CtuluExpr _expr) { + super.initialiseExprWhenAtomic(_expr); + + varZ_=_expr.addVar(GISAttributeConstants.BATHY.getName(), GISAttributeConstants.BATHY.getLongName()); + } + + @Override + public void majVariableWhenAtomic(int _idx, Variable[] varToUpdate, Object[] _values) { + super.majVariableWhenAtomic(_idx, varToUpdate, _values); + + int ivar=CtuluLibArray.getIndex(varZ_, varToUpdate); + if (ivar!=-1) { + _values[ivar]=getOrdinate(_idx, 2); + } + } + + public CalqueFindExpressionAtomicLevel(ZCalqueGeometry _layer) { + super(_layer); + } + + } + + /** * Constructeur. Utilise un mod\xE8le de donn\xE9es et un editeur. * @param _model Modele * @param _editor Editeur. @@ -38,7 +75,7 @@ setLineModelOuvert(getLineModel(0)); setTitle(MdlResource.MDL.getString("Lignes de niveau")); - setAttributForLabels(GISAttributeConstants.BATHY); + setAttributForLabels(GISAttributeConstants.LABEL); } public MdlLayer2dLevel(FSigEditor _editor) { @@ -54,6 +91,10 @@ return new MdlLayer2dLevelPersistence(); } + public EbliFindExpressionContainerInterface getExpressionContainer() { + return new CalqueFindExpressionAtomicLevel(this); + } + /** * Retourne le nom par defaut du calque. * @return Le nom. Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLevel.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java 2009-02-24 12:28:49 UTC (rev 4494) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java 2009-02-24 17:31:06 UTC (rev 4495) @@ -24,7 +24,7 @@ /** * Un calque pour le stockage et la manipulation des zones g\xE9om\xE9triques 2d. * @author Bertrand Marchand - * @version $Id: MdlLayer2dProfile.java,v 1.1.2.5 2008/05/13 12:10:43 bmarchan Exp $ + * @version $Id$ */ public class MdlLayer2dZone extends MdlLayer2dLine { @@ -41,7 +41,7 @@ setIconModel(1, new TraceIconModel(getIconModel(0))); setName(getExtName()); setTitle(MdlResource.MDL.getString("Zones")); - setAttributForLabels(GISAttributeConstants.BATHY); + setAttributForLabels(GISAttributeConstants.LABEL); } public MdlLayer2dZone(FSigEditor _editor) { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dZone.java ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-02-23 16:32:41
|
Revision: 4490 http://fudaa.svn.sourceforge.net/fudaa/?rev=4490&view=rev Author: bmarchan Date: 2009-02-23 16:32:31 +0000 (Mon, 23 Feb 2009) Log Message: ----------- Implementation de la recherche sur des atomiques. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindFlecheExpression.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindPointExpression.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentComposite.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentExpr.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindDialog.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionComposite.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindableItem.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/model/MvExpressionSupplierElement.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/model/MvExpressionSupplierFrNode.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/model/MvExpressionSupplierNode.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrAreteExprSupplier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrExpressionSupplierForData.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrPostExprDataSupplier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrPostExprFlecheSupplier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/reflux/TrRefluxBcNodeLayer.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarLimniModel.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindFlecheExpression.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindPointExpression.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentComposite.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentExpr.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindDialog.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionComposite.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindableItem.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/model/MvExpressionSupplierElement.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/model/MvExpressionSupplierFrNode.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/model/MvExpressionSupplierNode.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrAreteExprSupplier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrExpressionSupplierForData.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrPostExprDataSupplier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrPostExprFlecheSupplier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/reflux/TrRefluxBcNodeLayer.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarLimniModel.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -11,6 +11,7 @@ import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ebli.calque.find.CalqueFindActionDefault; import org.fudaa.ebli.calque.find.CalqueFindExpression; +import org.fudaa.ebli.commun.EbliListeSelectionMultiInterface; import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.find.EbliFindActionInterface; import org.fudaa.ebli.find.EbliFindExpressionContainerInterface; @@ -272,6 +273,10 @@ return r; } + public boolean changeSelection(final EbliListeSelectionMultiInterface _selection, int _action) { + return changeSelection(_selection.getIdxSelection(),_action); + } + /** * Selectionne l'objet suivant de l'objet en cours. * @return true si la selection a \xE9t\xE9 modifi\xE9e. Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesInterface.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -127,6 +127,14 @@ boolean changeSelection(LinearRing _p, int _action, int _mode); boolean changeSelection(LinearRing[] _p, int _action, int _mode); + + /** + * Change la selection a partir d'une liste de selection. + * @param _selection La liste de selection. + * @param _action voir les action de ZCalqueSelectionInteraction + * @return true si la selection a \xE9t\xE9 modifi\xE9e. + */ + boolean changeSelection(EbliListeSelectionMultiInterface _selection, int _action); /** * Retourne les indices de selection des sous objets selectionn\xE9s pour le point donn\xE9, sous la forme d'une liste de selection. Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesMulti.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -68,7 +68,7 @@ } } - protected boolean changeSelection(final EbliListeSelectionMulti _s, final int _action) { + public boolean changeSelection(final EbliListeSelectionMultiInterface _s, final int _action) { // Si la selection de modif est nulle, seule l'action de remplacement // est concernee. if (selection_ == null) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -7,6 +7,7 @@ */ package org.fudaa.ebli.calque; +import gnu.trove.TDoubleArrayList; import gnu.trove.TIntArrayList; import gnu.trove.TIntObjectIterator; import gnu.trove.TObjectIntHashMap; @@ -16,6 +17,11 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; import org.fudaa.ctulu.CtuluExpr; import org.fudaa.ctulu.CtuluLib; @@ -28,6 +34,10 @@ import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ebli.calque.edition.ZModeleEditable; +import org.fudaa.ebli.calque.find.CalqueFindActionAtomic; +import org.fudaa.ebli.calque.find.CalqueFindActionDefault; +import org.fudaa.ebli.calque.find.CalqueFindComponentPolygone; import org.fudaa.ebli.calque.find.CalqueFindExpression; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.commun.EbliListeSelectionMulti; @@ -35,7 +45,10 @@ import org.fudaa.ebli.commun.EbliSelectionMode; import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.commun.EbliUIProperties; +import org.fudaa.ebli.find.EbliFindActionInterface; import org.fudaa.ebli.find.EbliFindExpressionContainerInterface; +import org.fudaa.ebli.find.EbliFindExpressionDefault; +import org.fudaa.ebli.find.EbliFindable; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; @@ -70,50 +83,114 @@ * @author Fred Deniger * @version $Id$ */ - private class VariableNonAtomicFindExpression extends CalqueFindExpression { + private class VariableFindExpression extends CalqueFindExpression { - TObjectIntHashMap varAtt_; + Map<Variable,Integer> vars_; + Variable varX_; + Variable varY_; + List<Double> ord_=new ArrayList<Double>(50); - public VariableNonAtomicFindExpression() { + public VariableFindExpression() { super(ZCalqueGeometry.this.modeleDonnees()); } public void initialiseExpr(final CtuluExpr _expr) { + if (isAtomicMode_) { + initialiseExprWhenAtomic(_expr); + return; + } + super.initialiseExpr(_expr); - final GISZoneCollection coll = ((ZModeleGeometry) super.data_).getGeomData(); + final GISZoneCollection coll = ((ZModeleEditable) super.data_).getGeomData(); final int nb = coll.getNbAttributes(); if (nb > 0) { - if (varAtt_ == null) { - varAtt_ = new TObjectIntHashMap(nb); + if (vars_ == null) { + vars_ = new HashMap<Variable,Integer>(nb); } else { - varAtt_.clear(); + vars_.clear(); } for (int i = 0; i < nb; i++) { final GISAttributeInterface att = coll.getAttribute(i); - if (!att.isAtomicValue() && Number.class.isAssignableFrom(att.getDataClass())) { - varAtt_.put(_expr.addVar(att.getName(), att.getLongName()), i); + if (!att.isAtomicValue() /*&& Number.class.isAssignableFrom(att.getDataClass())*/) { + vars_.put(_expr.addVar(att.getName(), att.getLongName()), i); } } } - } - public void majVariable(final int _idx, final Variable[] _varToUpdate) { - super.majVariable(_idx, _varToUpdate); - if (varAtt_ != null && !CtuluLibArray.isEmpty(_varToUpdate)) { - final GISZoneCollection coll = ((ZModeleGeometry) super.data_).getGeomData(); + public void majVariable(final int _idx, final Variable[] _varToUpdate, final Object[] _values) { + if (isAtomicMode_) { + majVariableWhenAtomic(_idx, _varToUpdate, _values); + return; + } + + super.majVariable(_idx, _varToUpdate, _values); + if (vars_ != null && !CtuluLibArray.isEmpty(_varToUpdate)) { + final GISZoneCollection coll = ((ZModeleEditable) super.data_).getGeomData(); for (int i = _varToUpdate.length - 1; i >= 0; i--) { - if (varAtt_.containsKey(_varToUpdate[i])) { - _varToUpdate[i].setValue(CtuluLib.getDouble(((Number) coll.getDataModel(varAtt_.get(_varToUpdate[i])) - .getObjectValueAt(_idx)).doubleValue())); + if (vars_.containsKey(_varToUpdate[i])) { + _values[i]=coll.getDataModel(vars_.get(_varToUpdate[i])).getObjectValueAt(_idx); } } } } + public void initialiseExprWhenAtomic(CtuluExpr _expr) { + _expr.initVar(); + _expr.getParser().getFunctionTable().remove("str"); + + + // Indice, ajout\xE9 par defaut. + _expr.removeVar("i"); + + final GISZoneCollection coll = modeleDonnees().getGeomData(); + final int nb = coll.getNbAttributes(); + if (nb > 0) { + if (vars_ == null) { + vars_ = new HashMap<Variable,Integer>(nb); + } else { + vars_.clear(); + } + for (int i = 0; i < nb; i++) { + final GISAttributeInterface att = coll.getAttribute(i); + if (att.isAtomicValue() /*&& Number.class.isAssignableFrom(att.getDataClass())*/) { + vars_.put(_expr.addVar(att.getName(), att.getLongName()),i); + } + } + } + + varX_=_expr.addVar("x","L'abscisse des sommets"); + varY_=_expr.addVar("y","L'ordonn\xE9e des sommets"); + } + + public void majVariableWhenAtomic(int _idx, Variable[] _varToUpdate, Object[] _values) { + + final GISZoneCollection coll = modeleDonnees().getGeomData(); + int ivar; + if ((ivar=CtuluLibArray.getIndex(varX_, _varToUpdate))!=-1) + _values[ivar]=getOrdinate(_idx, 0); + if ((ivar=CtuluLibArray.getIndex(varY_, _varToUpdate))!=-1) + _values[ivar]=getOrdinate(_idx, 1); + + for (int i=0; i<_varToUpdate.length; i++) { + if ((vars_.containsKey(_varToUpdate[i]))) { + _values[i]= + ((GISAttributeModel)coll.getDataModel(vars_.get(_varToUpdate[i])).getObjectValueAt(_idx)).getObjectValues(); + } + } + } + + private Double[] getOrdinate(int _idxGeom, int _ordonnee) { + CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)modeleDonnees().getObject(_idxGeom)).getCoordinateSequence(); + ord_.clear(); + for (int i=0; i<seq.size(); i++) + ord_.add(seq.getOrdinate(i, _ordonnee)); + + return ord_.toArray(new Double[0]); + } } - /** true si edition de sommets */ + /** true si selection en mode sommets */ transient private boolean isAtomicMode_; /** Le mod\xE8le des g\xE9om\xE9tries */ protected ZModeleGeometry modele_; @@ -125,6 +202,8 @@ protected TraceSurfaceModel surfModel_; /** L'attribut utilis\xE9 pour afficher les labels */ protected GISAttributeInterface attrLabels_=null; + /** Le finder pour une recherche sur le calque */ + protected CalqueFindActionAtomic finder_; /** * Le seul constructeur, avec le mod\xE8le. @@ -138,6 +217,10 @@ surfModel_=new TraceSurfaceModel(TraceSurface.INVISIBLE, Color.BLACK,null); } +// public EbliFindActionInterface getFinder() { +// return new CalqueGISFind(this); +// } + protected EbliListeSelectionMulti creeSelectionMulti() { return new EbliListeSelectionMulti(modeleDonnees().getNombre() / 2); } @@ -225,8 +308,31 @@ } return super.changeSelection(_poly, _action, _mode); } + + public boolean changeSelection(final LinearRing[] _p, final int _action, final int _mode) { + if (!isSelectable()) return false; + + if (isAtomicMode_) { + if (_p==null) { + return false; + } + final EbliListeSelectionMulti l=new EbliListeSelectionMulti(0); + for (int i=_p.length-1; i>=0; i--) { + final EbliListeSelectionMulti li=selectionMulti(_p[i]); + l.add(li); + } + changeSelection(l, _action); + if (l.isEmpty()) { + return false; + } + return true; + } + else { + return super.changeSelection(_p, _action, _mode); + } + } - private void changeSelectionMulti(final EbliListeSelectionMulti _s, final int _action) { + public boolean changeSelectionMulti(final EbliListeSelectionMultiInterface _s, final int _action) { // Si la selection de modif est nulle, seule l'action de remplacement // est concernee. if (selectionMulti_ == null) { @@ -253,6 +359,7 @@ if (sentEvent) { fireSelectionEvent(); } + return sentEvent; } public void clearSelection() { @@ -270,12 +377,17 @@ } } - public EbliFindExpressionContainerInterface getExpressionContainer() { - if (isAtomicMode_) { - return new CalqueFindExpression(modele_); + public EbliFindActionInterface getFinder() { + // Le finder est unique pour le calque, car il ecoute les changements de propri\xE9t\xE9s du calque. + if (finder_==null) { + finder_=new CalqueFindActionAtomic(this); } - return new VariableNonAtomicFindExpression(); + return finder_; } + + public EbliFindExpressionContainerInterface getExpressionContainer() { + return new VariableFindExpression(); + } public EbliListeSelectionMultiInterface getLayerSelectionMulti() { return selectionMulti_; @@ -975,6 +1087,18 @@ return false; } + public boolean changeSelection(EbliListeSelectionMultiInterface _selection, int _action) { + if (!isSelectable()) return false; + + // Aucun controle n'est fait sur la visibilit\xE9 ou non des objets d'indices pass\xE9s. + if (isAtomicMode_) { + return changeSelectionMulti(_selection, _action); + } + else { + return super.changeSelection(_selection.getIdxSelection(),_action); + } + } + public boolean selectNext() { if (!isAtomicMode_) { return super.selectNext(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -97,14 +97,14 @@ } - public void majVariable(final int _idx, final Variable[] _varToUpdate) { - super.majVariable(_idx, _varToUpdate); + public void majVariable(final int _idx, final Variable[] _varToUpdate, final Object[] _values) { + super.majVariable(_idx, _varToUpdate, _values); if (varAtt_ != null && !CtuluLibArray.isEmpty(_varToUpdate)) { final GISZoneCollection coll = ((ZModeleEditable) super.data_).getGeomData(); for (int i = _varToUpdate.length - 1; i >= 0; i--) { if (varAtt_.containsKey(_varToUpdate[i])) { - _varToUpdate[i].setValue(CtuluLib.getDouble(((Number) coll.getDataModel(varAtt_.get(_varToUpdate[i])) - .getObjectValueAt(_idx)).doubleValue())); + _values[i]=CtuluLib.getDouble(((Number) coll.getDataModel(varAtt_.get(_varToUpdate[i])) + .getObjectValueAt(_idx)).doubleValue()); } } } Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -0,0 +1,46 @@ +/* + * @creation 11 sept. 06 + * @modification $Date: 2008-05-13 12:10:48 $ + * @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.action; + +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; + +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.commun.EbliActionChangeState; +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.ressource.EbliResource; + +/** + * Une action de selection atomique. + * @author Bertrand Marchand + * @version $Id$ + */ +public class CalqueAtomicSelectionAction extends EbliActionChangeState implements TreeSelectionListener { + + private final transient ZScene scene_; + + /** + * Cr\xE9ation de l'action. + */ + public CalqueAtomicSelectionAction(final ZScene _scn) { + super(EbliLib.getS("S\xE9lection mode sommet"),EbliResource.EBLI.getToolIcon("draw-atom") , "MODE_ATOME"); + scene_ = _scn; + } + + public void changeAction() { + scene_.setAtomicMode(isSelected()); + } + + + /** + * Changement de calque selectionn\xE9. + */ + public void valueChanged(TreeSelectionEvent e) { + setEnabled(scene_.canUseAtomicMode()); + } +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -30,7 +30,7 @@ /** * Une action pour afficher une palette d'outils GIS, reagissant au changement de calque selectionn\xE9. * @author Fred Deniger - * @version $Id: CalqueGISEditionAction.java,v 1.6.6.2 2008-05-13 12:10:47 emartin Exp $ + * @version $Id$ */ public class CalqueGISEditionAction extends EbliActionPaletteTreeModel implements PropertyChangeListener, ZSelectionListener { @@ -140,7 +140,7 @@ } protected BPalettePanelInterface buildPaletteContent() { - return new BPaletteEdition(); + return new BPaletteEdition(scene_); } /** Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -24,7 +24,10 @@ import javax.swing.JToggleButton; import javax.swing.border.EtchedBorder; +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.action.CalqueAtomicSelectionAction; import org.fudaa.ebli.commun.BPalettePanelInterface; +import org.fudaa.ebli.commun.EbliComponentFactory; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.ressource.EbliResource; @@ -33,6 +36,7 @@ import com.memoire.bu.BuInsets; import com.memoire.bu.BuLib; import com.memoire.bu.BuPanel; +import com.memoire.bu.BuToolButton; import com.memoire.bu.BuToolToggleButton; import com.memoire.bu.BuVerticalLayout; @@ -41,7 +45,7 @@ * de l'utilisateur. Elle inclu un panneau de parametre de l'outil selectionn\xE9. * * @author Fred Deniger - * @version $Id: BPaletteEdition.java,v 1.2.6.4 2008-05-13 12:10:23 bmarchan Exp $ + * @version $Id$ */ public class BPaletteEdition extends BuPanel implements ActionListener, BuInsets, BPalettePanelInterface { @@ -65,6 +69,7 @@ BPaletteEditionClientInterface target_; BuPanel editorPanel_; + ZScene scene_; public void paletteDeactivated() { if (editorPanel_ != null) { @@ -81,9 +86,10 @@ } - public BPaletteEdition() { + public BPaletteEdition(ZScene _scene) { super(); setLayout(new BuVerticalLayout(0, true, true)); + scene_=_scene; buildGlobalsActions(this); editorPanel_ = new BuPanel(); editorPanel_.setLayout(new BuBorderLayout()); @@ -223,12 +229,10 @@ } } }; - BuToolToggleButton bt = new BuToolToggleButton(); - bt.setActionCommand(ATOM_ACTION); - bt.setIcon(EbliResource.EBLI.getToolIcon("draw-atom")); - bt.setToolTipText(EbliLib.getS("Mode <SOMMET>")); - decoreButton(bt); - _target.add(bt); + BuToolToggleButton bt; + + CalqueAtomicSelectionAction act=new CalqueAtomicSelectionAction(scene_); + _target.add(act.buildToolButton(EbliComponentFactory.INSTANCE)); /* * bt = new BuToolToggleButton(); bt.setActionCommand("MODE_EDIT"); * bt.setIcon(EbliResource.EBLI.getToolIcon("draw-edit")); decoreButton(bt); group.add(bt); _target.add(bt); @@ -437,7 +441,7 @@ } public boolean isAtomicMode() { - final BuToolToggleButton bt = (BuToolToggleButton) getGlobalButton(ATOM_ACTION); + final AbstractButton bt=(AbstractButton)getGlobalButton(ATOM_ACTION); return bt.isEnabled() && bt.isSelected(); } @@ -446,7 +450,7 @@ } public void setAtomeEnable(final boolean _enable, final boolean _isSelected) { - final BuToolToggleButton bt = (BuToolToggleButton) getGlobalButton(ATOM_ACTION); + final AbstractButton bt = (AbstractButton) getGlobalButton(ATOM_ACTION); bt.setEnabled(_enable); if (_enable) { bt.setSelected(_isSelected); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -39,13 +39,13 @@ /** * @author Fred Deniger - * @version $Id: ZCalquePointEditable.java,v 1.14.6.4 2008-03-26 16:46:43 bmarchan Exp $ + * @version $Id$ */ public class ZCalquePointEditable extends ZCalquePoint implements ZCalqueEditable { /** * @author Fred Deniger - * @version $Id: ZCalquePointEditable.java,v 1.14.6.4 2008-03-26 16:46:43 bmarchan Exp $ + * @version $Id$ */ private class VariableFindExpression extends CalqueFindPointExpression { @@ -75,14 +75,14 @@ } - public void majVariable(final int _idx, final Variable[] _varToUpdate) { - super.majVariable(_idx, _varToUpdate); + public void majVariable(final int _idx, final Variable[] _varToUpdate, Object[] _values) { + super.majVariable(_idx, _varToUpdate, _values); if (varAtt_ != null && !CtuluLibArray.isEmpty(_varToUpdate)) { final GISZoneCollection coll = ((ZModelePointEditable) super.data_).getGeomData(); for (int i = _varToUpdate.length - 1; i >= 0; i--) { if (varAtt_.containsKey(_varToUpdate[i])) { - _varToUpdate[i].setValue(CtuluLib.getDouble(((Number) coll.getDataModel(varAtt_.get(_varToUpdate[i])) - .getObjectValueAt(_idx)).doubleValue())); + _values[i]=CtuluLib.getDouble(((Number) coll.getDataModel(varAtt_.get(_varToUpdate[i])) + .getObjectValueAt(_idx)).doubleValue()); } } } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAbstract.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAbstract.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -39,7 +39,7 @@ /** * @author deniger - * @version $Id: CalqueFindActionAbstract.java,v 1.5 2007-05-04 13:49:46 deniger Exp $ + * @version $Id$ */ public abstract class CalqueFindActionAbstract extends EbliFindActionAbstract { @@ -69,7 +69,7 @@ public final EbliFindComponent createFindComponent(final EbliFindable _parent) { buildExpr(); - final CalqueFindComponentPolygone poly = new CalqueFindComponentPolygone(((ZEbliCalquesPanel) _parent).getDonneesCalque()); + final EbliFindComponent poly = buildPolygoneComponent(_parent); final EbliFindComponent first = (expr_ == null) ? buildSimpleComp() : buildExprComp(); if (layer_ instanceof ZCalqueSondeInterface) { final EbliFindComponent[] cmp = new EbliFindComponent[] { first, poly, new EbliFindComponentSonde() }; @@ -89,6 +89,11 @@ BuResource.BU.getToolIcon("rechercher"), getPolygonIcon() }); } + protected EbliFindComponent buildPolygoneComponent(final EbliFindable _parent) { + final CalqueFindComponentPolygone poly = new CalqueFindComponentPolygone(((ZEbliCalquesPanel) _parent).getDonneesCalque()); + return poly; + } + private String getPolygonStr() { return EbliLib.getS("Lignes ferm\xE9es"); } @@ -150,7 +155,7 @@ } - public final boolean find(final Object _idx, final String _action, final int _selOption, final EbliFindable _parent) { + public boolean find(final Object _idx, final String _action, final int _selOption, final EbliFindable _parent) { if (_action.startsWith(CalqueFindComponentPolygone.getID())) { return findPolygone(_idx, _action, _selOption, _parent); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAbstract.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -38,14 +38,16 @@ /** * @author fred deniger - * @version $Id: CalqueFindComponentPolygone.java,v 1.2 2007-05-04 13:49:46 deniger Exp $ + * @version $Id$ */ public class CalqueFindComponentPolygone implements EbliFindComponent { private final CalqueGISTreeModel model_; TreeSelectionModel selection_; JPanel pn_; BuComboBox cb_; - + BuLabel lbOptionSel_; + BuPanel pnCb; + public CalqueFindComponentPolygone(final ZEbliCalquesPanel _panel) { this(_panel.getDonneesCalque()); } @@ -57,9 +59,14 @@ EbliLib.getS("Au moins un sommet est s\xE9lectionn\xE9"), EbliLib.getS("le barycentre est s\xE9lectionn\xE9"), }); + builComponent(); } public JComponent getComponent() { + return pn_; + } + + private void builComponent() { if (pn_ == null) { pn_ = new BuPanel(new BuBorderLayout(0, 5)); pn_.setBorder(BuBorders.EMPTY3333); @@ -69,14 +76,13 @@ sc.setPreferredHeight(80); sc.setPreferredWidth(60); pn_.add(sc, BuBorderLayout.CENTER); - final BuPanel pnCb = new BuPanel(new BuVerticalLayout(1)); - pnCb.add(new BuLabel(EbliLib.getS("Une ligne est s\xE9lectionn\xE9e si:"))); + pnCb = new BuPanel(new BuVerticalLayout(1)); + pnCb.add(lbOptionSel_=new BuLabel(EbliLib.getS("Une ligne est s\xE9lectionn\xE9e si:"))); pnCb.add(cb_); pn_.add(pnCb, BuBorderLayout.SOUTH); } - return pn_; } - + public String getSearchId() { return getID() + CtuluLibString.getString(cb_.getSelectedIndex()); } @@ -98,5 +104,14 @@ public static String getID() { return ID; } + + /** + * Pour ne rechercher que sur des atomiques. + * @param _b true : Grise certaines options. + */ + public void setFindOnAtomic(boolean _b) { + cb_.setEnabled(!_b); + lbOptionSel_.setEnabled(!_b); + } } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindComponentPolygone.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindFlecheExpression.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindFlecheExpression.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindFlecheExpression.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -7,10 +7,13 @@ */ package org.fudaa.ebli.calque.find; +import java.util.List; + import org.nfunk.jep.Variable; import org.fudaa.ctulu.CtuluExpr; import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ebli.calque.ZModeleSegment; import org.fudaa.ebli.commun.EbliLib; @@ -21,7 +24,7 @@ * Fournisseur d'expression pour les vecteurs. * * @author Fred Deniger - * @version $Id: CalqueFindFlecheExpression.java,v 1.5 2007-04-16 16:35:08 deniger Exp $ + * @version $Id$ */ public class CalqueFindFlecheExpression extends CalqueFindExpression { @@ -58,19 +61,25 @@ norm_ = _expr.addVar("vectNorm", EbliLib.getS("La norme du vecteur")); } - public void majVariable(final int _idx, final Variable[] _varToUpdate) { - super.majVariable(_idx, _varToUpdate); + public void majVariable(final int _idx, final Variable[] _varToUpdate, Object[] _values) { + super.majVariable(_idx, _varToUpdate, _values); final GrSegment seg = new GrSegment(new GrPoint(), new GrPoint()); ((ZModeleSegment) super.data_).segment(seg, _idx, true); double x = seg.o_.x_; double y = seg.o_.y_; - x_.setValue(CtuluLib.getDouble(x)); - y_.setValue(CtuluLib.getDouble(y)); + int ivar; + if ((ivar=CtuluLibArray.getIndex(x_,_varToUpdate))!=-1) + _values[ivar]=CtuluLib.getDouble(x); + if ((ivar=CtuluLibArray.getIndex(y_,_varToUpdate))!=-1) + _values[ivar]=CtuluLib.getDouble(y); x = seg.e_.x_ - x; y = seg.e_.y_ - y; - vx_.setValue(CtuluLib.getDouble(x)); - vy_.setValue(CtuluLib.getDouble(y)); - norm_.setValue(CtuluLib.getDouble(Math.sqrt(x * x + y * y))); + if ((ivar=CtuluLibArray.getIndex(vx_,_varToUpdate))!=-1) + _values[ivar]=CtuluLib.getDouble(x); + if ((ivar=CtuluLibArray.getIndex(vy_,_varToUpdate))!=-1) + _values[ivar]=CtuluLib.getDouble(y); + if ((ivar=CtuluLibArray.getIndex(norm_,_varToUpdate))!=-1) + _values[ivar]=CtuluLib.getDouble(Math.sqrt(x * x + y * y)); } } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindFlecheExpression.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindPointExpression.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindPointExpression.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindPointExpression.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -16,7 +16,7 @@ /** * @author Fred Deniger - * @version $Id: CalqueFindPointExpression.java,v 1.6 2007-04-16 16:35:08 deniger Exp $ + * @version $Id$ */ public class CalqueFindPointExpression extends CalqueFindExpression { @@ -42,16 +42,17 @@ } - public void majVariable(final int _idx, final Variable[] _varToUpdate) { - super.majVariable(_idx, _varToUpdate); - if (CtuluLibArray.containsObject(_varToUpdate, x_)) { - x_.setValue(CtuluLib.getDouble(((ZModelePoint) super.data_).getX(_idx))); + public void majVariable(final int _idx, final Variable[] _varToUpdate, Object[] _values) { + super.majVariable(_idx, _varToUpdate, _values); + int ivar; + if ((ivar=CtuluLibArray.getIndex(x_,_varToUpdate))!=-1) { + _values[ivar]=CtuluLib.getDouble(((ZModelePoint) super.data_).getX(_idx)); } - if (CtuluLibArray.containsObject(_varToUpdate, y_)) { - y_.setValue(CtuluLib.getDouble(((ZModelePoint) super.data_).getY(_idx))); + if ((ivar=CtuluLibArray.getIndex(y_,_varToUpdate))!=-1) { + _values[ivar]=CtuluLib.getDouble(((ZModelePoint) super.data_).getY(_idx)); } - if (CtuluLibArray.containsObject(_varToUpdate, z_)) { - z_.setValue(CtuluLib.getDouble(((ZModelePoint.ThreeDim) super.data_).getZ(_idx))); + if ((ivar=CtuluLibArray.getIndex(z_,_varToUpdate))!=-1) { + _values[ivar]=CtuluLib.getDouble(((ZModelePoint.ThreeDim) super.data_).getZ(_idx)); } } } \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindPointExpression.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMulti.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -31,7 +31,7 @@ idxListSelection_ = new TIntObjectHashMap(_n); } - public boolean intersection(final EbliListeSelectionMulti _selection) { + public boolean intersection(final EbliListeSelectionMultiInterface _selection) { if ((_selection == null) || _selection.isEmpty()) { final boolean r = !isEmpty(); clear(); @@ -43,7 +43,7 @@ it.advance(); final int idx = it.key(); final CtuluListSelection thisSelection = (CtuluListSelection) it.value(); - final CtuluListSelection selection = _selection.get(idx); + final CtuluListSelection selection = (CtuluListSelection)_selection.getSelection(idx); r |= thisSelection.intersection(selection); if (thisSelection.remove((CtuluListSelection) it.value())) { r = true; @@ -113,13 +113,13 @@ return true; } - public boolean xor(final EbliListeSelectionMulti _m) { + public boolean xor(final EbliListeSelectionMultiInterface _m) { if ((_m == null) || _m.isEmpty()) { return false; } boolean r = false; - final TIntObjectIterator itxor = _m.idxListSelection_.iterator(); - for (int i = _m.idxListSelection_.size(); i-- > 0;) { + final TIntObjectIterator itxor = _m.getIterator(); + for (int i = _m.getNbListSelected(); i-- > 0;) { itxor.advance(); final int idx = itxor.key(); final CtuluListSelection e = (CtuluListSelection) itxor.value(); @@ -142,13 +142,13 @@ return r; } - public boolean add(final EbliListeSelectionMulti _m) { + public boolean add(final EbliListeSelectionMultiInterface _m) { if ((_m == null) || _m.isEmpty()) { return false; } boolean r = false; - final TIntObjectIterator it = _m.idxListSelection_.iterator(); - for (int i = _m.idxListSelection_.size(); i-- > 0;) { + final TIntObjectIterator it = _m.getIterator(); + for (int i = _m.getNbListSelected(); i-- > 0;) { it.advance(); final int idx = it.key(); final CtuluListSelection e = (CtuluListSelection) it.value(); @@ -182,13 +182,13 @@ return r; } - public boolean remove(final EbliListeSelectionMulti _m) { + public boolean remove(final EbliListeSelectionMultiInterface _m) { if ((_m == null) || _m.isEmpty()) { return false; } boolean r = false; - final TIntObjectIterator it = _m.idxListSelection_.iterator(); - for (int i = _m.idxListSelection_.size(); i-- > 0;) { + final TIntObjectIterator it = _m.getIterator(); + for (int i = _m.getNbListSelected(); i-- > 0;) { it.advance(); final int idx = it.key(); final CtuluListSelection thisSelection = get(idx); @@ -203,13 +203,13 @@ return r; } - public boolean setSelection(final EbliListeSelectionMulti _m) { + public boolean setSelection(final EbliListeSelectionMultiInterface _m) { clear(); if (_m == null) { return true; } - final TIntObjectIterator it = _m.idxListSelection_.iterator(); - for (int i = _m.idxListSelection_.size(); i-- > 0;) { + final TIntObjectIterator it = _m.getIterator(); + for (int i = _m.getNbListSelected(); i-- > 0;) { it.advance(); final CtuluListSelection newS = new CtuluListSelection((CtuluListSelection) it.value()); if (!newS.isEmpty()) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -13,15 +13,15 @@ import org.fudaa.ctulu.CtuluListSelection; /** - * Un tableau permettant d'associer plusieurs listes de selections et de faire des op\xE9rations dessus. - * On acc\xE8de aux diff\xE9rentes listes par leur indice. + * Une liste de selection. Cette liste associe a chaque geometrie selectionn\xE9e une liste de sous objets selectionn\xE9s. + * On acc\xE8de aux diff\xE9rentes listes de sous objets par l'indice de la geometrie selectionnee. * * @author deniger - * @version $Id: EbliListeSelectionMultiInterface.java,v 1.11.6.1 2008-02-05 17:02:26 bmarchan Exp $ + * @version $Id$ */ public interface EbliListeSelectionMultiInterface { /** - * @return le nombre de listes de selections gerees par cette interface + * @return le nombre de geometries selectionn\xE9es */ int getNbListSelected(); @@ -29,30 +29,34 @@ * @return L'iterateur sur les listes de selections. */ TIntObjectIterator getIterator(); + /** - * @param _i l'indice demande [0,getNbList[ - * @return la liste de selection pour cet indice + * @param _i l'indice de geometrie. + * @return la liste de selection pour cette geometrie */ - CtuluListSelectionInterface getSelection(int _i); + CtuluListSelectionInterface getSelection(int _idxGeom); /** - * @return Les indices des listes de selections, stock\xE9s sous la forme d'un tableau. + * @return Les indices de geometries, stock\xE9s sous la forme d'un tableau. */ int[] getIdxSelected(); + /** - * @return Les indices des listes de selections stock\xE9s sous la forme d'une liste de selection. + * @return Les indices de g\xE9ometries stock\xE9s sous la forme d'une liste de selection. */ CtuluListSelection getIdxSelection(); /** - * @return true si toutes les listes de selection sont vides. + * @return true si aucune g\xE9om\xE9trie selectionn\xE9e. */ boolean isEmpty(); + /** - * @return l'indice de la seule selection non vide. sinon -1. + * @return l'indice de la seule g\xE9ometrie selectionn\xE9e. sinon -1. */ int isSelectionInOneBloc(); + /** - * @return le nombre total de point selectionne + * @return le nombre total de sous objets selectionnes. */ int getNbSelectedItem(); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliListeSelectionMultiInterface.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionAbstract.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionAbstract.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -10,6 +10,9 @@ import gnu.trove.TIntHashSet; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.StringTokenizer; import org.nfunk.jep.Variable; @@ -25,7 +28,7 @@ /** * @author deniger - * @version $Id: EbliFindActionAbstract.java,v 1.8 2007-05-04 13:49:44 deniger Exp $ + * @version $Id$ */ public abstract class EbliFindActionAbstract implements EbliFindActionInterface { @@ -82,7 +85,7 @@ protected EbliFindableItem layer_; protected CtuluExpr expr_; - EbliFindExpressionContainerInterface exprFiller_; + protected EbliFindExpressionContainerInterface exprFiller_; public EbliFindActionAbstract(final EbliFindableItem _layer) { layer_ = _layer; @@ -129,7 +132,8 @@ } final int nb = getNbValuesToTest(); selection = new CtuluListSelection(nb); - final Variable[] v = expr_.findUsedVar(); + final Variable[] vars =expr_.findUsedVar(); + final Object[] values=new Object[vars.length]; CtuluListSelection old = null; if (_selOption == EbliSelectionState.ACTION_AND || _selOption == EbliSelectionState.ACTION_DEL) { old = getOldSelection(); @@ -138,8 +142,11 @@ final int max = old == null ? nb - 1 : old.getMaxIndex(); for (int i = max; i >= min; i--) { if (old == null || old.isSelected(i)) { - if (v != null) { - exprFiller_.majVariable(i, v); + if (vars != null) { + exprFiller_.majVariable(i, vars, values); + for (int j=0; j<vars.length; j++) { + vars[j].setValue(values[j]); + } } final int val = (int) expr_.getParser().getValue(); if (val == 1) { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionAbstract.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionInterface.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionInterface.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -11,12 +11,15 @@ import org.fudaa.ebli.geometrie.GrBoite; /** + * Une action de recherche. Cette action de recherche est associ\xE9e \xE0 un calque. + * Elle construit les composants panneaux de recherche. * @author deniger - * @version $Id: EbliFindActionInterface.java,v 1.2 2006-12-06 09:03:36 deniger Exp $ + * @version $Id$ */ public interface EbliFindActionInterface { /** + * Recherche et effectue la selection. * @param _s la chaine a chercher * @param _findId l'action * @param _selOption l'option pour la selection Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindActionInterface.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentComposite.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentComposite.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentComposite.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -14,8 +14,9 @@ import javax.swing.event.ChangeListener; /** + * Un composant de recherche composite, pouvant gerer plusieurs panneaux de recherche. * @author Fred Deniger - * @version $Id: EbliFindComponentComposite.java,v 1.4 2006-12-06 09:03:36 deniger Exp $ + * @version $Id$ */ public class EbliFindComponentComposite extends JTabbedPane implements EbliFindComponent { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentComposite.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentExpr.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentExpr.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentExpr.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -39,8 +39,9 @@ import org.fudaa.ebli.ressource.EbliResource; /** + * Un panneau pour la recherche suivant une expression (formule). * @author deniger - * @version $Id: EbliFindComponentExpr.java,v 1.9 2007-05-04 13:49:44 deniger Exp $ + * @version $Id$ */ public class EbliFindComponentExpr extends BuPanel implements EbliFindComponent, ActionListener { @@ -157,4 +158,21 @@ return btIdx_.isSelected() ? "IDX" : "EXPR"; } + /** + * Redefinit l'expression. L'expression conditionne les variables utilisables dans le panneau. + * @param _expr L'expression. + */ + public void setExpr(CtuluExpr _expr) { + expr_=_expr; + txtFind_.setText(""); + } + + /** + * Pour une recherche uniquement sur des atomiques. Certaines options sont gris\xE9es. + * @param _b True : Recherche sur des atomiques. + */ + public void setFindOnAtomic(boolean _b) { + btIdx_.setEnabled(!_b); + if (_b) btExpr_.setSelected(true); + } } \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindComponentExpr.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindDialog.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindDialog.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindDialog.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -39,7 +39,7 @@ /** * @author deniger - * @version $Id: EbliFindDialog.java,v 1.16 2007-06-05 08:58:39 deniger Exp $ + * @version $Id$ */ public class EbliFindDialog extends BuPanel implements ActionListener, ItemListener, PropertyChangeListener { @@ -200,6 +200,9 @@ add(btpn, BuBorderLayout.SOUTH); } + /** + * Appel\xE9 quand il y a eu changement de calque de recherche. + */ private void updateAll() { pnCenter_.remove(active_); final Object cq = cbSelectModeModel_.getSelectedItem(); @@ -319,7 +322,7 @@ final Dimension dialogSize = dial_.getSize(); final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); dial_.setLocation((screenSize.width - dialogSize.width) / 2, (screenSize.height - dialogSize.height) / 2); - dial_.show(); + dial_.setVisible(true); } public void afficheInutileTest() { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindDialog.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionComposite.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionComposite.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionComposite.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -13,7 +13,7 @@ /** * @author Fred Deniger - * @version $Id: EbliFindExpressionComposite.java,v 1.3 2006-07-13 13:35:47 deniger Exp $ + * @version $Id$ */ public class EbliFindExpressionComposite implements EbliFindExpressionContainerInterface { @@ -37,9 +37,9 @@ } - public void majVariable(final int _idx,final Variable[] _varToUpdate){ - normalSupplier_.majVariable(_idx, _varToUpdate); - postSupplier_.majVariable(_idx, _varToUpdate); + public void majVariable(final int _idx,final Variable[] _varToUpdate, Object[] _values){ + normalSupplier_.majVariable(_idx, _varToUpdate, _values); + postSupplier_.majVariable(_idx, _varToUpdate, _values); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionComposite.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -12,12 +12,24 @@ import org.fudaa.ctulu.CtuluExpr; /** + * Une classe a implementer pour chaque calque qui autorise une recherche par la boite de dialogue rechercher. * @author Fred Deniger - * @version $Id: EbliFindExpressionContainerInterface.java,v 1.2 2006-04-12 15:28:02 deniger Exp $ + * @version $Id$ */ public interface EbliFindExpressionContainerInterface { + /** + * Initialise le container d'expression avec les variables pouvant \xEAtre trait\xE9es par le calque. + * @param _exp Le container d'expression + */ void initialiseExpr(CtuluExpr _exp); - void majVariable(int _idx,Variable[] _varToUpdate); - + + /** + * Initialise la valeur de chaque variable pour l'indice d'objet donn\xE9. Cette m\xE9thode est appel\xE9e pour chaque objet lors du + * lancement de la selection. + * @param _idx L'indice de l'objet dans le calque. + * @param _varToUpdate Les variables dont la valeur est a intialiser. + * @param _values Les valeurs pour les variables, dans le m\xEAme ordre. + */ + void majVariable(int _idx,Variable[] _varToUpdate, Object[] _values); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionContainerInterface.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -7,16 +7,15 @@ */ package org.fudaa.ebli.find; -import org.nfunk.jep.Variable; - import org.fudaa.ctulu.CtuluExpr; import org.fudaa.ctulu.CtuluLib; - +import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ebli.commun.EbliLib; +import org.nfunk.jep.Variable; /** * @author Fred Deniger - * @version $Id: EbliFindExpressionDefault.java,v 1.5 2007-04-16 16:35:08 deniger Exp $ + * @version $Id$ */ public class EbliFindExpressionDefault implements EbliFindExpressionContainerInterface { @@ -45,8 +44,11 @@ } - public void majVariable(final int _idx, final Variable[] _varToUpdate) { - i_.setValue(CtuluLib.getDouble(_idx + 1)); + public void majVariable(final int _idx, final Variable[] _varToUpdate, Object[] _values) { + int i=CtuluLibArray.getIndex(i_,_varToUpdate); + if (i!=-1) + _values[i]=CtuluLib.getDouble(_idx + 1); +// i_.setValue(CtuluLib.getDouble(_idx + 1)); } } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindExpressionDefault.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindable.java 2009-02-20 19:27:45 UTC (rev 4489) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/find/EbliFindable.java 2009-02-23 16:32:31 UTC (rev 4490) @@ -13,8 +13,9 @@ import org.fudaa.ebli.geometrie.GrBoite; /** + * Un ZEbliCalquesPanel permettant la recherche sur des calques. * @author Fred Deniger - * @version $Id: Ebli... [truncated message content] |
From: <bma...@us...> - 2009-02-24 12:28:52
|
Revision: 4494 http://fudaa.svn.sourceforge.net/fudaa/?rev=4494&view=rev Author: bmarchan Date: 2009-02-24 12:28:49 +0000 (Tue, 24 Feb 2009) Log Message: ----------- ZCalqueLigneBrisee derive de ZCalqueGeometry Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefsImporterFromModeleur2d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigGeomDataClosedLayerFilter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerLine.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiPlanLayer.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiProfilLayer.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -171,7 +171,7 @@ // icon_ = EbliResource.EBLI.getIcon("draw-add-pt"); // } else { - if (((ZCalqueLigneBrisee)_userObject).getModele().isGeometryFermee(_idx)) { + if (((ZCalqueLigneBrisee)_userObject).modeleDonnees().isGeometryFermee(_idx)) { icon_=EbliResource.EBLI.getIcon("draw-polygon"); } else { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGeometryVisitor.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -60,11 +60,11 @@ // } else if (_cq instanceof ZCalqueLigneBrisee && (mask_&GISLib.MASK_POLYLINE)!=0) { boolean bok=((ZCalqueLigneBrisee) _cq).modeleDonnees().getNombre() > 0; - return bok && ((ZCalqueLigneBrisee)_cq).getModele().getNbPolyligne()!=0; + return bok && ((ZCalqueLigneBrisee)_cq).modeleDonnees().getNbPolyligne()!=0; } else if (_cq instanceof ZCalqueLigneBrisee && (mask_&GISLib.MASK_POLYGONE)!=0) { boolean bok=((ZCalqueLigneBrisee)_cq).modeleDonnees().getNombre() > 0; - return bok && ((ZCalqueLigneBrisee)_cq).getModele().getNbPolygone()!=0; + return bok && ((ZCalqueLigneBrisee)_cq).modeleDonnees().getNbPolygone()!=0; } return false; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -7,10 +7,8 @@ */ package org.fudaa.ebli.calque; -import gnu.trove.TDoubleArrayList; import gnu.trove.TIntArrayList; import gnu.trove.TIntObjectIterator; -import gnu.trove.TObjectIntHashMap; import java.awt.Color; import java.awt.FontMetrics; @@ -21,10 +19,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.StringTokenizer; import org.fudaa.ctulu.CtuluExpr; -import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; @@ -36,8 +32,6 @@ import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ebli.calque.edition.ZModeleEditable; import org.fudaa.ebli.calque.find.CalqueFindActionAtomic; -import org.fudaa.ebli.calque.find.CalqueFindActionDefault; -import org.fudaa.ebli.calque.find.CalqueFindComponentPolygone; import org.fudaa.ebli.calque.find.CalqueFindExpression; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.commun.EbliListeSelectionMulti; @@ -47,11 +41,10 @@ import org.fudaa.ebli.commun.EbliUIProperties; import org.fudaa.ebli.find.EbliFindActionInterface; import org.fudaa.ebli.find.EbliFindExpressionContainerInterface; -import org.fudaa.ebli.find.EbliFindExpressionDefault; -import org.fudaa.ebli.find.EbliFindable; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrSegment; import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigne; @@ -191,7 +184,7 @@ } /** true si selection en mode sommets */ - transient private boolean isAtomicMode_; + transient protected boolean isAtomicMode_; /** Le mod\xE8le des g\xE9om\xE9tries */ protected ZModeleGeometry modele_; /** La selection a utilise dans le mode selection sommets */ @@ -217,10 +210,6 @@ surfModel_=new TraceSurfaceModel(TraceSurface.INVISIBLE, Color.BLACK,null); } -// public EbliFindActionInterface getFinder() { -// return new CalqueGISFind(this); -// } - protected EbliListeSelectionMulti creeSelectionMulti() { return new EbliListeSelectionMulti(modeleDonnees().getNombre() / 2); } @@ -894,20 +883,45 @@ } final GrPoint pt=new GrPoint(); + final GrSegment poly = new GrSegment(new GrPoint(), new GrPoint()); final GrBoite bPoly = new GrBoite(new GrPoint(), new GrPoint()); + for (int i = modele_.getNombre() - 1; i >= 0; i--) { if (!modele_.isGeometryVisible(i)) continue; modele_.getDomaineForGeometry(i, bPoly); if (bPoly.contientXY(_pt)||bPoly.distanceXY(_pt)<distanceReel) { - for (int j=modele_.getNbPointForGeometry(i)-1; j>=0; j--) { - modele_.point(pt, i, j); - if (pt.distanceXY(_pt)<distanceReel) { - final CtuluListSelection r=new CtuluListSelection(1); - r.setSelectionInterval(i, i); - return r; + + if (modele_.isGeometryReliee(i)) { + for (int j=modele_.getNbPointForGeometry(i)-1; j>0; j--) { + modele_.point(poly.e_, i, j); + modele_.point(poly.o_, i, j-1); + if (poly.distanceXY(_pt)<distanceReel) { + final CtuluListSelection r=new CtuluListSelection(1); + r.setSelectionInterval(i, i); + return r; + } } + if (modele_.isGeometryFermee(i)) { + modele_.point(poly.e_, i, 0); + modele_.point(poly.o_, i, modele_.getNbPointForGeometry(i)-1); + if (poly.distanceXY(_pt)<distanceReel) { + final CtuluListSelection r=new CtuluListSelection(1); + r.setSelectionInterval(i, i); + return r; + } + } } + else { + for (int j=modele_.getNbPointForGeometry(i)-1; j>=0; j--) { + modele_.point(pt, i, j); + if (pt.distanceXY(_pt)<distanceReel) { + final CtuluListSelection r=new CtuluListSelection(1); + r.setSelectionInterval(i, i); + return r; + } + } + } } } return null; @@ -1171,7 +1185,7 @@ return r; } - private LineString createLineFromSelection(final int _i, final CtuluListSelectionInterface _selection, final int _nbSelected) { + protected LineString createLineFromSelection(final int _i, final CtuluListSelectionInterface _selection, final int _nbSelected) { final GISCoordinateSequenceContainerInterface geom = (GISCoordinateSequenceContainerInterface) modele_.getGeomData().getGeometry(_i); final Coordinate[] cs = new Coordinate[_nbSelected]; final int[] idx = _selection.getSelectedIndex(); @@ -1185,11 +1199,14 @@ if (isSelectionEmpty()) { return null; } - // en mode normal (pas de vertex selectionne), on renvoie la ligne s\xE9lectionn\xE9e + // en mode normal (pas de vertex selectionne), on renvoie la ligne s\xE9lectionn\xE9e, si ligne. Sinon null. if (!isAtomicMode()) { -// return getLayerSelection().getNbSelectedIndex() == 1 ? (LineString) modele_.getGeomData().getGeometry( -// getLayerSelection().getMaxIndex()) : null; - throw new UnsupportedOperationException("Can't create line from vertices"); + if (getLayerSelection().getNbSelectedIndex() == 1) { + GISCoordinateSequenceContainerInterface geom=(GISCoordinateSequenceContainerInterface) + modeleDonnees().getGeomData().getGeometry(getLayerSelection().getMaxIndex()); + if (geom instanceof LineString) return (LineString)geom; + } + return null; } // mode vertex final EbliListeSelectionMultiInterface select = getLayerSelectionMulti(); @@ -1204,7 +1221,7 @@ return createLineFromSelection(i, selection, nbSelected); } else if (nbSelected >= 2) { - final int nbPointForLigne = modele_.getNbPointForGeometry(i); + final int nbPointForLigne = modeleDonnees().getNbPointForGeometry(i); final int[] res = CtuluListSelection.isSelectionContiguous(select.getSelection(i), nbPointForLigne); if (res == null) { return null; @@ -1212,7 +1229,21 @@ // selection normale if (res[0] < res[1]) { return createLineFromSelection(i, selection, nbSelected); + } else if (modeleDonnees().isGeometryFermee(i)) { + final Coordinate[] cs = new Coordinate[nbSelected]; + int csi = 0; + final CoordinateSequence seq = ((GISCoordinateSequenceContainerInterface)modeleDonnees() + .getGeomData().getGeometry(i)).getCoordinateSequence(); + for (int j = res[0]; j < nbPointForLigne; j++) { + cs[csi++] = seq.getCoordinate(j); + } + for (int j = 0; j <= res[1]; j++) { + cs[csi++] = seq.getCoordinate(j); + } + return GISGeometryFactory.INSTANCE.createLineString(cs); + } + } } else if (select.getNbListSelected() == 2) { final int[] idx = select.getIdxSelected(); @@ -1220,8 +1251,10 @@ final CtuluListSelectionInterface selection2 = select.getSelection(idx[1]); if (selection1.getNbSelectedIndex() == 1 && selection2.getNbSelectedIndex() == 1) { final Coordinate[] cs = new Coordinate[2]; - cs[0] = ((Geometry)modele_.getGeomData().getGeometry(idx[0])).getCoordinates()[selection1.getMaxIndex()]; - cs[1] = ((Geometry)modele_.getGeomData().getGeometry(idx[1])).getCoordinates()[selection2.getMaxIndex()]; + cs[0] = ((GISCoordinateSequenceContainerInterface) + modeleDonnees().getGeomData().getGeometry(idx[0])).getCoordinateSequence().getCoordinate(selection1.getMaxIndex()); + cs[1] = ((GISCoordinateSequenceContainerInterface) + modeleDonnees().getGeomData().getGeometry(idx[1])).getCoordinateSequence().getCoordinate(selection2.getMaxIndex()); return GISGeometryFactory.INSTANCE.createLineString(cs); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -7,54 +7,24 @@ */ package org.fudaa.ebli.calque; -import gnu.trove.TIntArrayList; -import gnu.trove.TIntObjectIterator; -import gnu.trove.TObjectIntHashMap; - import java.awt.Color; import java.awt.FontMetrics; -import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; -import org.fudaa.ctulu.CtuluExpr; -import org.fudaa.ctulu.CtuluLib; -import org.fudaa.ctulu.CtuluLibArray; -import org.fudaa.ctulu.CtuluListSelection; -import org.fudaa.ctulu.CtuluListSelectionInterface; -import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ctulu.gis.GISAttributeModel; -import org.fudaa.ctulu.gis.GISGeometryFactory; -import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollection; -import org.fudaa.ebli.calque.edition.ZModeleEditable; -import org.fudaa.ebli.calque.find.CalqueFindExpression; import org.fudaa.ebli.commun.EbliLib; -import org.fudaa.ebli.commun.EbliListeSelectionMulti; -import org.fudaa.ebli.commun.EbliListeSelectionMultiInterface; -import org.fudaa.ebli.commun.EbliSelectionMode; -import org.fudaa.ebli.commun.EbliSelectionState; import org.fudaa.ebli.commun.EbliUIProperties; import org.fudaa.ebli.controle.BSelecteurLineModel; -import org.fudaa.ebli.find.EbliFindExpressionContainerInterface; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; -import org.fudaa.ebli.geometrie.GrSegment; import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigne; import org.fudaa.ebli.trace.TraceLigneModel; -import org.nfunk.jep.Variable; -import com.memoire.fu.FuLog; -import com.vividsolutions.jts.algorithm.SIRtreePointInRing; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.CoordinateSequence; -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.LineString; -import com.vividsolutions.jts.geom.LinearRing; - /** * Un calque g\xE9rant des lignes bris\xE9es, ouvertes ou ferm\xE9es \xE0 un niveau global ou atomique.<p> * Le niveau atomique des lignes bris\xE9es est le niveau points. Le calque s'appuie sur un mod\xE8le @@ -63,73 +33,14 @@ * @author Fred Deniger * @version $Id$ */ -public class ZCalqueLigneBrisee extends ZCalqueAffichageDonneesLineAbstract implements ZModelGeometryListener { +public class ZCalqueLigneBrisee extends ZCalqueGeometry { - /** - * @author Fred Deniger - * @version $Id$ - */ - private class VariableNonAtomicFindExpression extends CalqueFindExpression { - - TObjectIntHashMap varAtt_; - - public VariableNonAtomicFindExpression() { - super(ZCalqueLigneBrisee.this.getModele()); - } - - public void initialiseExpr(final CtuluExpr _expr) { - super.initialiseExpr(_expr); - final GISZoneCollection coll = ((ZModeleEditable) super.data_).getGeomData(); - final int nb = coll.getNbAttributes(); - if (nb > 0) { - if (varAtt_ == null) { - varAtt_ = new TObjectIntHashMap(nb); - } else { - varAtt_.clear(); - } - for (int i = 0; i < nb; i++) { - final GISAttributeInterface att = coll.getAttribute(i); - if (!att.isAtomicValue() && Number.class.isAssignableFrom(att.getDataClass())) { - varAtt_.put(_expr.addVar(att.getName(), att.getLongName()), i); - } - } - } - - } - - public void majVariable(final int _idx, final Variable[] _varToUpdate, final Object[] _values) { - super.majVariable(_idx, _varToUpdate, _values); - if (varAtt_ != null && !CtuluLibArray.isEmpty(_varToUpdate)) { - final GISZoneCollection coll = ((ZModeleEditable) super.data_).getGeomData(); - for (int i = _varToUpdate.length - 1; i >= 0; i--) { - if (varAtt_.containsKey(_varToUpdate[i])) { - _values[i]=CtuluLib.getDouble(((Number) coll.getDataModel(varAtt_.get(_varToUpdate[i])) - .getObjectValueAt(_idx)).doubleValue()); - } - } - } - } - - } - - /** - * true si edition de points. - */ - transient private boolean isAtomicMode_; - + /** Le modele d'icone pour les lignes ouvertes */ protected TraceIconModel iconeModelOuvert_; - + /** Le modele de lignes pour les lignes ouvertes */ protected TraceLigneModel ligneModelOuvert_; - - protected ZModeleLigneBrisee modele_; - /** La selection a utilise dans le mode selection de points de polygone. */ - protected EbliListeSelectionMulti selectionMulti_; - /** Pour le trac\xE9 de la selection en mode atomique. */ - protected ZSelectionTrace traceAtomic_; /** On dessine une fl\xE8che sur chaque ligne pour indiquer le sens de celle-ci. */ protected boolean showLineOrientation_; - /** L'attribut utilis\xE9 pour afficher les labels */ - protected GISAttributeInterface attrLabels_=null; /** * @@ -142,6 +53,7 @@ * @param _modele le modele du calque */ public ZCalqueLigneBrisee(final ZModeleLigneBrisee _modele) { + super(_modele); modele_ = _modele; if(modele_!=null) modele_.addModelListener(this); @@ -162,10 +74,6 @@ } } - protected EbliListeSelectionMulti creeSelectionMulti() { - return new EbliListeSelectionMulti(modeleDonnees().getNombre() / 2); - } - protected void initTrace(final TraceLigneModel _ligne, final int _idxPoly) { final int idx = modele_.isGeometryFermee(_idxPoly) ? 0 : 1; _ligne.updateData(getLineModel(idx)); @@ -188,130 +96,6 @@ } - protected void paintSelectionMulti(final Graphics _g, final ZSelectionTrace _trace, final GrMorphisme _versEcran, - final GrBoite _clipReel) { - if ((isRapide()) || (isSelectionEmpty())) { - return; - } - final GrBoite clip = _clipReel; - if (!getDomaine().intersectXY(clip)) { - return; - } - Color cs = _trace.getColor(); - if (isAttenue()) { - cs = attenueCouleur(cs); - } - _g.setColor(cs); - final TraceIcon ic = _trace.getIconeInterne(); - final TIntObjectIterator it = selectionMulti_.getIterator(); - final GrPoint p = new GrPoint(); - final GrMorphisme versEcran = _versEcran; - for (int i = selectionMulti_.getNbListSelected(); i-- > 0;) { - it.advance(); - final CtuluListSelectionInterface s = (CtuluListSelectionInterface) it.value(); - if (!s.isEmpty()) { - final int idxPoly = it.key(); - final int min = s.getMinIndex(); - for (int j = s.getMaxIndex(); j >= min; j--) { - if (s.isSelected(j)) { - modele_.point(p, idxPoly, j); - if (clip.contientXY(p)) { - p.autoApplique(versEcran); - ic.paintIconCentre(this, _g, p.x_, p.y_); - } - - } - } - } - } - } - - public boolean changeSelection(final GrPoint _pt, final int _tolerancePixel, final int _action) { - if (!isSelectable()) return false; - - if (isAtomicMode_) { - final EbliListeSelectionMulti l = selectionMulti(_pt, _tolerancePixel, false); - changeSelectionMulti(l, _action); - if ((l == null) || (l.isEmpty())) { - return false; - } - return true; - } - return super.changeSelection(_pt, _tolerancePixel, _action); - } - - public boolean changeSelection(final LinearRing _poly, final int _action, final int _mode) { - if (!isSelectable()) return false; - - if (isAtomicMode_) { - final EbliListeSelectionMulti l = selectionMulti(_poly); - changeSelectionMulti(l, _action); - if ((l == null) || (l.isEmpty())) { - return false; - } - return true; - } - return super.changeSelection(_poly, _action, _mode); - } - - public void changeSelectionMulti(final EbliListeSelectionMulti _s, final int _action) { - // Si la selection de modif est nulle, seule l'action de remplacement - // est concernee. - if (selectionMulti_ == null) { - selectionMulti_ = creeSelectionMulti(); - } - boolean sentEvent = false; - switch (_action) { - case EbliSelectionState.ACTION_ADD: - sentEvent = selectionMulti_.add(_s); - break; - case EbliSelectionState.ACTION_DEL: - sentEvent = selectionMulti_.remove(_s); - break; - case EbliSelectionState.ACTION_XOR: - sentEvent = selectionMulti_.xor(_s); - break; - case EbliSelectionState.ACTION_REPLACE: - selectionMulti_.setSelection(_s); - sentEvent = true; - break; - default: - break; - } - if (sentEvent) { - fireSelectionEvent(); - } - } - - public void clearSelection() { - if (!isSelectable()) return; - - // dans le mode edition de noeuds - if (isAtomicMode_) { - if (selectionMulti_ != null && !selectionMulti_.isEmpty()) { - - selectionMulti_.clear(); - fireSelectionEvent(); - } - } else { - super.clearSelection(); - } - } - - /** - * @return true si le modele contient des polygones. - */ - public boolean containsPolygone() { - return modele_.containsPolygone(); - } - - public EbliFindExpressionContainerInterface getExpressionContainer() { - if (isAtomicMode_) { - return new CalqueFindExpression(modele_); - } - return new VariableNonAtomicFindExpression(); - } - public TraceIconModel getIconModel(final int _idx) { if (_idx == 1) { return iconeModelOuvert_; @@ -319,10 +103,6 @@ return iconModel_; } - public EbliListeSelectionMultiInterface getLayerSelectionMulti() { - return selectionMulti_; - } - public TraceLigneModel getLineModel(final int _idx) { if (_idx == 1) { return ligneModelOuvert_; @@ -330,66 +110,10 @@ return ligneModel_; } - /** - * @return Modele - */ - public ZModeleLigneBrisee getModele() { - return modele_; - } - - public int getNbSelected() { - if (isSelectionEmpty()) { - return 0; - } - if (isAtomicMode_) { - return selectionMulti_.getNbListSelected(); - } - return super.getNbSelected(); - } - public int getNbSet() { return 2; } - public int[] getSelectedIndex() { - if (isSelectionEmpty()) { - return null; - } - if (isAtomicMode_) { - return selectionMulti_.getIdxSelected(); - } - return super.getSelectedIndex(); - } - - public int[] getSelectedObjectInTable() { - if (isSelectionEmpty()) { - return null; - } - if (!isAtomicMode_) { - return super.getSelectedObjectInTable(); - } - final EbliListeSelectionMultiInterface multi = getLayerSelectionMulti(); - int nb = 0; - // 20 points par lignes - final TIntArrayList list = new TIntArrayList(modele_.getNombre() * 20); - final int nbLigne = modele_.getNombre(); - for (int i = 0; i < nbLigne; i++) { - final CtuluListSelectionInterface sel = multi.getSelection(i); - if (sel != null) { - final int max = sel.getMaxIndex(); - for (int j = sel.getMinIndex(); j <= max; j++) { - if (sel.isSelected(j)) { - list.add(nb + j); - } - } - - } - nb += modele_.getNbPointForGeometry(i); - } - - return list.toNativeArray(); - } - public String getSetTitle(final int _idx) { if (_idx == 0) { return EbliLib.getS("Lignes ferm\xE9es"); @@ -397,43 +121,6 @@ return EbliLib.getS("Lignes ouvertes"); } - public GrBoite getDomaineOnSelected() { - if (isSelectionEmpty()) { - return null; - } - final Envelope env = new Envelope(); - if (isAtomicMode_) { - final EbliListeSelectionMultiInterface multi = getLayerSelectionMulti(); - final TIntObjectIterator it = multi.getIterator(); - final Coordinate c = new Coordinate(); - for (int i = multi.getNbListSelected(); i-- > 0;) { - it.advance(); - final CtuluListSelectionInterface atomSel = (CtuluListSelectionInterface) it.value(); - final LineString g = (LineString) modele_.getGeomData().getGeometry(it.key()); - final int max = atomSel.getMaxIndex(); - for (int j = atomSel.getMinIndex(); j <= max; j++) { - if (atomSel.isSelected(j)) { - g.getCoordinateSequence().getCoordinate(j, c); - env.expandToInclude(c); - } - } - } - - } else { - final CtuluListSelectionInterface sel = getLayerSelection(); - final int max = sel.getMaxIndex(); - for (int i = sel.getMinIndex(); i <= max; i++) { - if (sel.isSelected(i)) { - env.expandToInclude(modele_.getGeomData().getGeometry(i).getEnvelopeInternal()); - } - } - } - final GrBoite r = new GrBoite(); - r.ajuste(env.getMaxX(), env.getMaxY(), 0); - r.ajuste(env.getMinX(), env.getMinY(), 0); - return r; - } - public void initFrom(final EbliUIProperties _p) { if (_p != null) { super.initFrom(_p); @@ -446,75 +133,7 @@ } } - public void inverseSelection() { - if (!isSelectable()) return; - - if (!isAtomicMode_) { -// super.inverseSelection(); - if (isSelectionEmpty()) { - return; - } - initSelection(); - selection_.inverse(modeleDonnees().getNombre()); - for (int i=0; i<modele_.getNombre(); i++) { - if (!modele_.isGeometryVisible(i)) selection_.remove(i); - } - fireSelectionEvent(); - return; - } - if (isSelectionEmpty()) { - return; - } - for (int i = modele_.getNombre() - 1; i >= 0; i--) { - if (!modele_.isGeometryVisible(i)) continue; - final CtuluListSelection s = selectionMulti_.get(i); - if (s != null) { - s.inverse(modele_.getNbPointForGeometry(i)); - } - } - fireSelectionEvent(); - } - /** - * @return true si on est dans le mode edition de noeuds - */ - public boolean isAtomicMode() { - return isAtomicMode_; - } - - /** - * D\xE9finit l'attribut atomique pris pour afficher les labels. - * @param _att L'attribut. Si Null : Pas d'affichage de labels. - */ - public void setAttributForLabels(GISAttributeInterface _att) { - if (_att==null || !_att.isAtomicValue()) - attrLabels_=null; - else - attrLabels_=_att; - repaint(); - } - - public boolean isConfigurable() { - return true; - } - - public boolean isPaletteModifiable() { - return false; - } - - /** - * Indique si la s\xE9lection est vide. - * @return true Si aucun objet ni aucun point en mode atomique selectionn\xE9. - */ - public boolean isSelectionEmpty() { - return isAtomicMode_ ? selectionMulti_ == null ? true : selectionMulti_.isEmpty() : super.isSelectionEmpty(); - } - - public boolean isTitleModifiable() { - return true; - } - - /** * @param _modele Modele */ public void modele(final ZModeleLigneBrisee _modele) { @@ -529,8 +148,8 @@ } } - public ZModeleDonnees modeleDonnees() { - return getModele(); + public ZModeleLigneBrisee modeleDonnees() { + return (ZModeleLigneBrisee)modele_; } /** @@ -680,7 +299,7 @@ // Enfin les labels sur les atomiques. if (attrLabels_!=null && !isRapide()) { - GISZoneCollection geomData = getModele().getGeomData(); + GISZoneCollection geomData = modeleDonnees().getGeomData(); int idxLabels=geomData.getIndiceOf(attrLabels_); if (idxLabels!=-1) { @@ -740,308 +359,6 @@ } } - public void paintSelection(final Graphics2D _g, final ZSelectionTrace _trace, final GrMorphisme _versEcran, - final GrBoite _clipReel) { - if (isSelectionEmpty()) return; - - if (isAtomicMode_) { - if (traceAtomic_==null) { - Color cg=attenueCouleur(_trace.getColor()); - Color cs=_trace.getColor(); - traceAtomic_=new ZSelectionTrace(cg,cs); - } - CtuluListSelection containers=new CtuluListSelection(selectionMulti_.getIdxSelection()); - paintSelectionSimple(_g, traceAtomic_, _versEcran, _clipReel, containers); - paintSelectionMulti(_g, traceAtomic_, _versEcran, _clipReel); - } else { - paintSelectionSimple(_g, _trace, _versEcran, _clipReel, selection_); - } - - } - - public void paintSelectionSimple(final Graphics _g, final ZSelectionTrace _trace, final GrMorphisme _versEcran, - final GrBoite _clipReel, CtuluListSelection _containers) { - if ((isRapide()) || (isSelectionEmpty())) { - return; - } - final GrBoite clip = _clipReel; - if (getDomaine() == null || !getDomaine().intersectXY(clip)) { - return; - } - final GrMorphisme versEcran = _versEcran; - Color cs = _trace.getColor(); - if (isAttenue()) { - cs = attenueCouleur(cs); - } - _g.setColor(cs); - final TraceLigne tlSelection = _trace.getLigne(); - final TraceIcon ic = _trace.getIcone(); - final int nb = Math.min(_containers.getMaxIndex(), modele_.getNombre() - 1); - - final GrBoite bPoly = new GrBoite(); - bPoly.e_ = new GrPoint(); - bPoly.o_ = new GrPoint(); - for (int i = nb; i >= 0; i--) { - if (!_containers.isSelected(i)) { - continue; - } - modele_.getDomaineForGeometry(i, bPoly); - // Si la boite du polygone n'est pas dans la boite d'affichage on passe - if (bPoly.intersectionXY(clip) == null) { - continue; - } - final int nbPoints = modele_.getNbPointForGeometry(i); - final GrPoint ptOri = new GrPoint(); - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); - ic.paintIconCentre(this, _g, ptOri.x_, ptOri.y_); - final GrPoint ptDest = new GrPoint(); - for (int j = nbPoints - 2; j >= 0; j--) { - // le point de dest est initialise - modele_.point(ptDest, i, j); - ptDest.autoApplique(versEcran); - ic.paintIconCentre(this, _g, ptDest.x_, ptDest.y_); - tlSelection.dessineTrait((Graphics2D) _g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); - ptOri.initialiseAvec(ptDest); - } - if (modele_.isGeometryFermee(i)) { - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); - tlSelection.dessineTrait((Graphics2D) _g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); - } - } - - } - - public void selectAll() { - if (!isVisible() || !isSelectable()) return; - - if (!isAtomicMode_) { -// super.selectAll(); - initSelection(); - selection_.addInterval(0, modele_.getNombre() - 1); - for (int i=0; i<modele_.getNombre(); i++) { - if (!modele_.isGeometryVisible(i)) selection_.remove(i); - } - fireSelectionEvent(); - return; - } - if (selectionMulti_ == null) { - selectionMulti_ = creeSelectionMulti(); - } - for (int i = modele_.getNombre() - 1; i >= 0; i--) { - if (!modele_.isGeometryVisible(i)) continue; - - CtuluListSelection s = selectionMulti_.get(i); - if (s == null) { - s = new CtuluListSelection(modele_.getNbPointForGeometry(i)); - selectionMulti_.set(i, s); - } - s.setSelectionInterval(0, modele_.getNbPointForGeometry(i) - 1); - } - fireSelectionEvent(); - } - - public CtuluListSelection selection(final GrPoint _pt, final int _tolerance) { - if (modele_.getNombre() == 0) { - return null; - } - final GrBoite bClip = getDomaine(); - if (bClip == null) { - return null; - } - final double distanceReel = GrMorphisme.convertDistanceXY(getVersReel(), _tolerance); - if ((!bClip.contientXY(_pt)) && (bClip.distanceXY(_pt) > distanceReel)) { - return null; - } - - // bClip = getClipReel(getGraphics()); - final GrSegment poly = new GrSegment(new GrPoint(), new GrPoint()); - final GrBoite bPoly = new GrBoite(new GrPoint(), new GrPoint()); - for (int i = modele_.getNombre() - 1; i >= 0; i--) { - if (!modele_.isGeometryVisible(i)) continue; - - modele_.getDomaineForGeometry(i, bPoly); - if (bPoly.contientXY(_pt)||bPoly.distanceXY(_pt)<distanceReel) { - for (int j=modele_.getNbPointForGeometry(i)-1; j>0; j--) { - modele_.point(poly.e_, i, j); - modele_.point(poly.o_, i, j-1); - if (poly.distanceXY(_pt)<distanceReel) { - final CtuluListSelection r=new CtuluListSelection(1); - r.setSelectionInterval(i, i); - return r; - } - } - if (modele_.isGeometryFermee(i)) { - modele_.point(poly.e_, i, 0); - modele_.point(poly.o_, i, modele_.getNbPointForGeometry(i)-1); - if (poly.distanceXY(_pt)<distanceReel) { - final CtuluListSelection r=new CtuluListSelection(1); - r.setSelectionInterval(i, i); - return r; - } - } - } - } - return null; - } - - public CtuluListSelection selection(final LinearRing _poly, final int _mode) { - if (modele_.getNombre() == 0 || !isVisible()) { - return null; - } - 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_); - // si l'envelop du polygone n'intersect pas le domaine, il n'y a pas de - // selection - if (!polyEnv.intersects(domaine)) { - return null; - } - - final SIRtreePointInRing tester = new SIRtreePointInRing(_poly); - final Coordinate c = new Coordinate(); - final CtuluListSelection r = creeSelection(); - final GrPoint p = new GrPoint(); - final GrBoite bPoly = new GrBoite(new GrPoint(), new GrPoint()); - for (int i = modele_.getNombre() - 1; i >= 0; i--) { - if (!modele_.isGeometryVisible(i)) continue; - - modele_.getDomaineForGeometry(i, bPoly); - // si le poly est dans dans le poly de selection - boolean selected = false; - if (_mode == EbliSelectionMode.MODE_ALL) { - if (polyEnv.contains(bPoly.e_.x_, bPoly.e_.y_) && polyEnv.contains(bPoly.o_.x_, bPoly.o_.y_)) { - selected = true; - for (int j = modele_.getNbPointForGeometry(i) - 1; (j >= 0) && selected; j--) { - modele_.point(p, i, j); - c.x = p.x_; - c.y = p.y_; - if (!tester.isInside(c)) { - selected = false; - } - } - } - } else if (_mode == EbliSelectionMode.MODE_ONE) { - if (polyEnv.intersects(bPoly.getEnv())) { - for (int j = modele_.getNbPointForGeometry(i) - 1; (j >= 0) && !selected; j--) { - modele_.point(p, i, j); - c.x = p.x_; - c.y = p.y_; - if (GISLib.isSelectedEnv(c, _poly, polyEnv, tester)) { - selected = true; - } - } - } - - } else if (_mode == EbliSelectionMode.MODE_CENTER) { - final CoordinateSequence coordinateSequence = modele_.getGeomData().getCoordinateSequence(i); - c.x = GISLib.getMoyX(coordinateSequence); - c.y = GISLib.getMoyY(coordinateSequence); - selected = GISLib.isSelectedEnv(c, _poly, polyEnv, tester); - - } - if (selected) { - r.add(i); - } - } - if (r.isEmpty()) { - return null; - } - return r; - } - - public EbliListeSelectionMulti selectionMulti(final GrPoint _ptReel, final int _tolerancePixel, boolean _inDepth) { - final GrMorphisme versReel = getVersReel(); - GrBoite bClip = getDomaine(); - if (bClip == null || (!bClip.contientXY(_ptReel)) && (bClip.distanceXY(_ptReel) > _tolerancePixel)) { - return null; - } - final double distanceReel = GrMorphisme.convertDistanceXY(versReel, _tolerancePixel); - bClip = getClipReel(getGraphics()); - final GrPoint p = new GrPoint(); - final GrBoite btLigne = new GrBoite(); - - EbliListeSelectionMulti sel=null; - for (int i = modele_.getNombre() - 1; i >= 0; i--) { - if (!modele_.isGeometryVisible(i)) continue; - - modele_.getDomaineForGeometry(i, btLigne); - if (btLigne.contientXY(_ptReel) || btLigne.distanceXY(_ptReel) < distanceReel) { - for (int j = modele_.getNbPointForGeometry(i) - 1; j >= 0; j--) { - modele_.point(p, i, j); - if (bClip.contientXY(p) && (p.distanceXY(_ptReel) < distanceReel)) { - if (sel==null) - sel = new EbliListeSelectionMulti(1); - sel.add(i, j); - if (!_inDepth) - return sel; - } - } - } - } - return sel; - } - - public EbliListeSelectionMulti selectionMulti(final LinearRing _poly) { - if (modele_.getNombre() == 0 || !isVisible()) { - return null; - } - 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_); - // si l'envelop du polygone n'intersect pas le domaine, il n'y a pas de - // selection - if (!polyEnv.intersects(domaine)) { - return null; - } - final EbliListeSelectionMulti r = creeSelectionMulti(); - final GrPoint p = new GrPoint(); - final SIRtreePointInRing tester = new SIRtreePointInRing(_poly); - final Coordinate c = new Coordinate(); - for (int i = modele_.getNombre() - 1; i >= 0; i--) { - if (!modele_.isGeometryVisible(i)) continue; - - CtuluListSelection l = null; - final int nbPt = modele_.getNbPointForGeometry(i); - for (int j = nbPt - 1; j >= 0; j--) { - modele_.point(p, i, j); - c.x = p.x_; - c.y = p.y_; - if ((polyEnv.contains(c)) && (tester.isInside(c))) { - if (l == null) { - l = new CtuluListSelection(nbPt); - } - l.add(j); - } - } - if (l != null) { - r.set(i, l); - } - } - if (r.isEmpty()) { - return null; - } - return r; - } - - /** - * D\xE9finit que les modifications d'objets auront lieu en mode atomique. - * @param _new true : Modifications en mode atomique. - * @return true si l'appel a produit un changement de mode. - */ - public boolean setAtomicMode(final boolean _new) { - if (_new != isAtomicMode_) { - isAtomicMode_ = _new; - firePropertyChange("mode", !isAtomicMode_, isAtomicMode_); - clearSelection(); - return true; - } - return false; - } - public void setLineModelOuvert(final TraceLigneModel _model) { if (_model == null) { return; @@ -1054,160 +371,4 @@ firePropertyChange(BSelecteurLineModel.PROPERTY + "open", null, ligneModelOuvert_); } - public boolean setSelection(final int[] _idx) { - if (!isSelectable()) return false; - - // Aucun controle n'est fait sur la visibilit\xE9 ou non des objets d'indices pass\xE9s. - if (!isAtomicMode_) { - return super.setSelection(_idx); - } - // TODO : Traitement a faire si on est en mode atomique. - FuLog.warning("EBL:ZCalqueLigneBrisee.setSelection() can't be called in atomic mode"); - return false; - } - - public boolean selectNext() { - if (!isAtomicMode_) { - return super.selectNext(); - } - // Ne fonctionne que sur une seule g\xE9om\xE9trie a la fois. - else { - if (selectionMulti_==null) - return false; - if (selectionMulti_.getNbListSelected()!=1) - return false; - - int idxGeom=selectionMulti_.getIdxSelected()[0]; - - CtuluListSelection s=selectionMulti_.get(idxGeom); - if (s==null) - return false; - int idx=s.getMaxIndex(); - if (idx>=getModele().getNbPointForGeometry(idxGeom)-1) - return false; - s.setSelectionInterval(idx+1,idx+1); - fireSelectionEvent(); - return true; - } - } - - public boolean selectPrevious() { - if (!isAtomicMode_) { - return super.selectPrevious(); - } - // Ne fonctionne que sur une seule g\xE9om\xE9trie a la fois. - else { - if (selectionMulti_==null) - return false; - if (selectionMulti_.getNbListSelected()!=1) - return false; - - int idxGeom=selectionMulti_.getIdxSelected()[0]; - - CtuluListSelection s=selectionMulti_.get(idxGeom); - if (s==null) - return false; - int idx=s.getMinIndex(); - if (idx<=0) - return false; - s.setSelectionInterval(idx-1,idx-1); - fireSelectionEvent(); - return true; - } - } - - public boolean setTitle(final String _title) { - final boolean r = super.setTitle(_title); - if (r && modele_ != null && modele_.getGeomData() != null) { - modele_.getGeomData().setTitle(_title, null); - } - return r; - } - - private LineString createLineFromSelection(final int _i, final CtuluListSelectionInterface _selection, final int _nbSelected) { - final LineString geom = (LineString) getModele().getGeomData().getGeometry(_i); - final Coordinate[] cs = new Coordinate[_nbSelected]; - final int[] idx = _selection.getSelectedIndex(); - for (int j = 0; j < _nbSelected; j++) { - cs[j] = geom.getCoordinateN(idx[j]); - } - return GISGeometryFactory.INSTANCE.createLineString(cs); - } - - public LineString getSelectedLine() { - if (isSelectionEmpty()) { - return null; - } - // en mode normal (pas de vertex selectionne), on renvoie la ligne s\xE9lectionn\xE9e - if (!isAtomicMode()) { - return getLayerSelection().getNbSelectedIndex() == 1 ? (LineString) getModele().getGeomData().getGeometry( - getLayerSelection().getMaxIndex()) : null; - } - // mode vertex - final EbliListeSelectionMultiInterface select = getLayerSelectionMulti(); - // mode vertex - // la selection se situe dans la meme ligne - if (select.getNbListSelected() == 1) { - final int i = select.getIdxSelected()[0]; - final CtuluListSelectionInterface selection = select.getSelection(i); - final int nbSelected = selection.getNbSelectedIndex(); - // deux sommets s\xE9lectionn\xE9s: on choisit la ligne en les 2 sommets - if (nbSelected == 2) { - return createLineFromSelection(i, selection, nbSelected); - - } else if (nbSelected >= 2) { - final int nbPointForLigne = getModele().getNbPointForGeometry(i); - final int[] res = CtuluListSelection.isSelectionContiguous(select.getSelection(i), nbPointForLigne); - if (res == null) { - return null; - } - // selection normale - if (res[0] < res[1]) { - return createLineFromSelection(i, selection, nbSelected); - } else if (getModele().isGeometryFermee(i)) { - final Coordinate[] cs = new Coordinate[nbSelected]; - int csi = 0; - final LineString string = (LineString) getModele().getGeomData().getGeometry(i); - for (int j = res[0]; j < nbPointForLigne; j++) { - cs[csi++] = string.getCoordinateN(j); - } - for (int j = 0; j <= res[1]; j++) { - cs[csi++] = string.getCoordinateN(j); - } - return GISGeometryFactory.INSTANCE.createLineString(cs); - - } - - } - } else if (select.getNbListSelected() == 2) { - final int[] idx = select.getIdxSelected(); - final CtuluListSelectionInterface selection1 = select.getSelection(idx[0]); - final CtuluListSelectionInterface selection2 = select.getSelection(idx[1]); - if (selection1.getNbSelectedIndex() == 1 && selection2.getNbSelectedIndex() == 1) { - final Coordinate[] cs = new Coordinate[2]; - cs[0] = ((LineString) getModele().getGeomData().getGeometry(idx[0])).getCoordinateN(selection1.getMaxIndex()); - cs[1] = ((LineString) getModele().getGeomData().getGeometry(idx[1])).getCoordinateN(selection2.getMaxIndex()); - return GISGeometryFactory.INSTANCE.createLineString(cs); - } - } - return null; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.AttributeListener#attributeAction(java.lang.Object, int, org.fudaa.ctulu.gis.GISAttributeInterface, int) - */ - public void attributeAction(Object _source, int _indexAtt, GISAttributeInterface _att, int _action) { - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.AttributeListener#attributeValueChangeAction(java.lang.Object, int, org.fudaa.ctulu.gis.GISAttributeInterface, int, java.lang.Object) - */ - public void attributeValueChangeAction(Object _source, int _indexAtt, GISAttributeInterface _att, int _indexGeom, Object _newValue) { - /* A chaque changement de valeur d'un attribut, tout est redessin\xE9. On - * pourrai faire quelque chose de plus optimis\xE9 comme un repaint seulement - * quand la valeur de visibilit\xE9 est modifi\xE9 et pas dans les autres cas. - */ - repaint(); - } - } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueAtomicSelectionAction.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -42,5 +42,6 @@ */ public void valueChanged(TreeSelectionEvent e) { setEnabled(scene_.canUseAtomicMode()); + setSelected(isEnabled() && scene_.isAtomicMode()); } } \ No newline at end of file Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -0,0 +1,161 @@ +/* + * @creation 23 f\xE9vr. 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ebli.calque.find; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import org.fudaa.ctulu.CtuluListSelection; +import org.fudaa.ebli.calque.ZCalqueAffichageDonnees; +import org.fudaa.ebli.calque.ZCalqueGeometry; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.commun.EbliListeSelectionMulti; +import org.fudaa.ebli.find.EbliFindComponent; +import org.fudaa.ebli.find.EbliFindComponentExpr; +import org.fudaa.ebli.find.EbliFindable; +import org.nfunk.jep.Variable; + +import com.memoire.fu.FuLog; + +/** + * Une action de recherche permettant de rechercher des geometries ou des sommets. Cette action r\xE9agit au changement de mode de + * selection sommet<->geometrie. + * @author Bertrand Marchand + * @version $Id:$ + */ + +public class CalqueFindActionAtomic extends CalqueFindActionDefault implements PropertyChangeListener { + /** Le panneau de recherche par formule recup\xE9r\xE9 pour \xEAtre mis a jour en cas de changement de mode de selection */ + EbliFindComponentExpr exprComp_; + /** Le panneau de recherche par polygone recup\xE9r\xE9 pour \xEAtre mis a jour en cas de changement de mode de selection */ + CalqueFindComponentPolygone polyComp_; + + /** + * Cr\xE9ation de l'action + * @param _item Le calque associ\xE9 \xE0 la recherche. + */ + public CalqueFindActionAtomic(ZCalqueGeometry _calque) { + super(_calque); + // Attention : L'instance ne doit pas \xEAtre cr\xE9\xE9e plus d'une fois par calque, car elle ecoute un changement de propri\xE9t\xE9 + // sur ce calque. + _calque.addPropertyChangeListener("mode",this); + } + + public boolean find(final Object _idx, final String _action, final int _selOption, final EbliFindable _parent) { + if (_action.startsWith(CalqueFindComponentPolygone.getID())) { + return findPolygone(_idx, _action, _selOption, _parent); + } + final String exp = (String) _idx; + final EbliListeSelectionMulti selection = createSelection(exp, _action, _selOption); + return selection == null ? false : ((ZCalqueAffichageDonnees)layer_).changeSelection(selection, _selOption); + } + + /** + * Cr\xE9e une selection de sommet ou de geometries, suivant qu'on est en mode atomique ou en mode global. + * @param _idx La chaine utilis\xE9e pour la recherche (indexs ou formule) + * @param _action L'onglet a partir duquel on effectue la recherche + * @param _selOption L'option de selection (ajout, suppression, etc). + * @return + */ + protected EbliListeSelectionMulti createSelection(final String _idx, final String _action, final int _selOption) { + EbliListeSelectionMulti selection = null; + if ("IDX".equals(_action)) { + final int[] idx = getIndex(_idx); + if (idx != null && !((ZCalqueGeometry)layer_).isAtomicMode()) { + selection = new EbliListeSelectionMulti(idx.length); + for (int i : idx) { + selection.set(i,new CtuluListSelection(0)); + } + } + } else if ("EXPR".equals(_action)) { + if (FuLog.isTrace()) { + FuLog.trace("find from expression"); + } + if (expr_.getParser().hasError()) { + return null; + } + final int nb = getNbValuesToTest(); + selection = new EbliListeSelectionMulti(nb); + final Variable[] vars =expr_.findUsedVar(); + final Object[] values=new Object[vars.length]; +// CtuluListSelection old = null; +// if (_selOption == EbliSelectionState.ACTION_AND || _selOption == EbliSelectionState.ACTION_DEL) { +// old = getOldSelection(); +// } +// final int min = old == null ? 0 : old.getMinIndex(); +// final int max = old == null ? nb - 1 : old.getMaxIndex(); + final int min = 0; + final int max = nb - 1; + + + for (int idxGeom = max; idxGeom >= min; idxGeom--) { +// if (old == null || old.isSelected(i)) { + if (vars!=null) { + exprFiller_.majVariable(idxGeom, vars, values); + + // Mode atomique. + if (((ZCalqueGeometry)layer_).isAtomicMode()) { + int nbAtomics=((ZCalqueGeometry)layer_).modeleDonnees().getNbPointForGeometry(idxGeom); + for (int iat=0; iat<nbAtomics; iat++) { + for (int j=0; j<vars.length; j++) { + vars[j].setValue(((Object[])values[j])[iat]); + } + final int val=(int)expr_.getParser().getValue(); + if (val==1) { + selection.add(idxGeom, iat); + } + } + } + + // Mode global + else { + for (int j=0; j<vars.length; j++) { + vars[j].setValue(values[j]); + } + final int val=(int)expr_.getParser().getValue(); + if (val==1) { + // La liste des sous objets est vide, mais pr\xE9sente. + selection.set(idxGeom,new CtuluListSelection(0)); + } + } + } + // } + } + } + return selection; + } + + + protected EbliFindComponent buildExprComp() { + exprComp_=(EbliFindComponentExpr)super.buildExprComp(); + exprComp_.setFindOnAtomic(((ZCalqueGeometry)layer_).isAtomicMode()); + + return exprComp_; + } + + protected EbliFindComponent buildPolygoneComponent(final EbliFindable _parent) { + polyComp_ = new CalqueFindComponentPolygone(((ZEbliCalquesPanel) _parent).getDonneesCalque()); + polyComp_.setFindOnAtomic(((ZCalqueGeometry)layer_).isAtomicMode()); + return polyComp_; + } + + public void propertyChange(PropertyChangeEvent _evt) { + if ("mode".equals(_evt.getPropertyName())) { + boolean isAtomic=((Boolean)_evt.getNewValue()).booleanValue(); + + buildExpr(); + if (exprComp_!=null) { + exprComp_.setExpr(expr_); + exprComp_.setFindOnAtomic(isAtomic); + } + + if (polyComp_!=null) + polyComp_.setFindOnAtomic(isAtomic); + } + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/find/CalqueFindActionAtomic.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -292,7 +292,7 @@ final FSigLineSingleModel modele = new FSigLineSingleModel(_s); if (tmp_ == null) { initZoom_ = panel_.getVueCalque().getViewBoite(); - tmp_ = new ZCalqueLigneBrisee(); + tmp_ = new ZCalqueLigneBrisee(modele); tmp_.setDestructible(true); final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS_DOUBLE, 4, Color.RED); tmp_.setIconModel(0, model); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilderFromTree.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -71,7 +71,7 @@ final CalqueGISTreeModel.LayerNode node = (CalqueGISTreeModel.LayerNode) _tree.getSelectionPath() .getLastPathComponent(); final ZCalqueLigneBrisee cq = (ZCalqueLigneBrisee) node.getUserObject(); - return (LineString) cq.getModele().getGeomData().getGeometry(node.getIdxGeom()); + return (LineString) cq.modeleDonnees().getGeomData().getGeometry(node.getIdxGeom()); } String getSelectedLineTitle(final JTree _tree) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefsImporterFromModeleur2d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefsImporterFromModeleur2d.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefsImporterFromModeleur2d.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -26,7 +26,7 @@ * pendant toute la dur\xE9e de sa vie. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class BiefsImporterFromModeleur2d { @@ -95,7 +95,7 @@ BCalque[] sousCalques=rootCalque_.getCalques()[names_.get(_name)].getCalques(); for (int j=0; j<sousCalques.length; j++) if (sousCalques[j] instanceof FSigLayerLineEditable) - modelsBief.add(((FSigLayerLineEditable)sousCalques[j]).getModele()); + modelsBief.add(((FSigLayerLineEditable)sousCalques[j]).modeleDonnees()); // Importation du bief \\ return new BiefImporterFromModels(modelsBief.toArray(new ZModeleLigneBrisee[0])).getBief(); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigGeomDataClosedLayerFilter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigGeomDataClosedLayerFilter.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigGeomDataClosedLayerFilter.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -76,7 +76,7 @@ public GISZoneCollectionLigneBrisee[] getGeomClosedData() { final GISZoneCollectionLigneBrisee[] res = new GISZoneCollectionLigneBrisee[r_.size()]; for (int i = res.length - 1; i >= 0; i--) { - res[i] = (GISZoneCollectionLigneBrisee) ((ZCalqueLigneBrisee) r_.get(i)).getModele().getGeomData(); + res[i] = (GISZoneCollectionLigneBrisee) ((ZCalqueLigneBrisee) r_.get(i)).modeleDonnees().getGeomData(); } return res; } @@ -84,7 +84,7 @@ public GISDataModel[] getGeomClosedDataModel() { final GISDataModel[] res = new GISDataModel[r_.size()]; for (int i = res.length - 1; i >= 0; i--) { - res[i] = new GISDataModelZoneAdapter(((ZCalqueLigneBrisee) r_.get(i)).getModele().getGeomData(), null); + res[i] = new GISDataModelZoneAdapter(((ZCalqueLigneBrisee) r_.get(i)).modeleDonnees().getGeomData(), null); } return res; } @@ -92,7 +92,7 @@ public GISZoneCollectionLigneBrisee[] getGeomData() { final GISZoneCollectionLigneBrisee[] res = new GISZoneCollectionLigneBrisee[polyligne_.size()]; for (int i = res.length - 1; i >= 0; i--) { - res[i] = (GISZoneCollectionLigneBrisee) ((ZCalqueLigneBrisee) polyligne_.get(i)).getModele().getGeomData(); + res[i] = (GISZoneCollectionLigneBrisee) ((ZCalqueLigneBrisee) polyligne_.get(i)).modeleDonnees().getGeomData(); } return res; } @@ -100,7 +100,7 @@ public GISDataModel[] getGeomDataModel() { final GISDataModel[] res = new GISDataModel[polyligne_.size()]; for (int i = res.length - 1; i >= 0; i--) { - res[i] = new GISDataModelZoneAdapter(((ZCalqueLigneBrisee) polyligne_.get(i)).getModele().getGeomData(), null); + res[i] = new GISDataModelZoneAdapter(((ZCalqueLigneBrisee) polyligne_.get(i)).modeleDonnees().getGeomData(), null); } return res; } @@ -125,7 +125,7 @@ } if (_cq instanceof ZCalqueLigneBrisee) { counter_.init(); - final ZModeleGeometry geom = ((ZCalqueLigneBrisee) _cq).getModele(); + final ZModeleGeometry geom = ((ZCalqueLigneBrisee) _cq).modeleDonnees(); geom.getGeomData().accept(counter_); nbPointTotal_ += counter_.nbPoint_; if (counter_.nbPolygones_ > 0) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerLine.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerLine.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerLine.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -19,10 +19,6 @@ */ public class FSigLayerLine extends ZCalqueLigneBrisee { - public FSigLayerLine() { - super(); - } - /** * @param _modele */ Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiPlanLayer.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiPlanLayer.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiPlanLayer.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -50,7 +50,7 @@ } public TrSiProfilModel.Zone getZone() { - return (TrSiProfilModel.Zone) ((ZModeleLigneBriseeDefault) getModele()).getGeomData(); + return (TrSiProfilModel.Zone) ((ZModeleLigneBriseeDefault) modeleDonnees()).getGeomData(); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiProfilLayer.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiProfilLayer.java 2009-02-24 12:27:25 UTC (rev 4493) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrSiProfilLayer.java 2009-02-24 12:28:49 UTC (rev 4494) @@ -209,7 +209,7 @@ return; } final int idx = getLayerSelection... [truncated message content] |
From: <bma...@us...> - 2009-02-26 21:13:58
|
Revision: 4501 http://fudaa.svn.sourceforge.net/fudaa/?rev=4501&view=rev Author: bmarchan Date: 2009-02-26 21:13:43 +0000 (Thu, 26 Feb 2009) Log Message: ----------- Correction sur trac?\195?\169 d'orientation des lignes. Certaines fleches n'apparaissaient pas. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -20,6 +20,7 @@ import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrVecteur; import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigne; @@ -211,6 +212,7 @@ GrPoint ptDest=new GrPoint(); GrPoint ptOrig=new GrPoint(); int j; + // Si c'est une polyligne on prend le dernier point si c'est un polygone, // on prend le premier (le permier et le dernier doivent \xEAtre confondus). if(modele_.isGeometryFermee(i)){ @@ -228,41 +230,31 @@ modele_.point(ptOrig, i, --j); if(j==0&&(ptOrig.x_==ptDest.x_&&ptOrig.y_==ptDest.y_)) continue; + ptOrig.autoApplique(versEcran); ptDest.autoApplique(versEcran); + // Dessin de la fleche if(showLineOrientation_){ - // La point de la fleche doit petre LISSE \\ - // Calcule du vecteur entre les deux points - double vecX=ptDest.x_-ptOrig.x_; - double vecY=ptDest.y_-ptOrig.y_; - // Normalisation et rectification de l'erreur d'arrondi. Puissance et - // racine carr\xE9 entrainent des erreurs d'arrondis visible, donc - // inutilisables. - while(vecX>10||vecY>10||vecX<-10||vecY<-10){ - vecX=vecX/2; - vecY=vecY/2; - } + GrVecteur vct=ptDest.soustraction(ptOrig); + vct.autoNormaliseXY(); + vct.autoMultiplication(20); // Cr\xE9ation d'un point interm\xE9diare - double ptInterX=ptDest.x_-vecX; - double ptInterY=ptDest.y_-vecY; - // La barre de la fleche est normale - tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptInterX, ptInterY); + double xorig=ptDest.x_-vct.x_; + double yorig=ptDest.y_-vct.y_; // La point est lisse int typeTrait=tl.getTypeTrait(); tl.setTypeTrait(TraceLigne.LISSE); - tl.dessineFleche(_g, (int)ptInterX, (int)ptInterY, (int)ptDest.x_, (int)ptDest.y_, 11, 5); + tl.dessinePointe(_g, (int)xorig, (int)yorig, (int)ptDest.x_, (int)ptDest.y_, 11, 5); tl.setTypeTrait(typeTrait); } - else - tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptDest.x_, ptDest.y_); - // Dessin du reste de la ligne - j--; + + // Dessin des segments for(;j>=0;j--){ - ptDest.initialiseAvec(ptOrig); modele_.point(ptOrig, i, j); ptOrig.autoApplique(versEcran); tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptDest.x_, ptDest.y_); + ptDest.initialiseAvec(ptOrig); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceLigne.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -345,33 +345,57 @@ if (!initialisationGraphics(_g)) { return; } + _g.drawLine(_x1, _y1, _x2, _y2); + _g.setColor(oldColor); + _g.setStroke(oldStroke); + + dessinePointe(_g, _x1, _y1, _x2, _y2, _retour, _ecart); + } + + /** + * Trac\xE9 d'une pointe de fleche uniquement, centr\xE9e sur (xpointe,ypointe). + * La direction est donn\xE9e par le deuxieme point (xorig,yorig). + * @param _g Le contexte graphique + * @param _xorig Le x du point d'origine, donnant la direction. + * @param _yorig Le y du point d'origine, donnant la direction. + * @param _xpointe Le x de la pointe de fleche. + * @param _ypointe Le y de la pointe de fleche. + * @param _ecart la distance des extremites de la fleche par rapport au segment + * @param _retour la longueur du retour de la fleche + */ + public void dessinePointe(final Graphics2D _g, final int _xorig, final int _yorig, final int _xpointe, final int _ypointe, + final int _retour, final int _ecart) { + final Color oldColor = _g.getColor(); + final Stroke oldStroke = _g.getStroke(); + if (!initialisationGraphics(_g)) { + return; + } +// _g.drawLine(_xorig, _yorig, _xpointe, _ypointe); if (model_.typeTrait_ == POINT_MARQUE) { - _g.drawLine(_x1, _y1, _x2, _y2); - _g.drawRect(_x1 - 1, _y1 - 1, 2, 2); - _g.drawRect(_x2 - 1, _y2 - 1, 2, 2); + _g.drawRect(_xorig - 1, _yorig - 1, 2, 2); + _g.drawRect(_xpointe - 1, _ypointe - 1, 2, 2); } else { - _g.drawLine(_x1, _y1, _x2, _y2); // la norme du vecteur - final double norme = CtuluLibGeometrie.getDistance(_x1, _y1, _x2, _y2); + final double norme = CtuluLibGeometrie.getDistance(_xorig, _yorig, _xpointe, _ypointe); // Si le retour de la fleche est trop grand on le diminue au 3 de la fleche if (norme == 0) { return; } final double coef = (norme - _retour) / norme; // xd et yd sont les points du traits correspondant a l'extremite des retours de la fleche - final double xd = coef * (_x2 - _x1) + _x1; - final double yd = coef * (_y2 - _y1) + _y1; + final double xd = coef * (_xpointe - _xorig) + _xorig; + final double yd = coef * (_ypointe - _yorig) + _yorig; // vecteur normal au trait - final double xn = (_y1 - _y2) / norme; - final double yn = (_x2 - _x1) / norme; + final double xn = (_yorig - _ypointe) / norme; + final double yn = (_xpointe - _xorig) / norme; // Xe et Ye sont les coordonnees d'une extremite de la fleche double xe = _ecart * xn + xd; double ye = _ecart * yn + yd; - _g.drawLine(_x2, _y2, (int) xe, (int) ye); + _g.drawLine(_xpointe, _ypointe, (int) xe, (int) ye); // Xe et Ye sont les coordonnees de l'autre extremite xe = _ecart * (-xn) + xd; ye = _ecart * (-yn) + yd; - _g.drawLine(_x2, _y2, (int) xe, (int) ye); + _g.drawLine(_xpointe, _ypointe, (int) xe, (int) ye); } _g.setColor(oldColor); _g.setStroke(oldStroke); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -291,7 +291,7 @@ if (pnDecimation_==null) pnDecimation_=new MdlDecimationPanel(); - CtuluCommandComposite cmd=new CtuluCommandComposite(); + CtuluCommandComposite cmd=new CtuluCommandComposite(FudaaLib.getS("D\xE9cimer")); String title; if (getScene().isAtomicMode()) @@ -324,10 +324,10 @@ mdl.decimate(getScene().sceneId2LayerId(idxGeom), idxdeb, idxfin, pnDecimation_.isNbPtsGiven() ? 0:1, pnDecimation_ .getNbPts(), pnDecimation_.getDistance(), cmd); } - - super.getScene().clearSelection(); } } + getScene().clearSelection(); + if(getMng()!=null) getMng().addCmd(cmd.getSimplify()); } @@ -339,7 +339,7 @@ if (pnRaffinement_==null) pnRaffinement_=new MdlRefinementPanel(); - CtuluCommandComposite cmd=new CtuluCommandComposite(); + CtuluCommandComposite cmd=new CtuluCommandComposite(FudaaLib.getS("Raffiner")); String title; if (getScene().isAtomicMode()) @@ -348,7 +348,7 @@ title=MdlResource.getS("Raffinement sur une polyligne"); if (pnRaffinement_.afficheModaleOk(pn_.getFrame(), title)) { - // Les g\xE9om\xE9tries. On n'a plusieurs g\xE9om\xE9tries que dans le cas o\xF9 on n'est + // Les g\xE9om\xE9tries. On a plusieurs g\xE9om\xE9tries que dans le cas o\xF9 on n'est // pas en mode sommet. int[] geoms=getScene().getSelectionHelper().getSelectedIndexes(); for (int i=0; i<geoms.length; i++) { @@ -372,9 +372,8 @@ mdl.refine(getScene().sceneId2LayerId(idxGeom), idxdeb, idxfin, pnRaffinement_.isNbPtsGiven() ? 0:1, pnRaffinement_ .getNbPts(), pnRaffinement_.getDistance(), cmd); } - - super.getScene().clearSelection(); } + getScene().clearSelection(); } if(getMng()!=null) getMng().addCmd(cmd.getSimplify()); @@ -632,7 +631,6 @@ if (mdld instanceof MdlModel2dLine) ((MdlModel2dLine)mdld).invertOrientation(getScene().sceneId2LayerId(geoms[i]), cmd); } - super.getScene().clearSelection(); if (getMng()!=null) getMng().addCmd(cmd.getSimplify()); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2009-02-26 19:15:42 UTC (rev 4500) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2009-02-26 21:13:43 UTC (rev 4501) @@ -263,7 +263,6 @@ * @param _cmd Le container de commandes. */ public void invertOrientation(final int _idxGeom, CtuluCommandContainer _cmd){ - CtuluCommandComposite cmd=new CtuluCommandComposite(); // Inversion des coordonn\xE9es LineString geom=(LineString)getGeomData().getGeometry(_idxGeom); CoordinateSequence seq=geom.getCoordinateSequence(); @@ -279,15 +278,16 @@ GISAttributeModel values=(GISAttributeModel) getDataModel(i).getObjectValueAt(_idxGeom); for(int j=0;j<values.getSize()/2;j++){ Object valTmp=values.getObjectValueAt(j); - values.setObject(j, values.getObjectValueAt(values.getSize()-1-j), cmd); - values.setObject(values.getSize()-1-j, valTmp, cmd); + values.setObject(j, values.getObjectValueAt(values.getSize()-1-j), null); + values.setObject(values.getSize()-1-j, valTmp, null); } } // Fires fireModelAction(_idxGeom, geom, ZModelListener.GEOMETRY_ACTION_MODIFY); fireAttributeValueChangeAction(this, -1, null, _idxGeom, null); + if (_cmd!=null){ - cmd.addCmd(new CtuluNamedCommand() { + _cmd.addCmd(new CtuluNamedCommand() { public void redo() { invertOrientation(_idxGeom, null); } @@ -298,7 +298,6 @@ return FudaaLib.getS("Inversion de l'orientation"); } }); - _cmd.addCmd(cmd.getSimplify()); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-02-27 08:36:39
|
Revision: 4502 http://fudaa.svn.sourceforge.net/fudaa/?rev=4502&view=rev Author: bmarchan Date: 2009-02-27 08:36:30 +0000 (Fri, 27 Feb 2009) Log Message: ----------- Pb parsing fichier GML. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionBief.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionProfil.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java 2009-02-26 21:13:43 UTC (rev 4501) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFeatureAdapter.java 2009-02-27 08:36:30 UTC (rev 4502) @@ -17,6 +17,7 @@ import org.geotools.feature.FeatureIterator; import org.geotools.feature.FeatureType; +import com.memoire.fu.FuLog; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; @@ -113,6 +114,14 @@ final FeatureIterator it = _coll.features(); while (it.hasNext()) { final Feature f = it.next(); + + if(indexGeomAttr!=-1) { + Integer i=(Integer) f.getAttribute(indexGeomAttr); + if (i==null) { + FuLog.error("Probleme sur le parseur, probablement du a la version Java 1.6"); + } + indexGeom.add(i); + } geom.add(f.getDefaultGeometry()); for (int i = 0; i < finalAttributeCount; i++) { @@ -148,8 +157,6 @@ else values[i].add(f.getAttribute(idxInFeature.getQuick(i))); } - if(indexGeomAttr!=-1) - indexGeom.add((Integer) f.getAttribute(indexGeomAttr)); } if (indexGeomAttr!=-1) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionBief.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionBief.java 2009-02-26 21:13:43 UTC (rev 4501) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionBief.java 2009-02-27 08:36:30 UTC (rev 4502) @@ -7,13 +7,14 @@ */ package org.fudaa.fudaa.modeleur.modeleur1d.view; -import java.awt.Container; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; +import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; @@ -51,22 +52,20 @@ public PnGestionBief(ControllerBief _controllerBief){ controllerBief_=_controllerBief; - setLayout(new BuBorderLayout()); + setLayout(new BuBorderLayout(2,2)); // Titre BuLabel lblTitre=new BuLabel("<html><b>"+FudaaLib.getS("Bief")+"</b></html>"); lblTitre.setHorizontalAlignment(BuLabel.CENTER); add(lblTitre, BuBorderLayout.NORTH); - // Body \\ - Container body=new Container(); - body.setLayout(new BuBorderLayout(2, 2)); - add(body, BuBorderLayout.CENTER); // Tableau de noms tableBiefs_=new CtuluTable(new TableBiefModel()); - body.add(new JScrollPane(tableBiefs_), BuBorderLayout.CENTER); + JScrollPane pnBiefs=new JScrollPane(tableBiefs_); + pnBiefs.setPreferredSize(new Dimension(0,150)); + add(pnBiefs, BuBorderLayout.CENTER); // Boutons \\ // Ouvrir - Container btContainer=new Container(); - btContainer.setLayout(new BuGridLayout(1, 5, 5)); + JPanel pnButtons=new JPanel(); + pnButtons.setLayout(new BuGridLayout(1, 5, 5)); btOuvrir_=new BuButton(FudaaLib.getS("Ouvrir")); btOuvrir_.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { @@ -83,7 +82,7 @@ } }); btOuvrir_.setEnabled(false); - btContainer.add(btOuvrir_); + pnButtons.add(btOuvrir_); // Supprimer JButton btSupprimer=new BuButton(FudaaLib.getS("supprimer")); btSupprimer.addActionListener(new ActionListener(){ @@ -100,7 +99,7 @@ controllerBief_.removeBief(idx); } }); - btContainer.add(btSupprimer); + pnButtons.add(btSupprimer); // Fusionner btFusionner_=new BuButton(FudaaLib.getS("Fusionner")); btFusionner_.addActionListener(new ActionListener(){ @@ -122,7 +121,7 @@ } }); btFusionner_.setEnabled(false); - btContainer.add(btFusionner_); + pnButtons.add(btFusionner_); // Dupliquer JButton btDupliquer=new BuButton(FudaaLib.getS("Dupliquer")); btDupliquer.addActionListener(new ActionListener(){ @@ -131,9 +130,9 @@ } }); btDupliquer.setEnabled(false); - btContainer.add(btDupliquer); - body.add(btContainer, BuBorderLayout.EAST); - body.setPreferredSize(body.getMinimumSize()); + btDupliquer.setVisible(false); + pnButtons.add(btDupliquer); + add(pnButtons, BuBorderLayout.EAST); } /** Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionProfil.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionProfil.java 2009-02-26 21:13:43 UTC (rev 4501) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/PnGestionProfil.java 2009-02-27 08:36:30 UTC (rev 4502) @@ -7,7 +7,6 @@ */ package org.fudaa.fudaa.modeleur.modeleur1d.view; -import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -44,15 +43,11 @@ public PnGestionProfil(ControllerProfil _controllerProfil){ controllerProfil_=_controllerProfil; - setLayout(new BuBorderLayout()); + setLayout(new BuBorderLayout(2,2)); // Titre BuLabel lblTitre=new BuLabel("<html><b>"+FudaaLib.getS("Profil")+"</b></html>"); lblTitre.setHorizontalAlignment(BuLabel.CENTER); add(lblTitre, BuBorderLayout.NORTH); - // Body \\ - Container body=new Container(); - body.setLayout(new BuBorderLayout(2, 2)); - add(body, BuBorderLayout.CENTER); // Tableau de noms tableProfils_=new CtuluTable(new TableProfilModel()) { /* (non-Javadoc) @@ -65,10 +60,10 @@ } }; tableProfils_.setSelectionModel(controllerProfil_.getProfilSelectionModel()); - body.add(new JScrollPane(tableProfils_), BuBorderLayout.CENTER); + add(new JScrollPane(tableProfils_), BuBorderLayout.CENTER); // Boutons - Container btContainer=new Container(); - btContainer.setLayout(new BuGridLayout(1, 5, 5)); + JPanel pnButtons=new JPanel(); + pnButtons.setLayout(new BuGridLayout(1, 5, 5)); JButton btAjout=new BuButton(FudaaLib.getS("Ajout")); btAjout.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { @@ -76,14 +71,14 @@ } }); btAjout.setEnabled(false); - btContainer.add(btAjout); +// pnButtons.add(btAjout); JButton btSupprimer=new BuButton(FudaaLib.getS("supprimer")); btSupprimer.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { controllerProfil_.supprimerSelectedProfil(); } }); - btContainer.add(btSupprimer); + pnButtons.add(btSupprimer); JButton btFusionner=new BuButton(FudaaLib.getS("Fusionner")); btFusionner.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { @@ -91,9 +86,9 @@ } }); btFusionner.setEnabled(false); - btContainer.add(btFusionner); - body.add(btContainer, BuBorderLayout.EAST); - body.setPreferredSize(new Dimension(body.getMinimumSize().width, 350)); +// pnButtons.add(btFusionner); + add(pnButtons, BuBorderLayout.EAST); + setPreferredSize(new Dimension(getMinimumSize().width, 200)); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-05 15:55:16
|
Revision: 4509 http://fudaa.svn.sourceforge.net/fudaa/?rev=4509&view=rev Author: bmarchan Date: 2009-03-05 15:55:13 +0000 (Thu, 05 Mar 2009) Log Message: ----------- Taches #191 + #192 : Restaure viewport automatique apr?\195?\168s import + Correction info nb de points/polylignes import?\195?\169es sur Rubar ST. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarSt.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2009-03-04 10:45:58 UTC (rev 4508) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2009-03-05 15:55:13 UTC (rev 4509) @@ -691,6 +691,9 @@ } } + /** + * Restaure le viewport sur le domaine \xE9tendu \xE0 tous les calques. + */ public void restaurer() { final BCalqueInteraction cq = unsetCurrentInteractifCalque(); final GrBoite b = pn_.getVueCalque().getCalque().getDomaine(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java 2009-03-04 10:45:58 UTC (rev 4508) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java 2009-03-05 15:55:13 UTC (rev 4509) @@ -729,6 +729,9 @@ controller_.removeCalqueInteraction(_b); } + /** + * Restaure le viewport sur le domaine \xE9tendu \xE0 tous les calques. + */ public void restaurer() { controller_.restaurer(); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-03-04 10:45:58 UTC (rev 4508) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-03-05 15:55:13 UTC (rev 4509) @@ -113,7 +113,7 @@ return; } - final MdlWizardImport importWizard=new MdlWizardImport(getPanel().getDonneesCalque(), getEnglobPolygone(), ed, + final MdlWizardImport importWizard=new MdlWizardImport(getPanel(), getEnglobPolygone(), ed, ((FSigVisuPanel)getPanel()).getImpl(), ((FSigVisuPanel)getPanel()).getCmdMng()); final BuWizardDialog dialog=new BuWizardDialog(CtuluLibSwing.getFrameAncestorHelper(super.getPanel()), importWizard); importWizard.setDialog(dialog); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java 2009-03-04 10:45:58 UTC (rev 4508) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java 2009-03-05 15:55:13 UTC (rev 4509) @@ -44,6 +44,7 @@ import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ebli.calque.BGroupeCalque; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesAbstract; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; import org.fudaa.ebli.calque.ZModeleGeometry; import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.edition.ZCalqueEditable; @@ -77,15 +78,17 @@ protected final CtuluUI impl_; protected GISAttributeInterface[] src_; protected final DefaultListModel srcAtt_ = new DefaultListModel(); + protected final ZEbliCalquesPanel pnCalques_; /** * @param _previewZone la zone a utiliser pour la pr\xE9visualisation * @param _selectedLayer le calque en cours de selection: peut-etre null * @param _impl l'impl parent */ - public MdlWizardImport(BGroupeCalque _racine, GISPolygone[] _previewZone, ZCalqueEditable _selectedLayer, CtuluUI _impl, CtuluCommandManager _mng) { + public MdlWizardImport(ZEbliCalquesPanel _pn, GISPolygone[] _previewZone, ZCalqueEditable _selectedLayer, CtuluUI _impl, CtuluCommandManager _mng) { mng_=_mng; - calqueRacine_=_racine; + calqueRacine_=_pn.getDonneesCalque(); + pnCalques_=_pn; impl_ = _impl; previewZone_ = _previewZone; selectedLayer_ = _selectedLayer; @@ -139,6 +142,7 @@ task.start(new Runnable() { public void run() { importData(task.getStateReceiver()); + pnCalques_.restaurer(); } }); super.doTask(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarSt.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarSt.java 2009-03-04 10:45:58 UTC (rev 4508) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarSt.java 2009-03-05 15:55:13 UTC (rev 4509) @@ -59,18 +59,20 @@ final GISZoneCollectionLigneBrisee[] res = (GISZoneCollectionLigneBrisee[]) op.getSource(); boolean blines=false; - final GISVisitorCount counter=new GISVisitorCount(); for (int i=0; i<res.length; i++) { if (res[i]==null||res[i].getNumGeometries()==0) continue; blines=true; - res[i].accept(counter); - _r.nbPointTotal_+=counter.nbPt_; + // Ajout de l'attribut ETAT_GEOM _r.findOrCreateAttribute(GISAttributeConstants.ETAT_GEOM.getID(), String.class, false); GISDataModelAttributeAdapter adapter = new GISDataModelAttributeAdapter(res[i]); adapter.addAttribut(GISAttributeConstants.ETAT_GEOM, _fileOrigine); - // GISAttributeInterface[] attrs=res[i].getAttributes(); + + final GISVisitorCount counter=new GISVisitorCount(); + res[i].accept(counter); + _r.nbPointTotal_+=counter.nbPtTotal_; + if(counter.nbPt_>0) { _r.nbPoint_+=counter.nbPt_; _r.pointModel_.add(GISDataModelFilterAdapter.buildPointAdapter(adapter, attrs)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-10 16:22:03
|
Revision: 4519 http://fudaa.svn.sourceforge.net/fudaa/?rev=4519&view=rev Author: bmarchan Date: 2009-03-10 16:21:47 +0000 (Tue, 10 Mar 2009) Log Message: ----------- Calque permettant la gestion de blocs (g?\195?\169om?\195?\169tries composites). statut : EXPERIMENTAL. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java 2009-03-10 15:58:58 UTC (rev 4518) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java 2009-03-10 16:21:47 UTC (rev 4519) @@ -22,6 +22,12 @@ */ long getId(); + /** + * Implementation du pattern visitor. Le visitor parcours l'arbre des g\xE9om\xE9tries jusqu'aux g\xE9om\xE9tries simples, et r\xE9alise + * un traitement sur celles-ci (modification, stockage d'information, etc). Le traitement est d\xE9finit dans le visitor. + * @param _v Le visitor. + * @return false : Si la visite doit \xEAtre interrompue. + */ boolean accept(GISVisitor _v); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java 2009-03-10 15:58:58 UTC (rev 4518) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java 2009-03-10 16:21:47 UTC (rev 4519) @@ -7,24 +7,123 @@ */ package org.fudaa.ctulu.gis; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.GeometryFactory; /** - * @author fred deniger + * Une Geometry de type bloc agregeant d'autres g\xE9ometries simples. Le bloc n'accepte pas de contenir d'autres collections. + * @author Bertrand Marchand + * @status Experimental * @version $Id: GISGeometryCollection.java,v 1.2 2006-09-19 14:36:53 deniger Exp $ */ -public class GISGeometryCollection extends GeometryCollection implements GISGeometry { +public class GISGeometryCollection extends GeometryCollection implements GISCoordinateSequenceContainerInterface { + CollectionCoordinateSequence seq_; + + private class CollectionCoordinateSequence implements CoordinateSequence { + private int idxgeom_; + private int idxsom_; + private GISGeometryCollection coll_; + public CollectionCoordinateSequence(GISGeometryCollection _coll) { + coll_=_coll; + } + + public Object clone() { + return new CollectionCoordinateSequence(coll_); + } + + public Envelope expandEnvelope(Envelope _env) { + _env.expandToInclude(coll_.getEnvelopeInternal()); + return _env; + } + + public Coordinate getCoordinate(int _index) { + computeIndex2Geom(_index); + return ((GISCoordinateSequenceContainerInterface)coll_.geometries[idxgeom_]).getCoordinateSequence().getCoordinate(idxsom_); + } + + private void computeIndex2Geom(int _idx) { + int idecal=0; + for (int i=0; i<coll_.geometries.length; i++) { + int nb=coll_.geometries[i].getNumPoints(); + if (_idx<idecal+nb) { + idxgeom_=i; + idxsom_=_idx-idecal; + return; + } + idecal+=nb; + } + } + + public void getCoordinate(int _index, Coordinate _coord) { + computeIndex2Geom(_index); + ((GISCoordinateSequenceContainerInterface)coll_.geometries[idxgeom_]).getCoordinateSequence().getCoordinate(idxsom_,_coord); + } + + public Coordinate getCoordinateCopy(int _index) { + return (Coordinate)getCoordinate(_index).clone(); + } + + public int getDimension() { + return coll_.getDimension(); + } + + public double getOrdinate(int _index, int _ordinateIndex) { + computeIndex2Geom(_index); + return ((GISCoordinateSequenceContainerInterface)coll_.geometries[idxgeom_]).getCoordinateSequence().getOrdinate(idxsom_, _ordinateIndex); + } + + public double getX(int _index) { + return getOrdinate(_index, 0); + } + + public double getY(int _index) { + return getOrdinate(_index, 1); + } + + public void setOrdinate(int _index, int _ordinateIndex, double _value) { + computeIndex2Geom(_index); + ((GISCoordinateSequenceContainerInterface)coll_.geometries[idxgeom_]).getCoordinateSequence().setOrdinate(idxsom_, _ordinateIndex, + _value); + } + + public int size() { + return coll_.getNumPoints(); + } + + public Coordinate[] toCoordinateArray() { + return coll_.getCoordinates(); + } + } + public GISGeometryCollection(final Geometry[] _geometries, final GeometryFactory _factory) { super(_geometries, _factory); + + if (containsCollection(_geometries)) + throw new IllegalArgumentException("Geometries can't be collections"); } + protected boolean containsCollection(Geometry[] _geoms) { + for (Geometry g: _geoms) { + if (g instanceof GISGeometryCollection) return true; + } + return false; + } + public boolean accept(final GISVisitor _v) { return _v.visitGeometryCollection(this); } public long getId() { return -1; } + public CoordinateSequence getCoordinateSequence() { + if (seq_==null) { + seq_=new CollectionCoordinateSequence(this); + } + return seq_; + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java 2009-03-10 15:58:58 UTC (rev 4518) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java 2009-03-10 16:21:47 UTC (rev 4519) @@ -143,7 +143,7 @@ } public GeometryCollection createGeometryCollection(final Geometry[] _geometries){ - return super.createGeometryCollection(_geometries); + return new GISGeometryCollection(_geometries,this); } public GISMultiPolyligne createMultiLineString(final LineString[] _lineStrings){ Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java 2009-03-10 16:21:47 UTC (rev 4519) @@ -0,0 +1,55 @@ +/* + * @creation 6 mars 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ctulu.gis; + +import org.fudaa.ctulu.CtuluCommandContainer; + +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Une zone qui contient des blocs {@link GISGeometryCollection}. Les attributs portent sur la totalit\xE9 d'un bloc. + * Ils ne sont pas d\xE9clin\xE9s par g\xE9om\xE9trie contenues dans le bloc. En cas d'attribut atomique, celui porte dans l'ordre sur + * tous les sommets de toutes les g\xE9om\xE9tries contenues dans le bloc. + * + * @statut Experimental + * @author Bertrand Marchand + * @version $Id:$ + */ +public class GISZoneCollectionBloc extends GISZoneCollectionGeometry { + + + @Override + public void addCoordinateSequence(CoordinateSequence _seq, Object[] _datas, CtuluCommandContainer _cmd) { + throw new IllegalAccessError("Can't call this method"); + } + + @Override + public int addGeometry(Geometry _geom, Object[] _data, CtuluCommandContainer _cmd) { + if (!(_geom instanceof GISGeometryCollection)) + throw new IllegalArgumentException("Bad type geometry"); + + return super.addGeometry(_geom, _data, _cmd); + } + + @Override + public Class<? extends GISGeometryCollection> getDataStoreClass() { + return GISGeometryCollection.class; + } + + @Override + public void setCoordinateSequence(int _idx, CoordinateSequence seq, CtuluCommandContainer _cmd) { + throw new IllegalAccessError("Can't call this method"); + } + + @Override + public double getDoubleValue(int att, int geom) { + throw new IllegalAccessError("Can't call this method"); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java 2009-03-10 16:21:47 UTC (rev 4519) @@ -0,0 +1,291 @@ +/* + * @creation 31 mars 2005 + * @modification $Date: 2008-10-30 10:47:50 +0100 (jeu., 30 oct. 2008) $ + * @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; + +import gnu.trove.TIntArrayList; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; + +import org.fudaa.ctulu.CtuluListSelection; +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.geometrie.GrBoite; +import org.fudaa.ebli.geometrie.GrMorphisme; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrSegment; +import org.fudaa.ebli.trace.TraceIcon; +import org.fudaa.ebli.trace.TraceIconModel; +import org.fudaa.ebli.trace.TraceLigne; +import org.fudaa.ebli.trace.TraceSurface; + +/** + * Un calque g\xE9rant des blocs, \xE0 un niveau global ou atomique.<p> + * Le niveau atomique des blocs est le niveau points. Le calque s'appuie sur un mod\xE8le + * {@link ZModeleBloc}. + * + * @author Bertrand Marchand + * @status Experimental + * @version $Id$ + */ +public class ZCalqueBloc extends ZCalqueGeometry<ZModeleBloc> { + + /** + * Le seul constructeur, avec le mod\xE8le. + * @param _modele le modele du calque + */ + public ZCalqueBloc(final ZModeleBloc _modele) { + super(_modele); + iconModel_ = new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, Color.BLACK); + } + + public CtuluListSelection selection(final GrPoint _pt, final int _tolerance) { + if (modele_.getNombre() == 0) { + return null; + } + final GrBoite bClip = getDomaine(); + if (bClip == null) { + return null; + } + final double distanceReel = GrMorphisme.convertDistanceXY(getVersReel(), _tolerance); + if ((!bClip.contientXY(_pt)) && (bClip.distanceXY(_pt) > distanceReel)) { + return null; + } + + final GrPoint pt=new GrPoint(); + final GrSegment poly = new GrSegment(new GrPoint(), new GrPoint()); + final GrBoite bPoly = new GrBoite(new GrPoint(), new GrPoint()); + + for (int ibloc = modele_.getNombre() - 1; ibloc >= 0; ibloc--) { + if (!modele_.isGeometryVisible(ibloc)) continue; + + modele_.getDomaineForGeometry(ibloc, bPoly); + if (!bPoly.contientXY(_pt) && bPoly.distanceXY(_pt)>=distanceReel) + continue; + + int nbGeom=modele_.getNbGeometryForBloc(ibloc); + for (int igeom=nbGeom-1; igeom>=0; igeom--) { + if (modele_.isGeometryRelieeForBloc(ibloc,igeom)) { + for (int j=modele_.getNbPointForGeometry(ibloc,igeom)-1; j>0; j--) { + modele_.point(poly.e_, ibloc, igeom, j); + modele_.point(poly.o_, ibloc, igeom, j-1); + if (poly.distanceXY(_pt)<distanceReel) { + final CtuluListSelection r=new CtuluListSelection(1); + r.setSelectionInterval(ibloc, ibloc); + return r; + } + } + if (modele_.isGeometryFermeeForBloc(ibloc,igeom)) { + modele_.point(poly.e_, ibloc, igeom, 0); + modele_.point(poly.o_, ibloc, igeom, modele_.getNbPointForGeometry(ibloc, igeom)-1); + if (poly.distanceXY(_pt)<distanceReel) { + final CtuluListSelection r=new CtuluListSelection(1); + r.setSelectionInterval(ibloc, ibloc); + return r; + } + } + } + else { + for (int j=modele_.getNbPointForGeometry(ibloc, igeom)-1; j>=0; j--) { + modele_.point(pt, ibloc, igeom, j); + if (pt.distanceXY(_pt)<distanceReel) { + final CtuluListSelection r=new CtuluListSelection(1); + r.setSelectionInterval(ibloc, ibloc); + return r; + } + } + } + } + } + return null; + } + + public void paintDonnees(final Graphics2D _g, final GrMorphisme _versEcran, final GrMorphisme _versReel, + final GrBoite _clipReel) { + if ((modele_ == null) || (modele_.getNombre() <= 0)) { + return; + } + final GrBoite clip = _clipReel; + final GrMorphisme versEcran = _versEcran; + final int nbBloc = modele_.getNombre(); + + final TraceLigne tl; + if (isRapide()) + tl=new TraceLigne(TraceLigne.LISSE,1,ligneModel_.getCouleur()); + else + tl= ligneModel_.buildCopy(); + + final TraceSurface ts; + if (surfModel_!=null) { + ts=surfModel_.buildCopy(); + ts.setCouleurFond(EbliLib.getAlphaColor(ts.getCouleurFond(), alpha_)); + } + else { + ts=null; + } + + final GrBoite bPoly = new GrBoite(); + bPoly.o_ = new GrPoint(); + bPoly.e_ = new GrPoint(); + + // Les surfaces, si a tracer + if (!isRapide() && ts!=null && ts.getTypeSurface()!=TraceSurface.INVISIBLE) { + TIntArrayList x=new TIntArrayList(50); + TIntArrayList y=new TIntArrayList(50); + + for (int ibloc=nbBloc-1; ibloc>=0; ibloc--) { + // La g\xE9ometrie n'est pas visible + if (!modele_.isGeometryVisible(ibloc)) + continue; + + modele_.getDomaineForGeometry(ibloc, bPoly); + // Si la boite du polygone n'est pas dans la boite d'affichage on + // passe + if (bPoly.intersectionXY(clip)==null) { + continue; + } + + int nbGeom=modele_.getNbGeometryForBloc(ibloc); + for (int igeom=nbGeom-1; igeom>=0; igeom--) { + if (!modele_.isGeometryRelieeForBloc(ibloc, igeom) || + !modele_.isGeometryFermeeForBloc(ibloc, igeom)) + continue; + + // il n'y a pas de points pour cette g\xE9om\xE9trie + final int nbPoints=modele_.getNbPointForGeometry(ibloc,igeom); + if (nbPoints<=0) + continue; + + x.reset(); + y.reset(); + final GrPoint pt=new GrPoint(); + for (int j=0; j<nbPoints; j++) { + // le point de dest est initialise + modele_.point(pt, ibloc, igeom, j); + pt.autoApplique(versEcran); + x.add((int)pt.x_); + y.add((int)pt.y_); + } + ts.remplitPolygone((Graphics2D)_g, x.toNativeArray(), y.toNativeArray()); + } + } + } + + // on part de la fin : comme ca la premiere ligne apparait au-dessus + for (int ibloc = nbBloc - 1; ibloc >= 0; ibloc--) { + // La g\xE9ometrie n'est pas visible + if (!modele_.isGeometryVisible(ibloc)) + continue; + + modele_.getDomaineForGeometry(ibloc, bPoly); + // Si la boite du polygone n'est pas dans la boite d'affichage on passe + if (bPoly.intersectionXY(clip) == null) { + continue; + } + + int nbGeom=modele_.getNbGeometryForBloc(ibloc); + for (int idxgeom=nbGeom-1; idxgeom>=0; idxgeom--) { + if (!modele_.isGeometryRelieeForBloc(ibloc, idxgeom)) + continue; + + // il n'y a pas de points pour cette g\xE9om\xE9trie + final int nbPoints=modele_.getNbPointForGeometry(ibloc, idxgeom); + if (nbPoints<=0) + continue; + + final GrPoint ptOri=new GrPoint(); + modele_.point(ptOri, ibloc, idxgeom, nbPoints-1); + ptOri.autoApplique(versEcran); + + if (!isRapide()) + initTrace(ligneModel_, ibloc); + final GrPoint ptDest=new GrPoint(); + for (int j=nbPoints-2; j>=0; j--) { + // le point de dest est initialise + modele_.point(ptDest, ibloc, idxgeom, j); + ptDest.autoApplique(versEcran); + tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + ptOri.initialiseAvec(ptDest); + } + if (modele_.isGeometryFermeeForBloc(ibloc,idxgeom)) { + modele_.point(ptOri, ibloc, idxgeom, nbPoints-1); + ptOri.autoApplique(versEcran); + tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + } + } + } + + // On trace les icones + paintIconsOnAtomics(_g, _versEcran, _versReel, _clipReel); + // Enfin les labels sur les atomiques. + paintLabelsOnAtomics(_g, _versEcran, _versReel, _clipReel); + } + + public void paintSelectionSimple(final Graphics _g, final ZSelectionTrace _trace, final GrMorphisme _versEcran, + final GrBoite _clipReel, CtuluListSelection _sel) { + if ((isRapide()) || (isSelectionEmpty())) { + return; + } + final GrBoite clip = _clipReel; + if (getDomaine() == null || !getDomaine().intersectXY(clip)) { + return; + + } + final GrMorphisme versEcran = _versEcran; + Color cs = _trace.getColor(); + if (isAttenue()) { + cs = attenueCouleur(cs); + } + _g.setColor(cs); + final TraceLigne tlSelection = _trace.getLigne(); + final TraceIcon ic = _trace.getIcone(); + final int nbBloc = Math.min(_sel.getMaxIndex(), modele_.getNombre() - 1); + + final GrBoite btGeom = new GrBoite(); + btGeom.e_ = new GrPoint(); + btGeom.o_ = new GrPoint(); + for (int ibloc = nbBloc; ibloc >= 0; ibloc--) { + if (!_sel.isSelected(ibloc)) { + continue; + } + modele_.getDomaineForGeometry(ibloc, btGeom); + // Si la boite de la geometrie n'est pas dans la boite d'affichage on passe + if (btGeom.intersectionXY(clip) == null) { + continue; + } + + final int nbGeom=modele_.getNbGeometryForBloc(ibloc); + for (int igeom=nbGeom-1; igeom>=0; igeom--) { + final int nbPoints=modele_.getNbPointForGeometry(ibloc,igeom); + boolean bferm=modele_.isGeometryFermeeForBloc(ibloc,igeom); + boolean breli=modele_.isGeometryRelieeForBloc(ibloc,igeom); + + final GrPoint ptOri=new GrPoint(); + modele_.point(ptOri, ibloc, igeom, nbPoints-1); + ptOri.autoApplique(versEcran); + ic.paintIconCentre(this, _g, ptOri.x_, ptOri.y_); + final GrPoint ptDest=new GrPoint(); + for (int j=nbPoints-2; j>=0; j--) { + // le point de dest est initialise + modele_.point(ptDest, ibloc, igeom, j); + ptDest.autoApplique(versEcran); + ic.paintIconCentre(this, _g, ptDest.x_, ptDest.y_); + if (breli) + tlSelection.dessineTrait((Graphics2D)_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + ptOri.initialiseAvec(ptDest); + } + if (bferm) { + modele_.point(ptOri, ibloc, igeom, nbPoints-1); + ptOri.autoApplique(versEcran); + if (breli) + tlSelection.dessineTrait((Graphics2D)_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + } + } + } + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java 2009-03-10 16:21:47 UTC (rev 4519) @@ -0,0 +1,32 @@ +/* + * @creation 31 mars 2005 + * @modification $Date: 2009-01-23 17:12:37 +0100 (ven., 23 janv. 2009) $ + * @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; + +import org.fudaa.ctulu.gis.GISZoneCollectionBloc; +import org.fudaa.ebli.geometrie.GrPoint; + +/** + * Un mod\xE8le contenant des blocs. Les modifications apport\xE9es au mod\xE8le peuvent \xEAtre \xE9cout\xE9es. + * + * @author Bertrand Marchand + * @status Experimental + * @see {@link GISZoneCollectionBloc}, {@link ZCalqueBloc}, + * @version $Id$ + */ +public interface ZModeleBloc extends ZModeleGeometry { + + int getNbGeometryForBloc(int _idxBloc); + + int getNbPointForGeometry(int _idxBloc, int _idxGeom); + + boolean isGeometryFermeeForBloc(int _idxBloc, int _idxGeom); + + boolean isGeometryRelieeForBloc(int _idxBloc, int _idxGeom); + + boolean point(GrPoint _pt, int _idxBloc, int _idxGeom, int _pointIdx); +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java 2009-03-10 16:21:47 UTC (rev 4519) @@ -0,0 +1,68 @@ +/* + * @creation 4 avr. 2005 + * @modification $Date: 2008-11-12 14:36:43 +0100 (mer., 12 nov. 2008) $ + * @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.edition; + +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISGeometryCollection; +import org.fudaa.ctulu.gis.GISZoneCollectionBloc; +import org.fudaa.ebli.calque.ZCalqueBloc; +import org.fudaa.ebli.calque.ZModeleBloc; +import org.fudaa.ebli.geometrie.GrPoint; + +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LineString; + +/** + * Un mod\xE8le contenant des blocs. Les modifications apport\xE9es au mod\xE8le peuvent \xEAtre \xE9cout\xE9es. + * + * @author Bertrand Marchand + * @status Experimental + * @see {@link GISZoneCollectionBloc}, {@link ZCalqueBloc}, + * @version $Id$ + */ +public class ZModeleBlocDefault extends ZModeleGeometryDefault + implements ZModeleBloc { + + public ZModeleBlocDefault() { + this(new GISZoneCollectionBloc()); + } + + public ZModeleBlocDefault(GISZoneCollectionBloc _zone) { + super(_zone); + } + + public int getNbGeometryForBloc(int _idxBloc) { + return getGeomData().getGeometry(_idxBloc).getNumGeometries(); + } + + public int getNbPointForGeometry(int _idxBloc, int _idxGeom) { + Geometry g=((GISGeometryCollection)geometries_.getGeometry(_idxBloc)).getGeometryN(_idxGeom); + return g.getNumPoints(); + } + + public boolean isGeometryFermeeForBloc(int _idxBloc, int _idxGeom) { + Geometry g=((GISGeometryCollection)geometries_.getGeometry(_idxBloc)).getGeometryN(_idxGeom); + return (g instanceof LineString && ((LineString)g).isClosed()); + } + + public boolean isGeometryRelieeForBloc(int _idxBloc, int _idxGeom) { + Geometry g=((GISGeometryCollection)geometries_.getGeometry(_idxBloc)).getGeometryN(_idxGeom); + return (g instanceof LineString); + } + + public boolean point(GrPoint _pt, int _idxBloc, int _idxGeom, int _pointIdx) { + final CoordinateSequence g=((GISCoordinateSequenceContainerInterface)((GISGeometryCollection)geometries_.getGeometry(_idxBloc)). + getGeometryN(_idxGeom)).getCoordinateSequence(); + _pt.x_ = g.getX(_pointIdx); + _pt.y_ = g.getY(_pointIdx); + _pt.z_=g.getOrdinate(_pointIdx, 2); + + return true; + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-10 16:34:33
|
Revision: 4520 http://fudaa.svn.sourceforge.net/fudaa/?rev=4520&view=rev Author: bmarchan Date: 2009-03-10 16:34:25 +0000 (Tue, 10 Mar 2009) Log Message: ----------- Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java 2009-03-10 16:21:47 UTC (rev 4519) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionBloc.java 2009-03-10 16:34:25 UTC (rev 4520) @@ -1,6 +1,5 @@ /* * @creation 6 mars 2009 - * @modification $Date:$ * @license GNU General Public License 2 * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -19,7 +18,7 @@ * * @statut Experimental * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ public class GISZoneCollectionBloc extends GISZoneCollectionGeometry { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java 2009-03-10 16:21:47 UTC (rev 4519) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueBloc.java 2009-03-10 16:34:25 UTC (rev 4520) @@ -1,6 +1,5 @@ /* - * @creation 31 mars 2005 - * @modification $Date: 2008-10-30 10:47:50 +0100 (jeu., 30 oct. 2008) $ + * @creation 10 mars 2009 * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java 2009-03-10 16:21:47 UTC (rev 4519) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZModeleBloc.java 2009-03-10 16:34:25 UTC (rev 4520) @@ -1,6 +1,5 @@ /* - * @creation 31 mars 2005 - * @modification $Date: 2009-01-23 17:12:37 +0100 (ven., 23 janv. 2009) $ + * @creation 10 mars 2009 * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java 2009-03-10 16:21:47 UTC (rev 4519) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleBlocDefault.java 2009-03-10 16:34:25 UTC (rev 4520) @@ -1,6 +1,5 @@ /* - * @creation 4 avr. 2005 - * @modification $Date: 2008-11-12 14:36:43 +0100 (mer., 12 nov. 2008) $ + * @creation 10 Mars 2009 * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-10 16:37:49
|
Revision: 4521 http://fudaa.svn.sourceforge.net/fudaa/?rev=4521&view=rev Author: bmarchan Date: 2009-03-10 16:37:38 +0000 (Tue, 10 Mar 2009) Log Message: ----------- Gestion du trac?\195?\169 de surfaces. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesTraceConfigure.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/controle/BSelecteurSurfaceModel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceChooser.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceRenderer.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java 2009-03-10 16:34:25 UTC (rev 4520) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -27,6 +27,7 @@ import org.fudaa.ebli.controle.BSelecteurCheckBox; import org.fudaa.ebli.controle.BSelecteurIconModel; import org.fudaa.ebli.controle.BSelecteurLineModel; +import org.fudaa.ebli.controle.BSelecteurSurfaceModel; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.geometrie.GrMorphisme; import org.fudaa.ebli.geometrie.GrPoint; @@ -39,6 +40,7 @@ import org.fudaa.ebli.palette.BPaletteInfo.InfoData; import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigneModel; +import org.fudaa.ebli.trace.TraceSurfaceModel; /** * @author deniger @@ -89,9 +91,13 @@ _r.o_.x_ -= delta; } + /** Le modele pour le trac\xE9 des icones. */ protected TraceIconModel iconModel_; - + /** Le modele pour le trac\xE9 des lignes. */ protected TraceLigneModel ligneModel_; + /** Le modele pour le trac\xE9 des surfaces. + * Si null, le selecteur de surface n'est pas repr\xE9sent\xE9 dans la configuration du calque, le trac\xE9 de surface ne se fait pas. */ + protected TraceSurfaceModel surfModel_; protected int alpha_ = 255; /** @@ -345,6 +351,10 @@ if (_p.isDefined(prop)) { setLineModel(i, (TraceLigneModel) _p.get(prop)); } + prop = createPropSurf(i); + if (_p.isDefined(prop)) { + setSurfaceModel(i, (TraceSurfaceModel) _p.get(prop)); + } } if (_p.isDefined("calque.paletteCouleur")) { @@ -359,6 +369,10 @@ return "calque." + BSelecteurLineModel.getProperty(_i); } + private String createPropSurf(final int _i) { + return "calque." + BSelecteurSurfaceModel.getProperty(_i); + } + private String createPropIcon(final int _i) { return "calque." + BSelecteurIconModel.getProperty(_i); } @@ -503,6 +517,10 @@ if (lineModel != null) { res.put(createPropLine(i), new TraceLigneModel(lineModel)); } + final TraceSurfaceModel surfModel = getSurfaceModel(i); + if (surfModel != null) { + res.put(createPropSurf(i), new TraceSurfaceModel(surfModel)); + } } if (EbliLib.isAlphaChanged(alpha_)) { res.put("calque.alpha", alpha_); @@ -526,6 +544,10 @@ if (line != null && line.setCouleur(_v)) { firePropertyChange(BSelecteurLineModel.getProperty(i), null, line); } + final TraceSurfaceModel surf = getSurfaceModel(i); + if (surf != null && surf.setBgColor(_v)) { + firePropertyChange(BSelecteurSurfaceModel.getProperty(i), null, surf); + } } super.setForeground(_v); if (isPaletteCouleurUsed_) { @@ -610,6 +632,20 @@ return 1; } + public boolean setSurfaceModel(final int _idx, final TraceSurfaceModel _model) { + final TraceSurfaceModel surf = getSurfaceModel(_idx); + if (_model != null && surf != null && surf.updateData(_model)) { + firePropertyChange(BSelecteurSurfaceModel.getProperty(_idx), null, surf); + repaint(); + return true; + } + return false; + } + + public TraceSurfaceModel getSurfaceModel(final int _idx) { + return surfModel_; + } + public boolean setLineModel(final int _idx, final TraceLigneModel _model) { final TraceLigneModel ligne = getLineModel(_idx); if (_model != null && ligne != null && ligne.updateData(_model)) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesTraceConfigure.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesTraceConfigure.java 2009-03-10 16:34:25 UTC (rev 4520) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesTraceConfigure.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -7,12 +7,16 @@ */ package org.fudaa.ebli.calque; +import java.util.List; + import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.controle.BSelecteurIconModel; import org.fudaa.ebli.controle.BSelecteurInterface; import org.fudaa.ebli.controle.BSelecteurLineModel; +import org.fudaa.ebli.controle.BSelecteurSurfaceModel; import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigneModel; +import org.fudaa.ebli.trace.TraceSurfaceModel; /** * @author fred deniger @@ -21,18 +25,18 @@ public class ZCalqueAffichageDonneesTraceConfigure extends BCalqueConfigureSectionAbstract { final int idx_; - final String propIcon_; - final String propLine_; + String propIcon_; + String propLine_; + String propSurf_; public ZCalqueAffichageDonneesTraceConfigure(final ZCalqueAffichageDonneesAbstract _target, final int _idx) { super(_target, _target.getNbSet() == 1 ? EbliLib.getS("Style") : _target.getSetTitle(_idx)); idx_ = _idx; propIcon_ = BSelecteurIconModel.getProperty(idx_); - if (_target.getLineModel(idx_) == null) { - propLine_ = null; - } else { + if (_target.getLineModel(idx_)!=null) propLine_ = BSelecteurLineModel.getProperty(idx_); - } + if (_target.getSurfaceModel(_idx)!=null) + propSurf_=BSelecteurSurfaceModel.getProperty(idx_); } protected ZCalqueAffichageDonneesAbstract getCq() { @@ -42,29 +46,50 @@ public boolean setProperty(final String _key, final Object _newProp) { if (_key == propIcon_) { return getCq().setIconModel(idx_, (TraceIconModel) _newProp); - } - return getCq().setLineModel(idx_, (TraceLigneModel) _newProp); + else if (_key==propLine_) { + return getCq().setLineModel(idx_, (TraceLigneModel) _newProp); + } + else { + return getCq().setSurfaceModel(idx_, (TraceSurfaceModel) _newProp); + } } public Object getProperty(final String _key) { if (_key.equals(propIcon_)) { return getCq().getIconModel(idx_); - } - return getCq().getLineModel(idx_); + else if (_key.equals(propLine_)) { + return getCq().getLineModel(idx_); + } + else { + return getCq().getSurfaceModel(idx_); + } } public BSelecteurInterface[] createSelecteurs() { - final BSelecteurIconModel selecteurIconModel = new BSelecteurIconModel(propIcon_); - selecteurIconModel.setTitle(EbliLib.getS("Trac\xE9 des points")); - if (propLine_ == null) { - return new BSelecteurInterface[] { selecteurIconModel }; + + int nbsel=(propIcon_==null?0:1)+(propLine_==null?0:1)+(propSurf_==null?0:1); + BSelecteurInterface[] sel=new BSelecteurInterface[nbsel]; + + int isel=0; + if (propIcon_!=null) { + final BSelecteurIconModel selecteurIconModel = new BSelecteurIconModel(propIcon_); + selecteurIconModel.setTitle(EbliLib.getS("Trac\xE9 des points")); + sel[isel++]=selecteurIconModel; } - final BSelecteurLineModel selecteurLineModel = new BSelecteurLineModel(propLine_); - selecteurLineModel.setTitle(EbliLib.getS("Trac\xE9 des lignes")); - return new BSelecteurInterface[] { selecteurIconModel, selecteurLineModel }; + if (propLine_!=null) { + final BSelecteurLineModel selecteurLineModel = new BSelecteurLineModel(propLine_); + selecteurLineModel.setTitle(EbliLib.getS("Trac\xE9 des lignes")); + sel[isel++]=selecteurLineModel; + } + + if (propSurf_!=null) { + final BSelecteurSurfaceModel selecteurSurfaceModel = new BSelecteurSurfaceModel(propSurf_); + selecteurSurfaceModel.setTitle(EbliLib.getS("Trac\xE9 des surfaces")); + sel[isel++]=selecteurSurfaceModel; + } + return sel; } - } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-03-10 16:34:25 UTC (rev 4520) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueGeometry.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -50,7 +50,6 @@ import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LinearRing; @@ -62,18 +61,16 @@ * @author Bertrand Marchand * @version $Id$ */ -public class ZCalqueGeometry extends ZCalqueAffichageDonneesLineAbstract implements ZModelGeometryListener { +public class ZCalqueGeometry<M extends ZModeleGeometry> extends ZCalqueAffichageDonneesLineAbstract implements ZModelGeometryListener { /** true si selection en mode sommets */ transient protected boolean isAtomicMode_; /** Le mod\xE8le des g\xE9om\xE9tries */ - protected ZModeleGeometry modele_; + protected M modele_; /** La selection a utilise dans le mode selection sommets */ protected EbliListeSelectionMulti selectionMulti_; /** Pour le trac\xE9 de la selection en mode atomique. */ protected ZSelectionTrace traceAtomic_; - /** Le mod\xE8le pour le trac\xE9 de surfaces */ - protected TraceSurfaceModel surfModel_; /** L'attribut utilis\xE9 pour afficher les labels */ protected GISAttributeInterface attrLabels_=null; /** Le finder pour une recherche sur le calque */ @@ -83,12 +80,11 @@ * Le seul constructeur, avec le mod\xE8le. * @param _modele le modele du calque */ - public ZCalqueGeometry(final ZModeleGeometry _modele) { + public ZCalqueGeometry(final M _modele) { modele_ = _modele; if(modele_!=null) modele_.addModelListener(this); iconModel_ = new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, Color.BLACK); - surfModel_=new TraceSurfaceModel(TraceSurface.INVISIBLE, Color.BLACK,null); } protected EbliListeSelectionMulti creeSelectionMulti() { @@ -424,7 +420,7 @@ /** * @param _modele Modele */ - public void modele(final ZModeleGeometry _modele) { + public void modele(final M _modele) { if (modele_ != _modele) { if(modele_!=null) modele_.removeModelListener(this); @@ -436,7 +432,7 @@ } } - public ZModeleGeometry modeleDonnees() { + public M modeleDonnees() { return modele_; } @@ -448,18 +444,13 @@ if ((modele_ == null) || (modele_.getNombre() <= 0)) { return; } + + // Trac\xE9 des surfaces + paintSurfaces(_g, _versEcran, _versReel, _clipReel); + final GrBoite clip = _clipReel; final GrMorphisme versEcran = _versEcran; final int nombre = modele_.getNombre(); - - final TraceIconModel iconeModel = iconModel_ == null ? null : new TraceIconModel(iconModel_); - - final TraceIcon icone; - if (isRapide()) { - icone=new TraceIcon(TraceIcon.CARRE,2,iconeModel.getCouleur()); - } - else - icone = iconeModel == null ? null : new TraceIcon(iconeModel); final TraceLigne tl; if (isRapide()) @@ -467,48 +458,9 @@ else tl= ligneModel_.buildCopy(); - final TraceSurface ts=surfModel_.buildCopy(); - final GrBoite bPoly = new GrBoite(); bPoly.o_ = new GrPoint(); bPoly.e_ = new GrPoint(); - - // Les surfaces, si a tracer - if (!isRapide()) { - TIntArrayList x=new TIntArrayList(50); - TIntArrayList y=new TIntArrayList(50); - - for (int i = nombre - 1; i >= 0; i--) { - if (!modele_.isGeometryReliee(i) || !modele_.isGeometryFermee(i)) - continue; - - // il n'y a pas de points pour cette g\xE9om\xE9trie - final int nbPoints=modele_.getNbPointForGeometry(i); - if (nbPoints <= 0) - continue; - // La g\xE9ometrie n'est pas visible - if (!modele_.isGeometryVisible(i)) - continue; - - modele_.getDomaineForGeometry(i, bPoly); - // Si la boite du polygone n'est pas dans la boite d'affichage on passe - if (bPoly.intersectionXY(clip) == null) { - continue; - } - - x.reset(); - y.reset(); - final GrPoint pt=new GrPoint(); - for (int j=0; j<nbPoints; j++) { - // le point de dest est initialise - modele_.point(pt, i, j); - pt.autoApplique(versEcran); - x.add((int)pt.x_); - y.add((int)pt.y_); - } - ts.remplitPolygone((Graphics2D)_g,x.toNativeArray(),y.toNativeArray()); - } - } // on part de la fin : comme ca la premiere ligne apparait au-dessus for (int i = nombre - 1; i >= 0; i--) { @@ -550,7 +502,85 @@ modele_.point(ptOri, i, nbPoints - 1); ptOri.autoApplique(versEcran); } + + // Les icones sur les atomiques + paintIconsOnAtomics(_g, _versEcran, _versReel, _clipReel); + // Enfin les labels sur les atomiques. + paintLabelsOnAtomics(_g, _versEcran, _versReel, _clipReel); + } + + protected void paintSurfaces(final Graphics2D _g, final GrMorphisme _versEcran, final GrMorphisme _versReel, + final GrBoite _clipReel) { + + final GrBoite clip = _clipReel; + final GrMorphisme versEcran = _versEcran; + final int nombre = modele_.getNombre(); + final GrBoite bPoly = new GrBoite(); + final TraceSurface ts; + if (surfModel_!=null) { + ts=surfModel_.buildCopy(); + ts.setCouleurFond(EbliLib.getAlphaColor(ts.getCouleurFond(), alpha_)); + } + else { + ts=null; + } + + // Les surfaces, si a tracer + if (!isRapide() && ts!=null && ts.getTypeSurface()!=TraceSurface.INVISIBLE) { + TIntArrayList x=new TIntArrayList(50); + TIntArrayList y=new TIntArrayList(50); + + for (int i = nombre - 1; i >= 0; i--) { + if (!modele_.isGeometryReliee(i) || !modele_.isGeometryFermee(i)) + continue; + + // il n'y a pas de points pour cette g\xE9om\xE9trie + final int nbPoints=modele_.getNbPointForGeometry(i); + if (nbPoints <= 0) + continue; + // La g\xE9ometrie n'est pas visible + if (!modele_.isGeometryVisible(i)) + continue; + + modele_.getDomaineForGeometry(i, bPoly); + // Si la boite du polygone n'est pas dans la boite d'affichage on passe + if (bPoly.intersectionXY(clip) == null) { + continue; + } + + x.reset(); + y.reset(); + final GrPoint pt=new GrPoint(); + for (int j=0; j<nbPoints; j++) { + // le point de dest est initialise + modele_.point(pt, i, j); + pt.autoApplique(versEcran); + x.add((int)pt.x_); + y.add((int)pt.y_); + } + ts.remplitPolygone((Graphics2D)_g,x.toNativeArray(),y.toNativeArray()); + } + } + } + + protected void paintIconsOnAtomics(final Graphics2D _g, final GrMorphisme _versEcran, final GrMorphisme _versReel, + final GrBoite _clipReel) { + + final GrBoite clip = _clipReel; + final GrMorphisme versEcran = _versEcran; + final int nombre = modele_.getNombre(); + final GrBoite bPoly = new GrBoite(); + + final TraceIconModel iconeModel = iconModel_ == null ? null : new TraceIconModel(iconModel_); + + final TraceIcon icone; + if (isRapide()) { + icone=new TraceIcon(TraceIcon.CARRE,2,iconeModel.getCouleur()); + } + else + icone = iconeModel == null ? null : new TraceIcon(iconeModel); + // on trace les icones apres pour qu'ils soient dessin\xE9s au-dessus des lignes. if (icone != null) { for (int i = nombre - 1; i >= 0; i--) { @@ -585,8 +615,16 @@ } } } + } + + protected void paintLabelsOnAtomics(final Graphics2D _g, final GrMorphisme _versEcran, final GrMorphisme _versReel, + final GrBoite _clipReel) { - // Enfin les labels sur les atomiques. + final GrBoite clip = _clipReel; + final GrMorphisme versEcran = _versEcran; + final int nombre = modele_.getNombre(); + final GrBoite bPoly = new GrBoite(); + if (attrLabels_!=null && !isRapide()) { GISZoneCollection geomData = modeleDonnees().getGeomData(); int idxLabels=geomData.getIndiceOf(attrLabels_); @@ -1046,20 +1084,6 @@ } } - public boolean setSurfaceModel(final TraceSurfaceModel _model) { - final TraceSurfaceModel surf = getSurfaceModel(); - if (_model != null && surf != null && surf.updateData(_model)) { -// firePropertyChange(BSelecteurLineModel.getProperty(_idx), null, surf); - repaint(); - return true; - } - return false; - } - - public TraceSurfaceModel getSurfaceModel() { - return surfModel_; - } - public boolean setTitle(final String _title) { final boolean r = super.setTitle(_title); if (r && modele_ != null && modele_.getGeomData() != null) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-03-10 16:34:25 UTC (rev 4520) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -161,6 +161,9 @@ if ((modele_ == null) || (modele_.getNombre() <= 0)) { return; } + + paintSurfaces(_g, _versEcran, _versReel, _clipReel); + final GrBoite clip = _clipReel; final GrMorphisme versEcran = _versEcran; final int nombre = modele_.getNombre(); @@ -258,97 +261,11 @@ } } - // on trace les icones apres pour qu'ils soient dessin\xE9s au-dessus des lignes. - if (icone != null && !isRapide()) { - for (int i = nombre - 1; i >= 0; i--) { - // il n'y a pas de points pour cette ligne - if (modele_.getNbPointForGeometry(i) <= 0) { - continue; - } - // La g\xE9ometrie n'est pas visible - if (!modele_.isGeometryVisible(i)) - continue; - - modele_.getDomaineForGeometry(i, bPoly); - // Si la boite du polygone n'est pas dans la boite d'affichage on passe - if (bPoly.intersectionXY(clip) == null) { - continue; - } - final int nbPoints = modele_.getNbPointForGeometry(i); - if (nbPoints <= 0) { - continue; - } - initTrace(iconeModel, i); - final GrPoint ptDest = new GrPoint(); - for (int j = nbPoints - 1; j >= 0; j--) { - // le point de dest est initialise - modele_.point(ptDest, i, j); - ptDest.autoApplique(versEcran); - icone.paintIconCentre(this, _g, ptDest.x_, ptDest.y_); - } - } - } - + // Les icones sur les atomiques + if (!isRapide()) + paintIconsOnAtomics(_g, _versEcran, _versReel, _clipReel); // Enfin les labels sur les atomiques. - if (attrLabels_!=null && !isRapide()) { - GISZoneCollection geomData = modeleDonnees().getGeomData(); - int idxLabels=geomData.getIndiceOf(attrLabels_); - - if (idxLabels!=-1) { - final FontMetrics fm = _g.getFontMetrics(); - final Color fgColor = _g.getColor(); - final Color bgColor = getBackground(); - - for (int i=nombre-1; i>=0; i--) { - // il n'y a pas de points pour cette ligne - if (modele_.getNbPointForGeometry(i)<=0) { - continue; - } - // La g\xE9ometrie n'est pas visible - if (!modele_.isGeometryVisible(i)) - continue; - - modele_.getDomaineForGeometry(i, bPoly); - // Si la boite du polygone n'est pas dans la boite d'affichage on - // passe - if (bPoly.intersectionXY(clip)==null) { - continue; - } - final int nbPoints=modele_.getNbPointForGeometry(i); - if (nbPoints<=0) { - continue; - } - - GISAttributeModel mdl=(GISAttributeModel)geomData.getModel(idxLabels).getObjectValueAt(i); - - final GrPoint ptDest=new GrPoint(); - for (int j=nbPoints-1; j>=0; j--) { - modele_.point(ptDest, i, j); - if (!_clipReel.contientXY(ptDest)) { - continue; - } - - // Les labels : Uniquement si le string correspondant n'est pas "". - Object o=mdl.getObjectValueAt(j); - if (o==null) - continue; - String s=o.toString().trim(); - if (s.equals("")) - continue; - - ptDest.autoApplique(versEcran); - final Rectangle2D rec=fm.getStringBounds(s, _g); - double x=ptDest.x_-rec.getWidth()/2; - double y=ptDest.y_-3; - rec.setFrame(x, y-fm.getAscent(), rec.getWidth(), fm.getAscent()+2); - _g.setColor(bgColor); - _g.fill(rec); - _g.setColor(fgColor); - _g.drawString(s, (int)x, (int)y); - } - } - } - } + paintLabelsOnAtomics(_g, _versEcran, _versReel, _clipReel); } public void setLineModelOuvert(final TraceLigneModel _model) { Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/controle/BSelecteurSurfaceModel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/controle/BSelecteurSurfaceModel.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/controle/BSelecteurSurfaceModel.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -0,0 +1,186 @@ +/* + * @creation 10 Mars 2009 + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.controle; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.beans.PropertyChangeListener; + +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.trace.TraceSurface; +import org.fudaa.ebli.trace.TraceSurfaceChooser; +import org.fudaa.ebli.trace.TraceSurfaceModel; + +import com.memoire.bu.BuComboBox; +import com.memoire.bu.BuGridLayout; +import com.memoire.bu.BuPanel; +import com.memoire.fu.FuLog; + +/** + * Un selecteur pour un modele de surface. Seule la couleur de fond du trac\xE9 est g\xE9r\xE9e. + * @author Bertrand Marchand + * @version $Id$ + */ +public class BSelecteurSurfaceModel extends BSelecteurAbstract implements ItemListener, ChangeListener { + + public static final String DEFAULT_PROPERTY = "surfaceModel"; + + public static final String getProperty(final int _idx) { + return _idx == 0 ? DEFAULT_PROPERTY : DEFAULT_PROPERTY + _idx; + } + BSelecteurColorChooserBt btColor_; + BuComboBox cbType_; + TraceSurfaceModel old_; + + TraceSurfaceChooser typeModel_; + + protected class BSelecteurColorTarget implements BSelecteurTargetInterface { + Color currentColor_; + + public void addPropertyChangeListener(final String _key, final PropertyChangeListener _l) {} + + public Object getMin(final String _key) { + return null; + } + + public Object getMoy(final String _key) { + return null; + } + + public Object getProperty(final String _key) { + return currentColor_; + } + + public void removePropertyChangeListener(final String _key, final PropertyChangeListener _l) {} + + public boolean setProperty(final String _key, final Object _newProp) { + currentColor_ = (Color) _newProp; + fireDataChanged(false, true); + return true; + } + + } + + public BSelecteurSurfaceModel() { + this(DEFAULT_PROPERTY, null); + } + + public BSelecteurSurfaceModel(final String _prop) { + this(_prop, null); + } + + public BSelecteurSurfaceModel(final String _property, final TraceSurfaceModel _tsm) { + super(_property); + cbType_ = new BuComboBox(); + + typeModel_ = new TraceSurfaceChooser(true); + cbType_.setModel(typeModel_); + cbType_.setRenderer(typeModel_.getCellRenderer()); + cbType_.setPreferredSize(new Dimension(60, 15)); + cbType_.addItemListener(this); + btColor_ = new BSelecteurColorChooserBt(); + final BSelecteurColorTarget selecteurColorTarget = new BSelecteurColorTarget(); + if (_tsm != null) { + selecteurColorTarget.currentColor_ = _tsm.getBgColor(); + typeModel_.setSelectedType(_tsm.getType()); + } + btColor_.setSelecteurTarget(selecteurColorTarget); + title_ = EbliLib.getS("Surface"); + } + + protected void fireDataChanged(final boolean _type, final boolean _color) { + if (isUpdating_) { + return; + } + if (FuLog.isTrace()) { + FuLog.trace("ETR: " + getClass().getName() + " data change type=" + _type + + "; color=" + _color); + } + final TraceSurfaceModel d = getNewData(); + if (_type) { + d.setBgColorIgnored(); + } else if (_color) { + d.setTypeIgnored(); + } + if (!d.equals(old_)) { + if (FuLog.isTrace()) { + FuLog.trace("new trace " + d); + } + firePropertyChange(getProperty(), d); + } + } + + public void updateFromTarget() { + final TraceSurfaceModel tsm = (TraceSurfaceModel) super.getTargetValue(); + isUpdating_ = true; + old_ = tsm; + final int type = tsm == null ? 0 : tsm.getType(); + if (type >= 0) { + typeModel_.setSelectedType(type); + } else { + cbType_.setSelectedItem(null); + } + final BSelecteurColorTarget colorTarget = (BSelecteurColorTarget) btColor_.getTarget(); + colorTarget.currentColor_ = (tsm == null ? Color.BLACK : tsm.getBgColor()); + btColor_.updateFromTarget(); + + } + + public JPanel buildPanel() { + final JPanel r = new BuPanel(); + buildPanel(r, true); + return r; + } + + public void buildPanel(final JPanel _pn, final boolean _layout) { + if (_layout) { + _pn.setLayout(new BuGridLayout(2, 3, 3, true, false)); + } + _pn.add(cbType_); + _pn.add(btColor_.getPn()); + + } + + public JComponent getComponent() { + return buildPanel(); + } + + public JComponent[] getComponents() { + return new JComponent[] { cbType_, btColor_.getPn() }; + } + + public TraceSurfaceModel getNewData() { + return new TraceSurfaceModel(typeModel_.getSelectedType(), + ((BSelecteurColorTarget) btColor_.getTarget()).currentColor_,Color.WHITE); + } + + public final TraceSurfaceChooser getTypeModel() { + return typeModel_; + } + + public void itemStateChanged(final ItemEvent _e) { + if (_e.getStateChange() == ItemEvent.DESELECTED) { + return; + } + final boolean enable = typeModel_.getSelectedType() != TraceSurface.INVISIBLE; + btColor_.setEnabled(enable); + fireDataChanged(true, false); + } + + public void stateChanged(final ChangeEvent _e) { + fireDataChanged(false, false); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/controle/BSelecteurSurfaceModel.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurface.java 2009-03-10 16:34:25 UTC (rev 4520) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurface.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -100,6 +100,10 @@ model_ = new TraceSurfaceModel(_d.model_); } + public void setModel(final TraceSurfaceModel _model) { + model_ = _model; + } + /** * Renvoie le texturePaint correspondant. * Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceChooser.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceChooser.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceChooser.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -0,0 +1,109 @@ +/* + * @creation 10 Mars 2009 + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.trace; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.AbstractListModel; +import javax.swing.ComboBoxModel; +import javax.swing.ListCellRenderer; + +/** + * Un chooser de types de trac\xE9s de surfaces. + * @author Bertrand Marchand + * @version $Id$ + */ +public class TraceSurfaceChooser extends AbstractListModel implements ComboBoxModel { + + private TraceSurfaceModel[] surfaces_; + + private Object selected_; + + public TraceSurfaceChooser() { + this(true); + } + + public TraceSurfaceChooser(final boolean _addInvisible) { + List<TraceSurfaceModel> lsurf=new ArrayList<TraceSurfaceModel>(); + + if (_addInvisible) + lsurf.add(new TraceSurfaceModel(TraceSurface.INVISIBLE, Color.BLACK, Color.WHITE)); + + lsurf.add(new TraceSurfaceModel(TraceSurface.UNIFORME, Color.BLACK, Color.WHITE)); + lsurf.add(new TraceSurfaceModel(TraceSurface.HACHURE_DROITE, Color.BLACK, Color.WHITE)); + lsurf.add(new TraceSurfaceModel(TraceSurface.HACHURE_GAUCHE, Color.BLACK, Color.WHITE)); + lsurf.add(new TraceSurfaceModel(TraceSurface.HACHURE_HORIZONTAL, Color.BLACK, Color.WHITE)); + lsurf.add(new TraceSurfaceModel(TraceSurface.HACHURE_VERTICAL, Color.BLACK, Color.WHITE)); + lsurf.add(new TraceSurfaceModel(TraceSurface.POINTILLE, Color.BLACK, Color.WHITE)); + + surfaces_=lsurf.toArray(new TraceSurfaceModel[0]); + } + + public Object getSelectedItem() { + return selected_; + } + + public void setCouleur(final Color _c) { + if (_c == null) { + return; + } + if (!_c.equals(surfaces_[0].getBgColor())) { + for (int i = surfaces_.length - 1; i >= 0; i--) { + surfaces_[i].setBgColor(_c); + } + } + fireContentsChanged(this, 0, getSize()); + } + + /** + * @return le type de surface a selectionner + */ + public int getSelectedType() { + if (selected_ == null) { + return TraceSurface.INVISIBLE; + } + return ((TraceSurfaceModel) selected_).getType(); + } + + /** + * @param _i : le type de surface a selectionner + */ + public void setSelectedType(final int _i) { + for (int i = surfaces_.length - 1; i >= 0; i--) { + if (surfaces_[i].getType() == _i) { + setSelectedItem(surfaces_[i]); + return; + } + } + setSelectedItem(null); + + } + + public void setSelectedItem(final Object _anItem) { + if (_anItem != selected_) { + selected_ = _anItem; + fireContentsChanged(this, -1, -1); + } + } + + public Object getElementAt(final int _index) { + return surfaces_[_index]; + } + + public int getSize() { + return surfaces_.length; + } + + /** + * @return un renderer pour ce model + */ + public ListCellRenderer getCellRenderer() { + return new TraceSurfaceRenderer(); + } +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceChooser.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceRenderer.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceRenderer.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceRenderer.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -0,0 +1,142 @@ +/* + * @creation 10 Mars 2009 + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.trace; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; + +import javax.swing.JComponent; +import javax.swing.JList; +import javax.swing.JTable; +import javax.swing.ListCellRenderer; +import javax.swing.UIManager; +import javax.swing.table.TableCellRenderer; + +import com.memoire.bu.BuLabel; + +import org.fudaa.ctulu.CtuluLibString; +import org.fudaa.ctulu.gui.CtuluCellRenderer; + +/** + * Un renderer pour les trac\xE9s de surfaces. + * + * @author Bertrand Marchand + * @version $Id$ + */ +public final class TraceSurfaceRenderer extends JComponent implements TableCellRenderer, ListCellRenderer { + + private final TraceSurface ts_; + BuLabel lbNo_; + + /** + * Initialisation variables internes. + */ + public TraceSurfaceRenderer() { + ts_ = new TraceSurface(); + } + + protected void paintComponent(final Graphics _g) { + if (ts_.getTypeSurface()==TraceSurface.INVISIBLE) { + return; + } + + final Dimension d = getSize(); + int[] x=new int[4]; + int[] y=new int[4]; + x[0]=2; + y[0]=2; + x[1]=d.width-4; + y[1]=2; + x[2]=d.width-4; + y[2]=d.height-4; + x[3]=2; + y[3]=d.height-4; + + final Color old = _g.getColor(); + _g.setColor(getBackground()); + ((Graphics2D) _g).fill(_g.getClip()); + Graphics2D g2d=(Graphics2D)_g; + ts_.remplitPolygone(g2d, x, y); + _g.setColor(old); + } + + private void buildLb() { + if (lbNo_ == null) { + lbNo_ = new BuLabel(); + lbNo_.setOpaque(true); + } + } + + public Component getListCellRendererComponent(final JList _list, final Object _value, final int _index, + final boolean _isSelected, final boolean _cellHasFocus) { + JComponent r = this; + if (_value == null) { + buildLb(); + lbNo_.setText(CtuluLibString.ESPACE); + r = lbNo_; + } else { + ts_.setModel((TraceSurfaceModel) _value); + if (ts_.getTypeSurface() == TraceSurface.INVISIBLE) { + buildLb(); + lbNo_.setText(CtuluLibString.ESPACE); + r = lbNo_; + } + } + if (_isSelected) { + r.setForeground(_list.getSelectionForeground()); + r.setBackground(_list.getSelectionBackground()); + } else { + r.setBackground(_list.getBackground()); + r.setForeground(_list.getForeground()); + } + r.setBorder((_cellHasFocus) ? UIManager.getBorder("List.focusCellHighlightBorder") + : CtuluCellRenderer.BORDER_NO_FOCUS); + return r; + } + + public Dimension getPreferredSize() { + final Dimension d = super.getPreferredSize(); + final int s = 15; + d.width = 15; + if (d.height < s) { + d.height = s; + } + return d; + } + + public Component getTableCellRendererComponent(final JTable _table, final Object _value, final boolean _isSelected, + final boolean _hasFocus, final int _row, final int _column) { + JComponent r = this; + if (_value == null) { + if (lbNo_ == null) { + lbNo_ = new BuLabel(CtuluLibString.ESPACE); + lbNo_.setOpaque(true); + } + r = lbNo_; + } + if (_isSelected) { + r.setForeground(_table.getSelectionForeground()); + r.setBackground(_table.getSelectionBackground()); + } + if (_hasFocus) { + r.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); + r.setForeground(UIManager.getColor("Table.focusCellForeground")); + r.setBackground(UIManager.getColor("Table.focusCellBackground")); + } else { + r.setBorder(CtuluCellRenderer.BORDER_NO_FOCUS); + r.setForeground(_table.getForeground()); + r.setBackground(_table.getBackground()); + } + if (_value != null) { + ts_.setModel((TraceSurfaceModel) _value); + } + return r; + } +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/trace/TraceSurfaceRenderer.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java 2009-03-10 16:34:25 UTC (rev 4520) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -178,7 +178,7 @@ cqTmp_.setLineModel(0, ligne); cqTmp_.setLineModel(1, ligne); final TraceSurfaceModel surfMdl=new TraceSurfaceModel(TraceSurface.UNIFORME,new Color(255,50,0,40),null); - cqTmp_.setSurfaceModel(surfMdl); + cqTmp_.setSurfaceModel(0,surfMdl); pn_.getVueCalque().getCalque().enPremier(cqTmp_); pn_.getCqInfos().enPremier(); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java 2009-03-10 16:34:25 UTC (rev 4520) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java 2009-03-10 16:37:38 UTC (rev 4521) @@ -140,7 +140,7 @@ cqTmp_.setLineModel(0, ligne); cqTmp_.setLineModel(1, ligne); final TraceSurfaceModel surfMdl=new TraceSurfaceModel(TraceSurface.UNIFORME,new Color(255,50,0,40),null); - cqTmp_.setSurfaceModel(surfMdl); + cqTmp_.setSurfaceModel(0,surfMdl); pn_.getVueCalque().getCalque().enPremier(cqTmp_); pn_.getCqInfos().enPremier(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-10 17:43:57
|
Revision: 4524 http://fudaa.svn.sourceforge.net/fudaa/?rev=4524&view=rev Author: bmarchan Date: 2009-03-10 17:43:46 +0000 (Tue, 10 Mar 2009) Log Message: ----------- On peut gerer des calques sans trac?\195?\169 de surfaces. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCasier.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java 2009-03-10 16:39:34 UTC (rev 4523) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonneesAbstract.java 2009-03-10 17:43:46 UTC (rev 4524) @@ -632,8 +632,18 @@ return 1; } - public boolean setSurfaceModel(final int _idx, final TraceSurfaceModel _model) { - final TraceSurfaceModel surf = getSurfaceModel(_idx); + public final boolean setSurfaceModel(final int _idx, final TraceSurfaceModel _model) { + TraceSurfaceModel surf = getSurfaceModel(_idx); + if (surf==null && _model==null) + return false; + + if (surf==null || _model==null) { + internalSetSurfaceModel(_idx, _model); + surf=getSurfaceModel(_idx); + firePropertyChange(BSelecteurSurfaceModel.getProperty(_idx), null, surf); + return true; + } + if (_model != null && surf != null && surf.updateData(_model)) { firePropertyChange(BSelecteurSurfaceModel.getProperty(_idx), null, surf); repaint(); @@ -642,6 +652,15 @@ return false; } + /** + * A surcharger pour mettre a jour les modeles de trac\xE9 de surface. + * @param _idx L'indice de modele. + * @param _model Le modele. + */ + protected void internalSetSurfaceModel(final int _idx, final TraceSurfaceModel _model) { + surfModel_=_model; + } + public TraceSurfaceModel getSurfaceModel(final int _idx) { return surfModel_; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCasier.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCasier.java 2009-03-10 16:39:34 UTC (rev 4523) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCasier.java 2009-03-10 17:43:46 UTC (rev 4524) @@ -40,7 +40,7 @@ super(_model,_editor); setIconModel(0, new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, new Color(115,88,34))); setLineModel(0, new TraceLigneModel(TraceLigne.LISSE, 2f, new Color(181,139,54))); - surfModel_=new TraceSurfaceModel(TraceSurface.UNIFORME,new Color(255,230,140),null); + setSurfaceModel(0,new TraceSurfaceModel(TraceSurface.UNIFORME,new Color(255,230,140),Color.WHITE)); setName(getExtName()); setTitle(MdlResource.getS("Contours casiers")); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-16 09:43:05
|
Revision: 4547 http://fudaa.svn.sourceforge.net/fudaa/?rev=4547&view=rev Author: bmarchan Date: 2009-03-16 09:42:56 +0000 (Mon, 16 Mar 2009) Log Message: ----------- Export casiers Mascaret Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/fileformat/FileFormatVersionInterface.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dCasier.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasiersExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExporter.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/fileformat/FileFormatVersionInterface.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/fileformat/FileFormatVersionInterface.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/fileformat/FileFormatVersionInterface.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -14,6 +14,8 @@ /** + * Une interface d\xE9finissant un format de fichier. Elle permet d'acc\xE9der a la classe d'\xE9criture/lecture de ce format + * de fichier. * @author Fred Deniger * @version $Id: FileFormatVersionInterface.java,v 1.3 2006-02-09 08:59:30 deniger Exp $ */ Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -60,6 +60,8 @@ public final static String ATT_NATURE_RV="RV"; /** Nature limite de stockage */ public final static String ATT_NATURE_LS="LS"; + /** Nature casier */ + public final static String ATT_NATURE_CA="CA"; /** * Un attribut nom, global. Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -222,7 +222,31 @@ } return false; } + + /** + * Teste qu'une coordonn\xE9e est a l'interieur d'un polygone. + * @param _c La coordonn\xE9e + * @param _poly Le polygone. + * @param _ptInRing Le tester correspondant au polygone. A utiliser lorsque la m\xE9thode est appel\xE9e pour un grand nombre de + * points pour optimiser la vitesse de recherche. Peut \xEAtre null. + * @param _tolerance La tol\xE9rance pour la recherche. Peut \xEAtre = 0. + * @return True : La coordonn\xE9e _c est a l'interieur du polygone. + */ + public static boolean isIn(final Coordinate _c, final GISPolygone _poly, PointInRing _ptInRing, double _tolerance) { + Envelope env=_poly.getEnvelopeInternal(); + PointInRing pir=_ptInRing; + if (pir==null) + pir=new SIRtreePointInRing(_poly); + + // La boite englobante && le pir contiennent le point... + if (env.contains(_c) && pir.isInside(_c)) return true; + // ... ou le point est a une distance inferieure a tol\xE9rance du polygone. + if (_tolerance>0 && getDistanceFromFrontier(_poly.getCoordinateSequence(), _c)<=_tolerance) + return true; + return false; + } + public static int isInIdx(final Coordinate _c, final Envelope[] _env, final PointInRing[] _ptInRing) { if (_env == null || _ptInRing == null || _c == null) { return -1; @@ -335,6 +359,13 @@ return r; } + public static PointInRing createPolygoneTester(final LinearRing _a) { + if (_a == null) { + return null; + } + return new SIRtreePointInRing(_a); + } + /** * @param _seq la sequence de coordonn\xE9es * @param _coord les coordonn\xE9es du point a tester Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierFileFormat.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierFileFormat.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -0,0 +1,45 @@ +/* + * @creation 11 Mars 2009 + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.dodico.mascaret.io; + +import org.fudaa.ctulu.fileformat.FileFormatUnique; +import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; +import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; +import org.fudaa.dodico.commun.DodicoLib; +import org.fudaa.dodico.h2d.resource.H2dResource; + +/** + * Un file format pour les fichier Mascaret Casiers + * @author Bertrand Marchand + * @version $Id$ + */ +public class MascaretCasierFileFormat extends FileFormatUnique { + + public MascaretCasierFileFormat() { + super(1); + nom_ = DodicoLib.getS("Mascaret casiers"); + description_ = H2dResource.getS("Fichier contenant des casiers g\xE9or\xE9f\xE9renc\xE9s"); + extensions_=new String[]{"casieref"}; + } + static final MascaretCasierFileFormat INSTANCE = new MascaretCasierFileFormat(); + + /** + * @return singleton + */ + public static MascaretCasierFileFormat getInstance() { + return INSTANCE; + } + + public FileReadOperationAbstract createReader() { + return null; + } + + public FileWriteOperationAbstract createWriter() { + return new MascaretCasierWriter(); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierFileFormat.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierWriter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierWriter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierWriter.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -0,0 +1,81 @@ +/* + * @creation 15 f\xE9vr. 07 + * @modification $Date: 2007-05-04 13:47:30 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.dodico.mascaret.io; + +import java.io.PrintWriter; + +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.dodico.commun.DodicoLib; +import org.fudaa.dodico.fortran.FileOpWriterCharSimpleAbstract; + +import com.vividsolutions.jts.geom.CoordinateSequence; + +/** + * Une classe pour ecrire des casiers au format Mascaret. + * + * @author Bertrand Marchand + * @version $Id$ + */ +public class MascaretCasierWriter extends FileOpWriterCharSimpleAbstract { + + /** + * Ecrit les casiers. Les casiers sont consid\xE9r\xE9s conformes, c'est a dire a plus de 4 points et un point semis. + * param _o Un tableau GISDataModel[2]. + * [0] : le modele des contours de casiers + * [1] : le modele des multipoints internes aux casiers, dans le m\xEAme ordre que les casiers. + */ + protected void internalWrite(final Object _o) { + if (!(_o instanceof GISDataModel[]) || ((GISDataModel[])_o).length!=2) { + donneesInvalides(_o); + return; + } + + GISDataModel casiers=((GISDataModel[])_o)[0]; + GISDataModel semis=((GISDataModel[])_o)[1]; + if (casiers.getNumGeometries()!=semis.getNumGeometries()) { + analyze_.addError(DodicoLib.getS("Chaque casier doit contenir au moins un semis"), -1); + return; + } + + final int attName=casiers.getIndiceOf(GISAttributeConstants.TITRE); + + final PrintWriter writer = new PrintWriter(out_); + + try { + for (int i = 0; i < casiers.getNumGeometries(); i++) { + CoordinateSequence seqCas=((GISCoordinateSequenceContainerInterface) casiers.getGeometry(i)).getCoordinateSequence(); + CoordinateSequence seqSemis=((GISCoordinateSequenceContainerInterface) semis.getGeometry(i)).getCoordinateSequence(); + + String name; + if (attName==-1||(name=(String)casiers.getValue(attName, i))==null) name="C"+(i+1); + + writer.println("Casier "+name); + // Les points du contour. + for (int k = 0; k < seqCas.size(); k++) { + double x=seqCas.getOrdinate(k,0); + double y=seqCas.getOrdinate(k,1); + double z=seqCas.getOrdinate(k,2); + writer.println(x+" "+y+" "+z+" F"); + } + // Les points internes + for (int k = 0; k < seqSemis.size(); k++) { + double x=seqSemis.getOrdinate(k,0); + double y=seqSemis.getOrdinate(k,1); + double z=seqSemis.getOrdinate(k,2); + writer.println(x+" "+y+" "+z+" I"); + } + } + + } catch (final Exception _evt) { + analyze_.manageException(_evt); + } + + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretCasierWriter.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -237,7 +237,6 @@ public boolean isOnlyOnIndexSelected() { boolean b=false; for (ZCalqueAffichageDonneesInterface cq :getTargetLayers()) { -// for (CtuluListSelectionInterface list : lists_) { if (cq.getLayerSelection().isOnlyOnIndexSelected()) { if (!b) b=true; else return false; @@ -255,11 +254,11 @@ public boolean isSelected(int _idx) { int idecal=0; ZCalqueAffichageDonneesInterface[] cqs=getTargetLayers(); - for (int i=0; i<cqs.length-1; i++) { - if (_idx <= cqs[i].getLayerSelection().getMaxIndex()+idecal) { - return cqs[i].getLayerSelection().isSelected(_idx-idecal); + for (ZCalqueAffichageDonneesInterface cq :getTargetLayers()) { + if (_idx <= cq.getLayerSelection().getMaxIndex()+idecal) { + return cq.getLayerSelection().isSelected(_idx-idecal); } - idecal+=cqs[i].modeleDonnees().getNombre(); + idecal+=cq.modeleDonnees().getNombre(); } return false; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -995,10 +995,10 @@ return true; } else if (_analyze.containsErrors()) error(_analyze.getDesc(), CtuluAnalyze.getResume(_analyze.getErrorCanal(), 5), false); + else if (_analyze.containsWarnings()) + warn(FudaaLib.getS("Attention"), CtuluAnalyze.getResume(_analyze.getWarnCanal(), 20), false); else if (_analyze.containsInfos()) message(FudaaLib.getS("Informations"), CtuluAnalyze.getResume(_analyze.getInfoCanal(), 20), false); - else if (_analyze.containsWarnings()) - warn(FudaaLib.getS("Attention"), CtuluAnalyze.getResume(_analyze.getWarnCanal(), 20), false); return false; } Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasiersExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasiersExportPanel.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasiersExportPanel.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -0,0 +1,298 @@ +/* + * @creation 8 sept. 06 + * @modification $Date: 2009-03-10 17:37:38 +0100 (mar., 10 mars 2009) $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.fudaa.modeleur; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.io.File; + +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTree; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.TreePath; + +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.CtuluLibFile; +import org.fudaa.ctulu.CtuluListSelection; +import org.fudaa.ctulu.CtuluUI; +import org.fudaa.ctulu.fileformat.FileFormatVersionInterface; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gui.CtuluDialogPanel; +import org.fudaa.ctulu.gui.CtuluFileChooserPanel; +import org.fudaa.dodico.mascaret.io.MascaretCasierFileFormat; +import org.fudaa.ebli.calque.BArbreCalqueModel; +import org.fudaa.ebli.calque.CalqueGISTreeModel; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesAbstract; +import org.fudaa.ebli.calque.ZCalqueGeometry; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.edition.ZModeleGeometryDefault; +import org.fudaa.ebli.commun.EbliListeSelectionMulti; +import org.fudaa.ebli.geometrie.GrBoite; +import org.fudaa.ebli.trace.TraceIcon; +import org.fudaa.ebli.trace.TraceIconModel; +import org.fudaa.ebli.trace.TraceLigne; +import org.fudaa.ebli.trace.TraceLigneModel; +import org.fudaa.ebli.trace.TraceSurface; +import org.fudaa.ebli.trace.TraceSurfaceModel; +import org.fudaa.fudaa.modeleur.resource.MdlResource; +import org.fudaa.fudaa.sig.FSigLib; + +import com.memoire.bu.BuFileFilter; +import com.memoire.bu.BuLabel; +import com.memoire.bu.BuVerticalLayout; +import com.sun.java_cup.internal.internal_error; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Polygon; + +/** + * Un panneau de saisie des g\xE9om\xE9tries altim\xE9triques pour l'export de casiers. + * @author Bertrand Marchand + * @version $Id$ + */ +public class MdlCasiersExportPanel extends CtuluDialogPanel { + + private ZEbliCalquesPanel pn_; + private GrBoite initZoom_; + private JTree trLayers_; + private ZCalqueGeometry cqTmp_; + private GISZoneCollection support_; + private CtuluListSelection sel_=new CtuluListSelection(); + private CtuluFileChooserPanel fileChooser_; + private CtuluUI ui_; + private FileFormatVersionInterface[] ffs_; + + public MdlCasiersExportPanel(FileFormatVersionInterface[] _ffs, CtuluUI _ui, ZEbliCalquesPanel _pn) { + pn_=_pn; + ffs_=_ffs; + ui_=_ui; + setLayout(new BuVerticalLayout(5,true,true)); + + BuLabel lbTitle=new BuLabel(FSigLib.getS("S\xE9lectionnez les semis \xE0 int\xE9grer aux casiers")); + add(lbTitle); + + CalqueGISTreeModel md=new CalqueGISTreeModel(null,_pn.getDonneesCalque()); + md.setMask(GISLib.MASK_MULTIPOINT); + trLayers_=md.createView(true,true); + + trLayers_.addTreeSelectionListener(new TreeSelectionListener() { + public void valueChanged(TreeSelectionEvent e) { + treeSelectionChanged(getSelectedGeomInTree(),true); + } + }); + JScrollPane sp=new JScrollPane(trLayers_); + sp.setPreferredSize(new Dimension(300,200)); + add(sp); + + BuFileFilter[] filters=new BuFileFilter[_ffs.length]; + for (int i=0; i<_ffs.length; i++) { + filters[i]=_ffs[i].getFileFormat().createFileFilter(); + } + + final String title=FSigLib.getS("Fichier d'exportation"); + fileChooser_=new CtuluFileChooserPanel(title); + fileChooser_.setAllFileFilter(false); + fileChooser_.setWriteMode(true); + fileChooser_.setFilter(filters); + + BuLabel lbFile=new BuLabel(title); + JPanel pnFile=new JPanel(); + pnFile.setLayout(new BorderLayout(3, 3)); + pnFile.add(lbFile, BorderLayout.WEST); + pnFile.add(fileChooser_, BorderLayout.CENTER); + add(pnFile); + } + + /** + * Retourne les indexs s\xE9lectionn\xE9es de la scene. + * @return Les indexs sous la forme d'une liste. + */ + private CtuluListSelection getSelectedGeomInTree() { + sel_.clear(); + + if (trLayers_.isSelectionEmpty()) { + return sel_; + } + + ZScene scn=pn_.getScene(); + + TreePath[] selpaths=trLayers_.getSelectionPaths(); + for (int i=0; i<selpaths.length; i++) { + final CalqueGISTreeModel.LayerNode node=(CalqueGISTreeModel.LayerNode)selpaths[i].getLastPathComponent(); + final ZCalqueAffichageDonneesAbstract cq = (ZCalqueAffichageDonneesAbstract) node.getUserObject(); + final int idx=node.getIdxGeom(); + + sel_.add(scn.layerId2SceneId(cq,idx)); + } + + return sel_; + } + + /** + * R\xE9affichage de la fenetre 2D en cas de selection d'un objet. + * @param _geoms Les g\xE9om\xE9tries s\xE9lectionn\xE9es. + * @param _zoom True si le zoom doit se faire sur les g\xE9ometries s\xE9lectionn\xE9es. + */ + private void treeSelectionChanged(final CtuluListSelection _sel, final boolean _zoom) { + if (pn_==null) { + return; + } + if (_sel == null || _sel.isEmpty()) { + if (cqTmp_ != null) { + cqTmp_.setVisible(false); + } + return; + } + + ZModeleGeometryDefault mdl=new ZModeleGeometryDefault(); + support_=mdl.getGeomData(); + ZScene scn=pn_.getScene(); + + for (int i=_sel.getMinIndex(); i<=_sel.getMaxIndex(); i++) { + if (!_sel.isSelected(i)) continue; + support_.addGeometry((Geometry)scn.getObject(i), null, null); + } + + // Ajout de l'enveloppe externe pour visualisation. + Geometry g=support_.convexHull(); + if (g instanceof Polygon) + support_.addGeometry(((Polygon)g).getExteriorRing(), null, null); + else + support_.addGeometry(g, null, null); + + if (cqTmp_ == null) { + initZoom_ = pn_.getVueCalque().getViewBoite(); + cqTmp_ = new ZCalqueGeometry(mdl); + cqTmp_.setDestructible(true); + final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS_DOUBLE, 4, Color.RED); + cqTmp_.setIconModel(0, model); + cqTmp_.setIconModel(1, model); + final TraceLigneModel ligne = new TraceLigneModel(TraceLigne.INVISIBLE, 2, Color.RED); + cqTmp_.setLineModel(0, ligne); + cqTmp_.setLineModel(1, ligne); + final TraceSurfaceModel surfMdl=new TraceSurfaceModel(TraceSurface.UNIFORME,new Color(255,50,0,40),null); + cqTmp_.setSurfaceModel(0,surfMdl); + pn_.getVueCalque().getCalque().enPremier(cqTmp_); + pn_.getCqInfos().enPremier(); + } + cqTmp_.modele(mdl); + cqTmp_.setVisible(true); + + if (_zoom) { + BArbreCalqueModel.actionCenter(cqTmp_, pn_); + } + } + + @Override + public boolean valide() { + if (trLayers_.getSelectionCount()==0) { + setErrorText(MdlResource.getS("Vous devez s\xE9lectionner au moins 1 semis")); + return false; + } + if (isFileOK()) + return true; + return false; + } + private boolean isFileOK() { + final File f=fileChooser_.getFile(); + if (f==null) { + setErrorText(MdlResource.getS("Donnez un nom au fichier d'exportation")); + return false; + } + + // Verification de l'extension + if (getFileFormat()==null) { + setErrorText(MdlResource.getS("Le fichier choisi a une extension inconnue")); + return false; + } + + // Verification que le fichier n'existe pas. + if(f.exists()) { + if (ui_.question(CtuluLib.getS("Attention"), CtuluLib.getS("Le fichier {0} existe d\xE9j\xE0. Voulez-vous l'\xE9craser?", + CtuluLibFile.getSansExtension(f.getName())))) + f.delete(); + else + return false; + } + + if (CtuluLibFile.getExtension(CtuluLibFile.getSansExtension(f.getName()))!=null) { + setErrorText(CtuluLib.getS("Ne mettez pas plusieurs '.' dans le nom.")); + return false; + } + setErrorText(null); + return true; + } + + /** + * Retourne la selection. Elle peut \xEAtre vide. + */ + public CtuluListSelection getSelection() { + return sel_; + } + + /** + * Retourne le modele des g\xE9om\xE9tries supports (les g\xE9om\xE9tries s\xE9l\xE9ectionn\xE9es dans l'arbre). + * @return Le mod\xE8le. + */ +// public GISDataModel getSupportCollection() { +// support_.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.BATHY}, null); +// support_.setAttributeIsZ(GISAttributeConstants.BATHY); +// support_.postImport(0); +// return support_; +// } + + /** + * Fermeture du dialogue, et suppression du calque qui visualise les g\xE9om\xE9tries s\xE9lectionn\xE9es. + */ + private void close() { + if (cqTmp_!=null) { + cqTmp_.detruire(); + cqTmp_=null; + // Suppression de l'enveloppe externe. + support_.removeGeometries(new int[]{support_.getNbGeometries()-1}, null); + pn_.getVueCalque().getCalque().repaint(); + } + pn_.getVueCalque().changeRepere(this, initZoom_); + } + + @Override + public void cancel() { + close(); + super.cancel(); + } + + @Override + public boolean ok() { + close(); + return super.ok(); + } + + public File getFile() { + return fileChooser_.getFile(); + } + + public FileFormatVersionInterface getFileFormat() { + File file=getFile(); + FileFormatVersionInterface ff=null; + for (int i=0; i<ffs_.length; i++) { + if (ffs_[i].getFileFormat().createFileFilter().accept(file)) { + ff=ffs_[i]; + break; + } + } + return ff; + } +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasiersExportPanel.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -22,6 +22,7 @@ import org.fudaa.fudaa.commun.impl.FudaaCommonImplementation; import org.fudaa.fudaa.modeleur.action.CalqueDeleteCalqueAction; import org.fudaa.fudaa.modeleur.action.CalqueNewCalqueAction; +import org.fudaa.fudaa.modeleur.action.MdlCasierExportAction; import org.fudaa.fudaa.modeleur.action.SceneShowLabelAction; import org.fudaa.fudaa.modeleur.layer.MdlLayer1dAxe; import org.fudaa.fudaa.modeleur.layer.MdlLayer1dBank; @@ -96,11 +97,13 @@ protected EbliActionInterface[] getActionsInterface(){ EbliActionInterface[] actions=super.getActionsInterface(); - EbliActionInterface[] allActions=new EbliActionInterface[actions.length+2]; + EbliActionInterface[] allActions=new EbliActionInterface[actions.length+4]; + allActions[0]=null; + allActions[1]=new MdlCasierExportAction((MdlEditionManager)gisEditor_); + allActions[2]=new SceneShowOrientationAction(gisEditor_.getPanel().getArbreCalqueModel()); + allActions[3]=new SceneShowLabelAction(gisEditor_.getPanel().getArbreCalqueModel()); for(int i=0;i<actions.length;i++) - allActions[i]=actions[i]; - allActions[allActions.length-2]=new SceneShowOrientationAction(gisEditor_.getPanel().getArbreCalqueModel()); - allActions[allActions.length-1]=new SceneShowLabelAction(gisEditor_.getPanel().getArbreCalqueModel()); + allActions[i+4]=actions[i]; return allActions; } Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -0,0 +1,105 @@ +/* + * @creation 26 nov. 2008 + * @modification $Date: 2009-03-06 15:58:09 +0100 (ven., 06 mars 2009) $ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.action; + +import java.awt.event.ActionEvent; +import java.io.File; +import java.util.HashMap; + +import org.fudaa.ctulu.CtuluIOOperationSynthese; +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.fileformat.FileFormatVersionInterface; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZCalqueGeometry; +import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZSelectionEvent; +import org.fudaa.ebli.calque.ZSelectionListener; +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.fudaa.commun.FudaaLib; +import org.fudaa.fudaa.modeleur.MdlCasiersExportPanel; +import org.fudaa.fudaa.modeleur.MdlEditionManager; +import org.fudaa.fudaa.ressource.FudaaResource; + + +/** + * Une action pour exporter des casiers. + * @author Bertrand Marchand + */ +public class MdlCasierExportAction extends EbliActionSimple implements ZSelectionListener { + MdlEditionManager editor_; + + public MdlCasierExportAction(MdlEditionManager _editor) { + super(FudaaResource.FUDAA.getString("Exporter les casiers"), null, "EXPORT_CASIER"); + setDefaultToolTip(FudaaResource.FUDAA.getString("Exporte les casiers s\xE9lectionn\xE9s")); + setEnabled(false); + editor_=_editor; + editor_.getSupport().addSelectionListener(this); + } + + public void actionPerformed(final ActionEvent _e) { + MdlCasierExporter exporter; + // Les formats de fichier casiers exportables. + HashMap<FileFormatVersionInterface, MdlCasierExporter> ff2Exporter=new HashMap<FileFormatVersionInterface, MdlCasierExporter>(); + ff2Exporter.put((exporter=new MdlCasierExporter.Mascaret()).getFileFormat(),exporter); + + FileFormatVersionInterface[] ffs=ff2Exporter.keySet().toArray(new FileFormatVersionInterface[0]); + + MdlCasiersExportPanel pn=new MdlCasiersExportPanel(ffs,editor_.getUi(),editor_.getPanel()); + if (pn.afficheModaleOk(editor_.getFrame(), FudaaLib.getS("Export de casiers"))) { + ZScene scn=editor_.getSupport(); + File f=pn.getFile(); + exporter=ff2Exporter.get(pn.getFileFormat()); + + CtuluIOOperationSynthese synt=exporter.export(f,scn,scn.getLayerSelection(),pn.getSelection()); + editor_.getUi().manageErrorOperationAndIsFatal(synt); + } + } + + public void updateForSelectionChanged() { + ZScene scn=editor_.getSupport(); + + // Si la selection est en mode global et que seuls des casiers sont selectionn\xE9s. + setEnabled( + !scn.isAtomicMode() && + !scn.isSelectionEmpty() && + containsOnlyCasiers()); + } + + public String getEnableCondition() { + return CtuluLib.getS("S\xE9lectionner des casiers."); + } + + public boolean containsOnlyCasiers() { + ZScene scn=editor_.getSupport(); + + for (int i=scn.getLayerSelection().getMinIndex(); i<=scn.getLayerSelection().getMinIndex(); i++) { + if (!scn.getLayerSelection().isSelected(i)) continue; + + ZCalqueAffichageDonneesInterface calque=scn.getLayerForId(i); + int idGeom=scn.sceneId2LayerId(i); + + if(!(calque instanceof ZCalqueGeometry)) return false; + + GISZoneCollection zone=((ZModeleGeometry)calque.modeleDonnees()).getGeomData(); + int iattNat=zone.getIndiceOf(GISAttributeConstants.NATURE); + if (iattNat==-1||!zone.getValue(iattNat, idGeom).equals(GISAttributeConstants.ATT_NATURE_CA)) + return false; + } + return true; + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent) + */ + public void selectionChanged(ZSelectionEvent _evt) { + updateForSelectionChanged(); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExporter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExporter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExporter.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -0,0 +1,201 @@ +/* + * @creation 11 mars 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.action; + +import gnu.trove.TIntArrayList; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import org.fudaa.ctulu.CtuluAnalyze; +import org.fudaa.ctulu.CtuluIOOperationSynthese; +import org.fudaa.ctulu.CtuluListSelection; +import org.fudaa.ctulu.CtuluListSelectionInterface; +import org.fudaa.ctulu.fileformat.FileFormatVersionInterface; +import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISDataModelFilterAdapter; +import org.fudaa.ctulu.gis.GISDataModelMultiAdapter; +import org.fudaa.ctulu.gis.GISGeometryFactory; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISMultiPoint; +import org.fudaa.ctulu.gis.GISPolygone; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gis.GISZoneCollectionMultiPoint; +import org.fudaa.dodico.commun.DodicoLib; +import org.fudaa.dodico.mascaret.io.MascaretCasierFileFormat; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZCalqueGeometry; +import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.fudaa.modeleur.resource.MdlResource; + +import com.vividsolutions.jts.algorithm.PointInRing; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; + +/** + * @author Bertrand Marchand + * @version $Id:$ + */ +public abstract class MdlCasierExporter { + + public abstract CtuluIOOperationSynthese export(File _f, ZScene _scn, CtuluListSelectionInterface _selCasiers, CtuluListSelection _selSemis); + + public abstract FileFormatVersionInterface getFileFormat(); + + static class Mascaret extends MdlCasierExporter { + + public CtuluIOOperationSynthese export(File _f, ZScene _scn, CtuluListSelectionInterface _selCasiers, CtuluListSelection _selSemis) { + CtuluListSelection selCasiers=new CtuluListSelection(_selCasiers); + CtuluAnalyze ana=new CtuluAnalyze(); + + int nbCasiers=_selCasiers.getNbSelectedIndex(); + GISZoneCollectionMultiPoint mdSemis=buildSemis(_scn, selCasiers, _selSemis, ana); + if (mdSemis.getNumGeometries()!=0) { + GISDataModel mdCasiers=getCasiersDataModel(_scn, selCasiers); + + FileWriteOperationAbstract writer=getFileFormat().createWriter(); + CtuluAnalyze ana2=writer.write(new GISDataModel[]{mdCasiers,mdSemis}, _f, null).getAnalyze(); + ana.merge(ana2); + } + + if (!ana.containsErrors()&&!ana.containsFatalError()) { + if (nbCasiers>mdSemis.getNumGeometries()) { + ana.addWarn(DodicoLib.getS("{0} casiers sur {1} ont \xE9t\xE9 export\xE9s", ""+mdSemis.getNumGeometries(), ""+nbCasiers), -1); + } + else { + ana.addInfo(DodicoLib.getS("{0} casiers sur {1} ont \xE9t\xE9 export\xE9s", ""+mdSemis.getNumGeometries(), ""+nbCasiers), -1); + } + } + + CtuluIOOperationSynthese synt=new CtuluIOOperationSynthese(); + synt.setAnalyze(ana); + return synt; + } + + public FileFormatVersionInterface getFileFormat() { + return MascaretCasierFileFormat.getInstance(); + } + } + + /** + * Recuperation du data model des casiers. + */ + protected GISDataModel getCasiersDataModel(ZScene _scn, CtuluListSelection _selcasiers) { + // Association entre une zone et les indexs selectionn\xE9s sur celle ci + class ZoneComposite { + GISZoneCollection zone; + TIntArrayList idxs=new TIntArrayList(); + + public ZoneComposite(GISZoneCollection _zone) { + zone=_zone; + } + } + + // R\xE9cup\xE9ration des zones des casiers et indexs selectionn\xE9s. + List<ZoneComposite> comps=new ArrayList<ZoneComposite>(); + for (int i=_selcasiers.getMinIndex(); i<=_selcasiers.getMaxIndex(); i++) { + if (_selcasiers.isSelected(i)) { + GISZoneCollection zone=((ZCalqueGeometry)_scn.getLayerForId(i)).modeleDonnees().getGeomData(); + ZoneComposite comp; + if (comps.size()==0 || comps.get(comps.size()-1).zone!=zone) { + comp=new ZoneComposite(zone); + comps.add(comp); + } + else { + comp=comps.get(comps.size()-1); + } + comp.idxs.add(_scn.sceneId2LayerId(i)); + } + } + + int i=0; + GISDataModel[] models=new GISDataModel[comps.size()]; + for (ZoneComposite comp : comps) { + comp.zone.prepareExport(); + models[i++]=new GISDataModelFilterAdapter(comp.zone,null,comp.idxs.toNativeArray()); + } + return new GISDataModelMultiAdapter(models); + } + + /** + * Construit les semis internes aux casiers. En fait, on recr\xE9e des semis pour chaque contour de casier. + * Les casiers sans semis interne ou non conformes sont supprim\xE9s de la selection. + * + * @param _scn La scene. + * @param _selCasiers La selection des casiers. + * @param _selSemis La selection des semis. + * @return Les semis. + */ + protected GISZoneCollectionMultiPoint buildSemis(ZScene _scn, + CtuluListSelection _selCasiers, CtuluListSelection _selSemis, CtuluAnalyze _ana) { + + GISZoneCollectionMultiPoint zsemis=new GISZoneCollectionMultiPoint(); + zsemis.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.BATHY},null); + zsemis.setAttributeIsZ(GISAttributeConstants.BATHY); + + List<Coordinate> coords=new ArrayList<Coordinate>(); + + for (int i=_selCasiers.getMinIndex(); i<=_selCasiers.getMaxIndex(); i++) { + if (!_selCasiers.isSelected(i)) continue; + + GISZoneCollection zone=((ZCalqueGeometry)_scn.getLayerForId(i)).modeleDonnees().getGeomData(); + int idxgeom=_scn.sceneId2LayerId(i); + int iattr=zone.getIndiceOf(GISAttributeConstants.TITRE); + String name=""; + if (iattr!=-1) + name=(String)zone.getValue(iattr,idxgeom); + + coords.clear(); + GISPolygone geom=(GISPolygone)zone.getGeometry(idxgeom); + + // On controle que le casier est conforme. + if (geom.getCoordinateSequence().size()<5) { + _ana.addWarn(DodicoLib.getS("Casier '{0}' : Le contour n'est pas conforme",name), 0); + _selCasiers.remove(i); + continue; + } + + // On teste que le contour contient bien au moins 1 point. + PointInRing pir=GISLib.createPolygoneTester(geom); + + for (int j=_selSemis.getMinIndex(); j<=_selSemis.getMaxIndex(); j++) { + if (!_selSemis.isSelected(j)) continue; + + GISMultiPoint semis=(GISMultiPoint)_scn.getObject(j); + CoordinateSequence seq=semis.getCoordinateSequence(); + for (int k=0; k<seq.size(); k++) { + Coordinate c=seq.getCoordinate(k); + if (GISLib.isIn(c, geom, pir, 0)) + coords.add(c); + } + } + + // Le casier ne poss\xE8de aucun point interne => On le retire des casiers a exporter. + if (coords.size()==0) { + _ana.addWarn(MdlResource.getS("Casier '{0}' : Aucun point des semis s\xE9lectionn\xE9s ne se trouve \xE0 l'int\xE9rieur",name), -1); + _selCasiers.remove(i); + continue; + } + + // Recup\xE9ration des points, et cr\xE9ation d'un semis. + GISMultiPoint semis=GISGeometryFactory.INSTANCE.createMultiPoint(coords.toArray(new Coordinate[0])); + zsemis.addGeometry(semis,null,null); + } + + return zsemis; + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExporter.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dCasier.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dCasier.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dCasier.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -39,6 +39,6 @@ // Pas de container de commande pour cette op\xE9ration, sinon conserv\xE9 en undo/redo. getGeomData().setAttributes(attrs, null); getGeomData().setAttributeIsZ(GISAttributeConstants.BATHY); - getGeomData().setFixedAttributeValue(GISAttributeConstants.NATURE, GISAttributeConstants.ATT_NATURE_ZN); + getGeomData().setFixedAttributeValue(GISAttributeConstants.NATURE, GISAttributeConstants.ATT_NATURE_CA); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java 2009-03-16 09:36:48 UTC (rev 4546) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java 2009-03-16 09:42:56 UTC (rev 4547) @@ -18,7 +18,6 @@ import org.fudaa.ctulu.fileformat.FileFormatVersionInterface; import org.fudaa.ctulu.gui.CtuluDialogPanel; import org.fudaa.ctulu.gui.CtuluFileChooserPanel; -import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.resource.MdlResource; import org.fudaa.fudaa.sig.FSigLib; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-18 09:24:50
|
Revision: 4555 http://fudaa.svn.sourceforge.net/fudaa/?rev=4555&view=rev Author: bmarchan Date: 2009-03-18 09:24:35 +0000 (Wed, 18 Mar 2009) Log Message: ----------- Tache #201 : D?\195?\169placement du profil sur l'axe => L'angle n'est pas toujours respect?\195?\169 Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrVecteur.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrVecteur.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrVecteur.java 2009-03-17 18:50:18 UTC (rev 4554) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrVecteur.java 2009-03-18 09:24:35 UTC (rev 4555) @@ -185,4 +185,21 @@ public GrVecteur produitTripleVectoriel(final GrVecteur _v1, final GrVecteur _v2) { return produitVectoriel(_v1).produitVectoriel(_v2); } + + /** + * Calcule dans le plan XY l'angle entre <code>this</code> et un autre vecteur. + * L'angle calcul\xE9 est sign\xE9, tenant compte de l'ordre de <code>this</code> et autre.<p> + * Exemples :<br> + * <code> + * Si this(1,0,0) et autre(0,-1,0), angle=-PI/2<br> + * Si this(0,-1,0) et autre(1,0,0), angle=PI/2 + * </code> + * @param _v Le vecteur autre. + * @return L'angle en radians, sign\xE9. + */ + public double getAngleXY(GrVecteur _v) { + GrVecteur v1=this.normalise(); + GrVecteur v2=_v.normalise(); + return Math.atan2(v1.produitVectoriel(v2).z_,v1.produitScalaire(v2)); + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java 2009-03-17 18:50:18 UTC (rev 4554) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java 2009-03-18 09:24:35 UTC (rev 4555) @@ -28,6 +28,8 @@ import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.ebli.geometrie.GrSegment; +import org.fudaa.ebli.geometrie.GrVecteur; import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.LibUtils; @@ -607,6 +609,7 @@ // Point de croisement actuel entre l'axe et le profil Coordinate oldCoordCroisement=intersection.getCoordinate(); double oldAbscisseCurviligne=UtilsProfil1d.abscisseCurviligne(axeHydrau, oldCoordCroisement); + if (!UtilsProfil1d.egal(absZeroDecal, oldAbscisseCurviligne)) { // Cr\xE9ation d'une selection contenant la g\xE9om\xE9trie \xE0 modifier BitSet bs=new BitSet(biefContainer_.getZoneProfils().getNbGeometries()); @@ -620,30 +623,35 @@ move.x=((double) ((long) (move.x*10000.)))/10000; move.y=((double) ((long) (move.y*10000.)))/10000; biefContainer_.getModelProfils().moveGlobal(selection, move.x, move.y, 0, cmp); - // Somme de tous les angles de l'axe entre les deux points de - // translation + + // On recup\xE8re les 2 segments d'intersection... + //... du profil de d\xE9part avec l'axe int oldNextIdx=UtilsProfil1d.getNextIndex(axeHydrau, oldCoordCroisement); if (oldNextIdx==-1) oldNextIdx=axeHydrau.size()-1; - double oldAngle=0; - for (int i=0; i+2<=oldNextIdx; i++) - oldAngle+=Math.PI - -UtilsProfil1d.getAngle(axeHydrau.getCoordinate(i), axeHydrau.getCoordinate(i+1), axeHydrau.getCoordinate(i+2)); + //... du profil d'arriv\xE9e avec l'axe. int newNextIdx=UtilsProfil1d.getNextIndex(axeHydrau, newCoordCroisement); if (newNextIdx==-1) newNextIdx=axeHydrau.size()-1; - double newAngle=0; - for (int i=0; i+2<=newNextIdx; i++) - newAngle+=Math.PI - -UtilsProfil1d.getAngle(axeHydrau.getCoordinate(i), axeHydrau.getCoordinate(i+1), axeHydrau.getCoordinate(i+2)); + + // Calcul de l'angle entre ces 2 segments, angle correspondant a la rotation a effectuer. + GrVecteur v1=new GrVecteur(axeHydrau.getCoordinate(oldNextIdx).x-axeHydrau.getCoordinate(oldNextIdx-1).x, + axeHydrau.getCoordinate(oldNextIdx).y-axeHydrau.getCoordinate(oldNextIdx-1).y, + 0); + GrVecteur v2=new GrVecteur(axeHydrau.getCoordinate(newNextIdx).x-axeHydrau.getCoordinate(newNextIdx-1).x, + axeHydrau.getCoordinate(newNextIdx).y-axeHydrau.getCoordinate(newNextIdx-1).y, + 0); + double angrot=v1.getAngleXY(v2); + // Application de la rotation biefContainer_.getModelProfils() - .rotateGlobal(selection, newAngle-oldAngle, newCoordCroisement.x, newCoordCroisement.y, cmp); + .rotateGlobal(selection, angrot, newCoordCroisement.x, newCoordCroisement.y, cmp); // Verifie que le profil ne coupe pas deux fois l'axe hydraulique Geometry intersect=geomAxeHydrau.intersection(biefContainer_.getZoneProfils().getGeometry(idxProfilSelected_)); if (intersect.getNumPoints()!=1) { cmp.undo(); // Annulation des modifications - throw new ProfilContainerException(FudaaLib.getS("Le profil couperait l'axe hydraulique en au moins deux endroits.")); + throw new ProfilContainerException( + FudaaLib.getS("D\xE9placement non autoris\xE9 : Le profil couperait l'axe hydraulique en au moins deux endroits.")); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-23 10:03:24
|
Revision: 4559 http://fudaa.svn.sourceforge.net/fudaa/?rev=4559&view=rev Author: bmarchan Date: 2009-03-23 10:03:11 +0000 (Mon, 23 Mar 2009) Log Message: ----------- Correction de bug : Points ?\195?\160 Z null sur export Rubar + gestion des coordonn?\195?\169es doubl?\195?\169es + mise a jour Z des lignes directrices Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefImporterFromModels.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/Exporter1d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueTableau.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/EbliSingleObjectEditorPanel.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -71,6 +71,8 @@ import org.fudaa.ebli.courbe.EGFillePanel; import org.fudaa.ebli.courbe.EGGraphe; import org.fudaa.ebli.courbe.EGGrapheSimpleModel; +import org.fudaa.ebli.trace.TraceIcon; +import org.fudaa.ebli.trace.TraceIconModel; import com.memoire.bu.BuBorderLayout; import com.memoire.bu.BuButton; @@ -470,6 +472,7 @@ EGCourbeModelProfile courbeModel=new EGCourbeModelProfile(this, ""); courbeVue_=new EGCourbeSimple(axeY_, courbeModel); courbeVue_.setAspectContour(Color.BLUE); + courbeVue_.setIconeModel(new TraceIconModel(TraceIcon.CARRE_PLEIN,2,Color.BLUE)); grapheModel.addCourbe(courbeVue_, new CtuluCommandManager()); // Conteneur de graphe EGFillePanel pnD=new EGFillePanel(grapheVue_); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefImporterFromModels.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefImporterFromModels.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/BiefImporterFromModels.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -94,7 +94,9 @@ int idxAttLignesDirectrices=zone.getIndiceOf(GISAttributeConstants.INTERSECTIONS_LIGNES_DIRECTRICES); UtilsBief1d.orderProfils(profils_, -1, null); + // Normalise le sens du profil \\ + // FIXME BM : Voir si ca doit \xEAtre fait quand l'axe hydro n'existe pas. for (int k=0; k<profils_.getNombre(); k++) { Geometry profil=zone.getGeometry(k); CoordinateSequence seqProfil=((GISCoordinateSequenceContainerInterface)profil).getCoordinateSequence(); @@ -357,6 +359,7 @@ lignesContraints_=models_[i]; } // Remplissage des models vides par des ZModeles vides + // B.M. Ne doit pas se produire. if (axeHydraulique_==null) axeHydraulique_=new MdlModel1dAxe(null); if (profils_==null) @@ -516,9 +519,10 @@ Coordinate coord=inter.getCoordinate(); int previousIdx=UtilsProfil1d.getPreviousIndex(seq, coord); int nextIdx=UtilsProfil1d.getNextIndex(seq, coord); - // Le point n'appartient pas au profil ou La coordonn\xE9e correspond d\xE9j\xE0 \xE0 - // un point - if (previousIdx!=-2&&nextIdx!=-2&&previousIdx+1!=nextIdx-1&&nextIdx!=-1&&previousIdx!=-1) + // Le point n'appartient pas au profil ou la coordonn\xE9e correspond d\xE9j\xE0 \xE0 + // un point. Attention, le profil peut contenir plusieurs points confondus \xE0 l'intersection + // trouv\xE9e. D'ou le test (nextIdx-previousIdx)<2. + if (previousIdx!=-2&&nextIdx!=-2&&nextIdx!=-1&&previousIdx!=-1&&(nextIdx-previousIdx)<2) // La coordonn\xE9e correspond \xE0 aucun point connu ((GISZoneCollectionGeometry)profils_.getGeomData()).addAtomic(_idxProfil, previousIdx, coord.x, coord.y, null); } @@ -541,9 +545,10 @@ Coordinate coordIntersection=intersection.getCoordinate(); int previousIdx=UtilsProfil1d.getPreviousIndex(seqProfil, coordIntersection); int nextIdx=UtilsProfil1d.getNextIndex(seqProfil, coordIntersection); - // Le point n'appartient pas au profil ou La coordonn\xE9e correspond d\xE9j\xE0 \xE0 - // un point - if (previousIdx!=-2&&nextIdx!=-2&&previousIdx+1!=nextIdx-1&&nextIdx!=-1&&previousIdx!=-1) { + // Le point n'appartient pas au profil ou la coordonn\xE9e correspond d\xE9j\xE0 \xE0 + // un point. Attention, le profil peut contenir plusieurs points confondus \xE0 l'intersection + // trouv\xE9e. D'ou le test (nextIdx-previousIdx)<2. + if (previousIdx!=-2&&nextIdx!=-2&&nextIdx!=-1&&previousIdx!=-1&&(nextIdx-previousIdx)<2) { // La coordonn\xE9e correspond \xE0 aucun point connu ((GISZoneCollectionGeometry)zoneProfil).addAtomic(_idxProfil, previousIdx, coordIntersection.x, coordIntersection.y, null); seqProfil=zoneProfil.getCoordinateSequence(_idxProfil); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/Exporter1d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/Exporter1d.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/Exporter1d.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -16,7 +16,7 @@ /** * Un exporteur des donn\xE9es d'un bief vers des fichiers. * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ interface Exporter1d { @@ -32,7 +32,7 @@ /** * Exporteur pour Mascaret 1D, ou 2D. * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ class Mascaret implements Exporter1d { @@ -52,12 +52,16 @@ /** * Exporteur pour Rubar ST. * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ class Rubar implements Exporter1d { public Object[] export(Bief _bief, String _name) { GISDataModel[] params=new GISDataModel[2]; + // Remplit les Z coordonn\xE9es avec la valeur de l'attribut Z + _bief.profils_.getGeomData().prepareExport(); + _bief.lignesDirectrices_.getGeomData().prepareExport(); + params[0]=_bief.profils_.getGeomData(); params[1]=_bief.lignesDirectrices_.getGeomData(); return params; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -295,6 +295,9 @@ updateGeom(_idxGeom, limitesStockagsesModified_, 0, idxAttlsGauche_); else if (_att==GISAttributeConstants.INTERSECTION_LIMITE_STOCKAGE_DROITE) updateGeom(_idxGeom, limitesStockagsesModified_, 1, idxAttlsDroite_); + else if (_att==GISAttributeConstants.BATHY) + for(int i=0;i<lignesDirectricesModified_.getGeomData().getNumGeometries();i++) + updateLd(i); else if (_att==GISAttributeConstants.INTERSECTIONS_LIGNES_DIRECTRICES) /* * Attention subtilit\xE9 : Quand l'attribut est @@ -321,6 +324,7 @@ } public void geometryAction(Object _source, int _idxGeom, Geometry _geom, int _action) { + // La g\xE9om\xE9trie d'un profil a \xE9t\xE9 modifi\xE9e, on remet a jour les g\xE9om\xE9tries volatiles. if (_action==ZModelGeometryListener.GEOMETRY_ACTION_MODIFY) { updateGeom(_idxGeom, rivesModified_, 0, idxAttRiveGauche_); updateGeom(_idxGeom, rivesModified_, 1, idxAttRiveDroite_); @@ -336,6 +340,9 @@ */ private void regenerateAll() { GISZoneCollection zone=profilsListen_.getGeomData(); + // Pour que les coordonn\xE9es qui sont conserv\xE9es pour les g\xE9om\xE9tries volatiles soient correctement initialis\xE9es en Z. + zone.prepareExport(); + // Cr\xE9ation des nouvelles g\xE9om\xE9tries \\ // Rives Coordinate[] riveGauche=new Coordinate[profilsListen_.getNombre()]; @@ -395,6 +402,7 @@ if (ld[i].length>1) lignesDirectricesModified_.getGeomData().addGeometry(new GISPolyligne(new GISCoordinateSequenceFactory().create(ld[i])), dataLignesDirectrices[i], null); + lignesDirectrices_.getGeomData().postImport(0); } /** @@ -417,7 +425,7 @@ } /** - * Met \xE0 jours les lignes directrices. + * Remet \xE0 jour les coordonn\xE9es d'une ligne directrices depuis celles des profils. * si _idxGeom=-1, rien n'est fait * * @param _idxGeom @@ -426,20 +434,27 @@ private void updateLd(int _idxGeom) { if (_idxGeom==-1) return; + boolean binitZ=false; CoordinateSequence seqLd=lignesDirectricesModified_.getGeomData().getCoordinateSequence(_idxGeom); for (int i=0; i<profilsListen_.getNombre(); i++) { GISAttributeModelIntegerList lstIdx=(GISAttributeModelIntegerList)profilsListen_.getGeomData().getValue( idxAttlignesDirectrices_, i); + + // La construction des lignes directrices se fait a partir des coordonn\xE9es. + profilsListen_.getGeomData().initZCoordinate(i); CoordinateSequence seqProfil=profilsListen_.getGeomData().getCoordinateSequence(i); Coordinate coodProfil=seqProfil.getCoordinate(lstIdx.getValue(_idxGeom)); // Test si c'est bien un point \xE0 mettre \xE0 jour if (!UtilsProfil1d.egal(coodProfil, seqLd.getCoordinate(i))) { + binitZ=true; seqLd.setOrdinate(i, 0, coodProfil.x); seqLd.setOrdinate(i, 1, coodProfil.y); seqLd.setOrdinate(i, 2, coodProfil.z); lignesDirectricesModified_.getGeomData().setCoordinateSequence(_idxGeom, seqLd, null); } } + if (binitZ) + lignesDirectricesModified_.getGeomData().initZAttribute(_idxGeom); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -19,19 +19,17 @@ import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluNamedCommand; -import org.fudaa.ctulu.collection.CtuluCollection; import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISAttributeModelIntegerList; import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; -import org.fudaa.ebli.geometrie.GrSegment; import org.fudaa.ebli.geometrie.GrVecteur; import org.fudaa.fudaa.commun.FudaaLib; -import org.fudaa.fudaa.modeleur.LibUtils; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; @@ -114,8 +112,6 @@ private BiefContainer biefContainer_; /** Le profil selectionn\xE9. */ private int idxProfilSelected_=-1; - /** La collection contenant les Z des points du profil selectionn\xE9. */ - private CtuluCollection z_; /** La liste contenant les abscisses en travers du profil selectionn\xE9 */ private List<Double> curv_; // Caches \\ @@ -156,7 +152,6 @@ public void biefSelectedChanged(String _newName) { int oldSelectedProfil=idxProfilSelected_; idxProfilSelected_=-1; - z_=null; curv_=null; fireProfilContainerSelectedChanged(oldSelectedProfil, idxProfilSelected_); } @@ -169,7 +164,6 @@ if(_idxProfil==idxProfilSelected_) { int oldSelectedProfil=idxProfilSelected_; idxProfilSelected_=-1; - z_=null; curv_=null; fireProfilContainerSelectedChanged(oldSelectedProfil, idxProfilSelected_); } @@ -180,17 +174,18 @@ /** * Met \xE0 jour les valeurs zMin et zMax. - * Si z_ est null, zMin et zMax sont mises \xE0 -1. + * Si z est null, zMin et zMax sont mises \xE0 -1. */ protected void updateCacheZ(){ - if(z_!=null) { + GISAttributeModel z=getZCollection(); + if(z!=null) { idxZMax_=0; idxZMin_=0; - for (int i=1; i<z_.getSize(); i++) { - double val=(Double)z_.getObjectValueAt(i); - if (val>(Double)z_.getObjectValueAt(idxZMax_)) + for (int i=1; i<z.getSize(); i++) { + double val=(Double)z.getObjectValueAt(i); + if (val>(Double)z.getObjectValueAt(idxZMax_)) idxZMax_=i; - else if (val<(Double)z_.getObjectValueAt(idxZMin_)) + else if (val<(Double)z.getObjectValueAt(idxZMin_)) idxZMin_=i; } } @@ -230,7 +225,6 @@ */ protected void updateData() throws IllegalArgumentException, ProfilContainerException { if (idxProfilSelected_==-1) { - z_=null; curv_=null; curviligneDecalage_=0; idxRuptures_.clear(); @@ -252,20 +246,40 @@ if (seq.getX(i-1)==seq.getX(i)&&seq.getY(i-1)==seq.getY(i)) throw new ProfilContainerException(FudaaLib.getS("Au moins deux points dans le profil sont confondus.")); */ - // Verifie que le profil donn\xE9 ne poss\xE8de pas des axes qui se coupent entre eux \\ + // Verifie que le profil donn\xE9 ne poss\xE8de pas des segments qui se coupent entre eux \\ for(int i=1;i<seq.size();i++){ - Geometry mainAxe=GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(i-1), seq.getCoordinate(i)}); + // On passe les segments de longueur nulle. + if (seq.getCoordinate(i-1).equals2D(seq.getCoordinate(i))) continue; + + Geometry seg1=GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(i-1), seq.getCoordinate(i)}); boolean ok=true; - // Un seul point d'intersection avec l'axe qui suit - if(i+1<seq.size()&&mainAxe.intersection(GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(i), seq.getCoordinate(i+1)})).getNumPoints()>1) - ok=false; - // Aucun point d'intersectin avec les axes qui suivent + + // Valide : Un seul point d'intersection avec l'axe qui suit int j=i; - while(ok&&++j+1<seq.size()) - ok=(!mainAxe.intersects(GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(j), seq.getCoordinate(j+1)})))||seq.getCoordinate(j).equals(seq.getCoordinate(i)); - // Traitement d'une \xE9ventuelle intersection + while(ok && j+1<seq.size()) { + // On passe les segments de longueur nulle. + if (!seq.getCoordinate(j).equals2D(seq.getCoordinate(j+1))) { + Geometry seg2=GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(j), seq.getCoordinate(j+1)}); + ok=seg1.intersection(seg2).getNumPoints()==1; + j++; + break; + } + j++; + } + + // Valide : Aucun point d'intersection avec les axes qui suivent + while(ok && j+1<seq.size()) { + // On passe les segments de longueur nulle. + if (!seq.getCoordinate(j).equals2D(seq.getCoordinate(j+1))) { + Geometry seg2=GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(j), seq.getCoordinate(j+1)}); + ok=!seg1.intersects(seg2); + } + j++; + } + + // Une intersection a \xE9t\xE9 trouv\xE9e. if(!ok) - throw new ProfilContainerException(FudaaLib.getS("Le profil se coupe lui m\xEAme. Il n'est donc pas valide.")); + throw new ProfilContainerException(FudaaLib.getS("Profil non conforme : Il se coupe lui m\xEAme")); } /// D\xE9termination des points de ruptures. \\\ @@ -299,10 +313,9 @@ idxRuptures[i+1]=it.next(); idxRuptures[idxRuptures.length-1]=seq.size()-1; // On ne lin\xE9arise plus. Pose des probl\xE8me lors des undo, car les collections sont modifi\xE9es. Ce n'est pas priori pas g\xE9nant, - // les points de ruptures fonctionnent semblent regler une partie du probl\xE8me. + // les points de ruptures semblent regler la totalit\xE9 du probl\xE8me. // LibUtils.linearisePolyligne(biefContainer_.getZoneProfils(), idxProfilSelected_, idxRuptures, null); - z_=(CtuluCollection)biefContainer_.getZoneProfils().getValue(biefContainer_.getZoneProfils().getIndiceOf(biefContainer_.getZoneProfils().getAttributeIsZ()), idxProfilSelected_); curv_=new ArrayList<Double>(); // Calcul des acbscisses curvilignes => hypoth\xE8se d'ordonnancement correcte des points \\ updateCacheCurv(); @@ -313,7 +326,6 @@ catch(ProfilContainerException _exp) { // Remise dans un \xE9tat coh\xE9rent idxProfilSelected_=-1; - z_=null; curv_=null; curviligneDecalage_=0; idxRuptures_.clear(); @@ -344,6 +356,14 @@ } /** + * Retourne la collection correspondant au Z profil. + */ + private GISAttributeModel getZCollection() { + if (idxProfilSelected_==-1) return null; + return (GISAttributeModel)getValueOf(biefContainer_.getZoneProfils().getAttributeIsZ()); + } + + /** * Retourne la valeur de l'attribut d'intersection demand\xE9. */ private Object getValueOf(GISAttributeInterface attr_) { @@ -651,7 +671,7 @@ if (intersect.getNumPoints()!=1) { cmp.undo(); // Annulation des modifications throw new ProfilContainerException( - FudaaLib.getS("D\xE9placement non autoris\xE9 : Le profil couperait l'axe hydraulique en au moins deux endroits.")); + FudaaLib.getS("D\xE9placement non autoris\xE9 : Le profil coupe l'axe hydraulique en deux endroits.")); } } } @@ -687,9 +707,10 @@ } public double getZ(int _idxPoint) { - if (z_==null||_idxPoint<0||_idxPoint>=z_.getSize()) + GISAttributeModel z=getZCollection(); + if (z==null||_idxPoint<0||_idxPoint>=z.getSize()) throw new IllegalArgumentException("Cet index n'existe pas."); - return ((Double)z_.getObjectValueAt(_idxPoint)).doubleValue(); + return ((Double)z.getObjectValueAt(_idxPoint)).doubleValue(); } public void setCurv(int _idxPoint, double _value, CtuluCommandContainer _cmd) throws ProfilContainerException { @@ -944,20 +965,26 @@ public void setZ(int _idxPoint, double _value, CtuluCommandContainer _cmd) { if (getZ(_idxPoint)==_value) return; - if (z_==null||_idxPoint<0||_idxPoint>=z_.getSize()) + GISAttributeModel z=getZCollection(); + if (z==null||_idxPoint<0||_idxPoint>=z.getSize()) throw new IllegalArgumentException("Cet index n'existe pas."); - CtuluCommandComposite cmd=new CtuluCommandComposite("Changement z"); + CtuluCommandComposite cmp=new CtuluCommandComposite("Changement z"); // Mise \xE0 jour du z \\ - z_.setObject(_idxPoint, _value, cmd); + // B.M. Il faut indiquer que l'attribut a chang\xE9, pour que les g\xE9om\xE9tries volatiles soient remises a jour. + z=((GISAttributeModel)z).createSubModel(new int[0]); + z.setObject(_idxPoint, _value, null); + int iattZ=biefContainer_.getZoneProfils().getIndiceOf(GISAttributeConstants.BATHY); + biefContainer_.getZoneProfils().setAttributValue(iattZ, idxProfilSelected_, z, cmp); + // Gestion du undo/redo \\ if(_cmd!=null) - _cmd.addCmd(new DGCommandUndoRedo(cmd, true, false)); + _cmd.addCmd(new DGCommandUndoRedo(cmp, true, false)); // Mise \xE0 jour de idxZMin_ et idxZMax_ if (_idxPoint==idxZMax_||_idxPoint==idxZMin_) updateCacheZ(); - else if (_value>(Double)z_.getObjectValueAt(idxZMax_)) + else if (_value>(Double)z.getObjectValueAt(idxZMax_)) idxZMax_=_idxPoint; - else if (_value<(Double)z_.getObjectValueAt(idxZMin_)) + else if (_value<(Double)z.getObjectValueAt(idxZMin_)) idxZMin_=_idxPoint; fireProfilContainerDataModified(); } @@ -977,17 +1004,19 @@ } public double getZMax() { - if(z_==null) + GISAttributeModel z=getZCollection(); + if(z==null) return 0; else - return (Double) z_.getObjectValueAt(idxZMax_); + return (Double) z.getObjectValueAt(idxZMax_); } public double getZMin() { - if(z_==null) + GISAttributeModel z=getZCollection(); + if(z==null) return 0; else - return (Double) z_.getObjectValueAt(idxZMin_); + return (Double) z.getObjectValueAt(idxZMin_); } public void setValues(int _idxPoint, double _valueCurv, double _valueZ, CtuluCommandContainer _cmd) throws ProfilContainerException{ @@ -1003,7 +1032,8 @@ } public void remove(int _idxPoint, CtuluCommandContainer _cmd) throws ProfilContainerException { - if(biefContainer_.getZoneProfils()==null||z_==null||curv_==null||_idxPoint<0||_idxPoint>=curv_.size()) + GISAttributeModel z=getZCollection(); + if(biefContainer_.getZoneProfils()==null||z==null||curv_==null||_idxPoint<0||_idxPoint>=curv_.size()) throw new IllegalArgumentException("Cet index n'existe pas."); if(curv_.size()==2) throw new ProfilContainerException("On ne peut pas enlever un point quand il n'en reste que deux."); @@ -1013,7 +1043,6 @@ // Gestion du undo/redo \\ if(_cmd!=null) _cmd.addCmd(new DGCommandUndoRedo(cmd, true, true)); - z_=(CtuluCollection)biefContainer_.getZoneProfils().getValue(biefContainer_.getZoneProfils().getIndiceOf(biefContainer_.getZoneProfils().getAttributeIsZ()), idxProfilSelected_); // Mise \xE0 jour des informations curvilignes \\ if (_idxPoint==0) { // Si _idxPoint est le premier point Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/ExportPanel.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -98,8 +98,11 @@ } // Verification de l'\xE9crasement - if(f.exists()&&!ui_.question(CtuluLib.getS("Attention"), CtuluLib.getS("Le fichier {0} existe d\xE9j\xE0. Voulez-vous l'\xE9craser?", CtuluLibFile.getSansExtension(f.getName())))) + if(f.exists()) { + if (!ui_.question(CtuluLib.getS("Attention"), CtuluLib.getS("Le fichier '{0}' existe d\xE9j\xE0. Voulez-vous l'\xE9craser?", f.getName()))) return false; + f.delete(); + } if (CtuluLibFile.getExtension(CtuluLibFile.getSansExtension(f.getName()))!=null) { setErrorText(CtuluLib.getS("Ne mettez pas plusieurs '.' dans le nom.")); return false; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -39,6 +39,8 @@ import org.fudaa.ebli.courbe.EGGrapheSimpleModel; import org.fudaa.ebli.courbe.EGModel; import org.fudaa.ebli.palette.BPaletteInfo.InfoData; +import org.fudaa.ebli.trace.TraceIcon; +import org.fudaa.ebli.trace.TraceIconModel; import org.fudaa.ebli.trace.TraceLigne; import org.fudaa.ebli.trace.TraceLigneModel; import org.fudaa.fudaa.commun.FudaaLib; @@ -458,6 +460,7 @@ courbeModel_=new CourbeGeomModel(_dataGeom); courbe_=new EGCourbeSimple(axeY, courbeModel_); courbe_.setAspectContour(Color.RED); + courbe_.setIconeModel(new TraceIconModel(TraceIcon.CARRE_PLEIN,2,Color.RED)); grapheModel.addCourbe(courbe_, null); // Cr\xE9ation du panel contenant l'ensemble des courbes \\ containerCourbe_ = new EGFillePanel(grapheVue_); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueTableau.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueTableau.java 2009-03-21 18:29:25 UTC (rev 4558) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueTableau.java 2009-03-23 10:03:11 UTC (rev 4559) @@ -92,7 +92,7 @@ * @throws ProfilContainerException */ public void moveProfilOnAxeHydraulique(double _value) throws ProfilContainerException { - CtuluCommandComposite cmp=new CtuluCommandComposite(FudaaLib.getS("D\xE9placement d'un profil")); + CtuluCommandComposite cmp=new CtuluCommandComposite(FudaaLib.getS("Changement d'abscisse de profil sur l'axe")); boolean result=data_.moveProfilOnAxeHydraulique(_value, cmp); if(result) controller_.orderProfils(cmp); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-24 15:35:09
|
Revision: 4565 http://fudaa.svn.sourceforge.net/fudaa/?rev=4565&view=rev Author: bmarchan Date: 2009-03-24 15:34:57 +0000 (Tue, 24 Mar 2009) Log Message: ----------- Tache #166 : Export des casiers au format Rubar. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInteger.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInteger.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInteger.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInteger.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInteger.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -11,7 +11,7 @@ /** * @author Fred Deniger - * @version $Id: GISAttributeInteger.java,v 1.8 2006-09-19 14:36:53 deniger Exp $ + * @version $Id$ */ public class GISAttributeInteger extends GISAttribute { @@ -46,7 +46,8 @@ } /** - * @param _name + * Cree un attribut integer, par defaut global. + * @param _name Le nom de l'attribut */ public GISAttributeInteger(final String _name) { super(new CtuluValueEditorInteger(), _name); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInteger.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -646,8 +646,8 @@ } final double r = _s.getOrdinate(0, CoordinateSequence.Z); for (int i = _s.size() - 1; i > 0; i--) { - final double t = _s.getOrdinate(i, CoordinateSequence.Z) - r; - if (t < _eps || t > _eps) { + final double t = Math.abs(_s.getOrdinate(i, CoordinateSequence.Z) - r); + if (t > _eps) { return false; } } Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -0,0 +1,45 @@ +/* + * @creation 11 Mars 2009 + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.dodico.rubar.io; + +import org.fudaa.ctulu.fileformat.FileFormatUnique; +import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; +import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; +import org.fudaa.dodico.commun.DodicoLib; +import org.fudaa.dodico.h2d.resource.H2dResource; + +/** + * Un file format pour les fichier Rubar Casiers + * @author Bertrand Marchand + * @version $Id$ + */ +public class RubarCasierFileFormat extends FileFormatUnique { + + public RubarCasierFileFormat() { + super(1); + nom_ = DodicoLib.getS("Rubar casiers"); + description_ = H2dResource.getS("Fichier contenant des casiers"); + extensions_=new String[]{"mage"}; + } + static final RubarCasierFileFormat INSTANCE = new RubarCasierFileFormat(); + + /** + * @return singleton + */ + public static RubarCasierFileFormat getInstance() { + return INSTANCE; + } + + public FileReadOperationAbstract createReader() { + return null; + } + + public FileWriteOperationAbstract createWriter() { + return new RubarCasierWriter(); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -0,0 +1,107 @@ +/* + * @creation 15 f\xE9vr. 07 + * @modification $Date: 2007-05-04 13:47:30 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.dodico.rubar.io; + +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInteger; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISPolygone; +import org.fudaa.dodico.commun.DodicoLib; +import org.fudaa.dodico.fortran.FileOpWriterCharSimpleAbstract; +import org.fudaa.dodico.fortran.FortranWriter; + +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Une classe pour ecrire des casiers au format Rubar. + * + * @author Bertrand Marchand + * @version $Id$ + */ +public class RubarCasierWriter extends FileOpWriterCharSimpleAbstract { + + /** A utiliser pour chaque ligne de niveau, comme index sur le casier auquel elle se rapporte */ + public static final GISAttributeInterface INDEX_CASIER=new GISAttributeInteger("Index casier"); + + /** + * Ecrit les casiers. Les casiers sont consid\xE9r\xE9s conformes, c'est a dire a plus de 3 points et 0 ou plus lignes de niveaux. + * @param _o Un tableau GISDataModel[2]. + * [0] : le modele des contours de casiers + * [1] : le modele des lignes de niveau ferm\xE9es internes aux casiers. Il poss\xE8de un attribut INDEX_CASIER, qui indique le + * casier auquel chaque ligne de niveau se rapporte. + */ + protected void internalWrite(final Object _o) { + if (!(_o instanceof GISDataModel[]) || ((GISDataModel[])_o).length!=2) { + donneesInvalides(_o); + return; + } + + GISDataModel mdcasiers=((GISDataModel[])_o)[0]; + GISDataModel mdniv=((GISDataModel[])_o)[1]; + + final int iattName=mdcasiers.getIndiceOf(GISAttributeConstants.TITRE); + final int iattRef=mdniv.getIndiceOf(INDEX_CASIER); + if (iattRef==-1) { + analyze_.addFatalError(DodicoLib.getS("Arguments d'appel \xE0 RubarCasierWriter invalides")); + return; + } + + final FortranWriter writer = new FortranWriter(out_); + final int[] fmt={10,10}; + + try { + for (int icas = 0; icas < mdcasiers.getNumGeometries(); icas++) { + GISPolygone gcasier=((GISPolygone)mdcasiers.getGeometry(icas)); + + String name; + if (iattName==-1||(name=(String)mdcasiers.getValue(iattName, icas))==null||name.length()>3) name="C"+(icas+1); + + writer.writeln("$"+name); + // Le contour casier + writer.doubleField(1,getSurface(gcasier)); + writer.doubleField(0,getAltitude(gcasier.getCoordinateSequence())); + writer.writeFields(fmt); + + // Les lignes de niveau pour ce casier. + for (int iniv=0; iniv< mdniv.getNumGeometries(); iniv++) { + if (mdniv.getValue(iattRef, iniv).equals(icas)) { + GISPolygone gniv=((GISPolygone)mdniv.getGeometry(iniv)); + writer.doubleField(1,getSurface(gniv)); + writer.doubleField(0,getAltitude(gniv.getCoordinateSequence())); + writer.writeFields(fmt); + } + } + } + + } catch (final Exception _evt) { + analyze_.manageException(_evt); + } + + } + + /** + * Retourne l'altitude moyenne de la sequence pass\xE9e en argument. + * @param _seq La sequence de coordonn\xE9es. + * @return L'altitude moyenne. + */ + private double getAltitude(CoordinateSequence _seq) { + return GISLib.getMoyZ(_seq); + } + + /** + * Retourne la surface (en hectares) de la g\xE9om\xE9trie pass\xE9e en argument. + * @param _geom La g\xE9om\xE9trie pass\xE9e en argument. + * @return La surface en hectares. 0 pour un point. + */ + private double getSurface(Geometry _geom) { + return _geom.getArea()/10000; + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/CalqueGISTreeModel.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -55,7 +55,6 @@ public class CalqueGISTreeModel extends DefaultTreeModel implements Observer { final BGroupeCalque rootLayer_; - LayerNode rootNode_; final CalqueGeometryVisitor finder_ = new CalqueGeometryVisitor(); GISVisitorChooser chooser_ = new GISVisitorChooser(); @@ -202,7 +201,6 @@ */ public CalqueGISTreeModel(final BArbreCalqueModel _model, final BGroupeCalque _root) { super(new LayerNode(_root)); - rootNode_=(LayerNode)getRoot(); rootLayer_ = _root; if (_model != null) { _model.getObservable().addObserver(this); @@ -212,8 +210,8 @@ } public final void buildTree() { - rootNode_.removeAllChildren(); - addLayer(rootNode_, rootLayer_); + ((LayerNode)getRoot()).removeAllChildren(); + addLayer((LayerNode)getRoot(), rootLayer_); } protected boolean containsGeometries(final BCalque _cq) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -166,7 +166,7 @@ return palette_; } - public final ZEbliCalquesPanel getPanel() { + public ZEbliCalquesPanel getPanel() { return panel_; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -10,6 +10,8 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; import java.io.File; import javax.swing.ButtonGroup; @@ -20,28 +22,21 @@ import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibFile; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluUI; -import org.fudaa.ctulu.fileformat.FileFormatVersionInterface; -import org.fudaa.ctulu.gis.GISAttributeConstants; -import org.fudaa.ctulu.gis.GISAttributeInterface; -import org.fudaa.ctulu.gis.GISDataModel; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gui.CtuluDialogPanel; import org.fudaa.ctulu.gui.CtuluFileChooserPanel; -import org.fudaa.dodico.mascaret.io.MascaretCasierFileFormat; import org.fudaa.ebli.calque.BArbreCalqueModel; import org.fudaa.ebli.calque.CalqueGISTreeModel; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesAbstract; import org.fudaa.ebli.calque.ZCalqueGeometry; -import org.fudaa.ebli.calque.ZEbliCalquesPanel; -import org.fudaa.ebli.calque.ZModeleGeometry; import org.fudaa.ebli.calque.ZScene; import org.fudaa.ebli.calque.edition.ZModeleGeometryDefault; -import org.fudaa.ebli.commun.EbliListeSelectionMulti; import org.fudaa.ebli.geometrie.GrBoite; import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.ebli.trace.TraceIconModel; @@ -53,11 +48,11 @@ import org.fudaa.fudaa.modeleur.resource.MdlResource; import org.fudaa.fudaa.sig.FSigLib; +import com.memoire.bu.BuComboBox; import com.memoire.bu.BuFileFilter; import com.memoire.bu.BuLabel; import com.memoire.bu.BuRadioButton; import com.memoire.bu.BuVerticalLayout; -import com.sun.java_cup.internal.internal_error; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Polygon; @@ -68,7 +63,7 @@ */ public class MdlCasierExportPanel extends CtuluDialogPanel { - private ZEbliCalquesPanel pn_; + private MdlVisuPanel pn_; private GrBoite initZoom_; private JTree trLayers_; private ZCalqueGeometry cqTmp_; @@ -76,22 +71,39 @@ private CtuluListSelection sel_=new CtuluListSelection(); private CtuluFileChooserPanel fileChooser_; private CtuluUI ui_; - private FileFormatVersionInterface[] ffs_; + private MdlCasierExporter[] exporters_; BuRadioButton rbAllLayers_; BuRadioButton rbSelectedLayers_; BuRadioButton rbVisibleLayers_; protected BuRadioButton rbSelectedGeometries_; - - public MdlCasierExportPanel(FileFormatVersionInterface[] _ffs, CtuluUI _ui, ZEbliCalquesPanel _pn, boolean _preselect) { + BuComboBox coFormat_; + + public MdlCasierExportPanel(MdlCasierExporter[] _exporters, CtuluUI _ui, MdlVisuPanel _pn, boolean _preselect) { pn_=_pn; - ffs_=_ffs; + exporters_=_exporters; ui_=_ui; setLayout(new BuVerticalLayout(5,true,true)); - BuLabel lbTitle=new BuLabel(FSigLib.getS("S\xE9lectionnez les semis \xE0 int\xE9grer aux casiers")); + JPanel pnFormat=new JPanel(); + pnFormat.setLayout(new BorderLayout(5,5)); + coFormat_=new BuComboBox(); + for (MdlCasierExporter exporter: _exporters) + coFormat_.addItem(exporter.getFileFormat().getFileFormat().createFileFilter().getShortDescription()); + coFormat_.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange()==ItemEvent.DESELECTED) return; + coFormatItemStateChanged(); + } + }); + + pnFormat.add(new BuLabel(FSigLib.getS("Format d'export")),BorderLayout.WEST); + pnFormat.add(coFormat_); + add(pnFormat); + + BuLabel lbTitle=new BuLabel(FSigLib.getS("S\xE9lectionnez les g\xE9om\xE9tries \xE0 int\xE9grer aux casiers")); add(lbTitle); - CalqueGISTreeModel md=new CalqueGISTreeModel(null,_pn.getDonneesCalque()); + CalqueGISTreeModel md=new CalqueGISTreeModel(null,_pn.getGroupAlti()); md.setMask(GISLib.MASK_MULTIPOINT); trLayers_=md.createView(true,true); @@ -104,16 +116,10 @@ sp.setPreferredSize(new Dimension(300,200)); add(sp); - BuFileFilter[] filters=new BuFileFilter[_ffs.length]; - for (int i=0; i<_ffs.length; i++) { - filters[i]=_ffs[i].getFileFormat().createFileFilter(); - } - final String title=FSigLib.getS("Fichier d'exportation"); fileChooser_=new CtuluFileChooserPanel(title); fileChooser_.setAllFileFilter(false); fileChooser_.setWriteMode(true); - fileChooser_.setFilter(filters); BuLabel lbFile=new BuLabel(title); JPanel pnFile=new JPanel(); @@ -141,6 +147,8 @@ rbSelectedGeometries_.setSelected(true); else rbSelectedGeometries_.setEnabled(false); + + coFormatItemStateChanged(); } /** @@ -169,6 +177,26 @@ } /** + * Changement de format d'export. + */ + private void coFormatItemStateChanged() { + CalqueGISTreeModel md=(CalqueGISTreeModel)trLayers_.getModel(); + md.setMask(getSelectedExporter().getMaskForSubSelection()); + // B.M. Oblig\xE9 de forcer le modele, je ne sais pourquoi. + trLayers_.setModel(null); + trLayers_.setModel(md); + + fileChooser_.setFilter(new BuFileFilter[]{getSelectedExporter().getFileFormat().getFileFormat().createFileFilter()}); + } + + /** + * Retourne l'exporter selectionn\xE9 + */ + public MdlCasierExporter getSelectedExporter() { + return exporters_[coFormat_.getSelectedIndex()]; + } + + /** * R\xE9affichage de la fenetre 2D en cas de selection d'un objet. * @param _geoms Les g\xE9om\xE9tries s\xE9lectionn\xE9es. * @param _zoom True si le zoom doit se faire sur les g\xE9ometries s\xE9lectionn\xE9es. @@ -225,14 +253,16 @@ @Override public boolean valide() { - if (trLayers_.getSelectionCount()==0) { - setErrorText(MdlResource.getS("Vous devez s\xE9lectionner au moins 1 semis")); + CtuluAnalyze ana=new CtuluAnalyze(); + if (!getSelectedExporter().isDataOk(getSelection(),ana)) { + setErrorText(ana.getErrors()[0].getMessage()); return false; } if (isFileOK()) return true; return false; } + private boolean isFileOK() { final File f=fileChooser_.getFile(); if (f==null) { @@ -240,16 +270,16 @@ return false; } - // Verification de l'extension - if (getFileFormat()==null) { - setErrorText(MdlResource.getS("Le fichier choisi a une extension inconnue")); + // Verification que l'extension est autoris\xE9e + if (!getSelectedExporter().getFileFormat().getFileFormat().createFileFilter().accept(getFile())) { + setErrorText(MdlResource.getS("Le fichier choisi a une extension invalide")); return false; } // Verification que le fichier n'existe pas. if(f.exists()) { - if (ui_.question(CtuluLib.getS("Attention"), CtuluLib.getS("Le fichier {0} existe d\xE9j\xE0. Voulez-vous l'\xE9craser?", - CtuluLibFile.getSansExtension(f.getName())))) + if (ui_.question(CtuluLib.getS("Attention"), CtuluLib.getS("Le fichier '{0}' existe d\xE9j\xE0. Voulez-vous l'\xE9craser?", + f.getName()))) f.delete(); else return false; @@ -324,19 +354,11 @@ return super.ok(); } + /** + * Reoutne le fichier selectionn\xE9. + * @return Le fichier. + */ public File getFile() { return fileChooser_.getFile(); } - - public FileFormatVersionInterface getFileFormat() { - File file=getFile(); - FileFormatVersionInterface ff=null; - for (int i=0; i<ffs_.length; i++) { - if (ffs_[i].getFileFormat().createFileFilter().accept(file)) { - ff=ffs_[i]; - break; - } - } - return ff; - } } \ No newline at end of file Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporter.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporter.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -26,9 +26,12 @@ import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISPolygone; +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; import org.fudaa.ctulu.gis.GISZoneCollectionMultiPoint; import org.fudaa.dodico.commun.DodicoLib; import org.fudaa.dodico.mascaret.io.MascaretCasierFileFormat; +import org.fudaa.dodico.rubar.io.RubarCasierFileFormat; +import org.fudaa.dodico.rubar.io.RubarCasierWriter; import org.fudaa.ebli.calque.ZScene; import org.fudaa.fudaa.modeleur.resource.MdlResource; @@ -37,22 +40,50 @@ import com.vividsolutions.jts.geom.CoordinateSequence; /** + * Un exporter de casiers de la fenetre 2D. A impl\xE9menter suivant chaque format d'exportation. * @author Bertrand Marchand * @version $Id$ */ public abstract class MdlCasierExporter { - public abstract CtuluIOOperationSynthese export(File _f, ZScene _scn, GISDataModel _mdCasiers, CtuluListSelection _selSemis); + /** + * Export des casiers. + * @param _f Le fichier casiers. + * @param _scn La scene. Utile pour la selection des g\xE9om\xE9tries a int\xE9grer. + * @param _mdCasiers Le modele des seuls contours de casier a exporter, selon l'option choisie (tous, selectionn\xE9s, etc.). + * @param _selGeom Les g\xE9om\xE9tries a int\xE9grer aux contours de casiers lors de l'export. + * @return Le resultat du traitement d'export. + */ + public abstract CtuluIOOperationSynthese export(File _f, ZScene _scn, GISDataModel _mdCasiers, CtuluListSelection _selGeom); + /** + * Retourne le file format associ\xE9 \xE0 l'exporter. + * @return Le file format. + */ public abstract FileFormatVersionInterface getFileFormat(); + /** + * Retourne le masque de saisie des g\xE9om\xE9tries a int\xE9grer dans les casiers (voir {@link GISLib}) + * @return Le mask. + */ + public abstract int getMaskForSubSelection(); + + /** + * Controle que les donn\xE9es sont valides avant de passer \xE0 la suite. + */ + public abstract boolean isDataOk(CtuluListSelection _sel, CtuluAnalyze _ana); + + /** + * Un exporter de casiers au format Mascaret. + * @author Bertrand Marchand + * @version $Id:$ + */ public static class Mascaret extends MdlCasierExporter { public CtuluIOOperationSynthese export(File _f, ZScene _scn, GISDataModel _mdCasiers, CtuluListSelection _selSemis) { GISDataModel mdCasiers=_mdCasiers; CtuluAnalyze ana=new CtuluAnalyze(); - if (mdCasiers!=null&&mdCasiers.getNumGeometries()!=0) { int nbCasiers=mdCasiers.getNumGeometries(); TIntArrayList idxConserves=new TIntArrayList(); @@ -89,70 +120,250 @@ public FileFormatVersionInterface getFileFormat() { return MascaretCasierFileFormat.getInstance(); } + + public int getMaskForSubSelection() { + return GISLib.MASK_MULTIPOINT; + } + + public boolean isDataOk(CtuluListSelection _sel, CtuluAnalyze _ana) { + if (_sel.isEmpty()) { + _ana.addError(DodicoLib.getS("Vous devez s\xE9lectionner au moins 1 semis"),-1); + return false; + } + + return true; + } + + /** + * Construit les semis internes aux casiers. En fait, on recr\xE9e des semis pour chaque contour de casier. + * Les casiers sans semis interne ou non conformes sont supprim\xE9s du mod\xE8le. + * + * @param _scn La scene. + * @param _mdCasiers Le modele des casiers. + * @param _idxConserves Les index casiers conserv\xE9s. (Parametre de retour) + * @param _selSemis La selection des semis. + * @return Les semis. + */ + private GISZoneCollectionMultiPoint buildSemis(ZScene _scn, + GISDataModel _mdCasiers, TIntArrayList _idxConserves, CtuluListSelection _selSemis, CtuluAnalyze _ana) { + + GISZoneCollectionMultiPoint zsemis=new GISZoneCollectionMultiPoint(); + zsemis.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.BATHY},null); + zsemis.setAttributeIsZ(GISAttributeConstants.BATHY); + + List<Coordinate> coords=new ArrayList<Coordinate>(); + + for (int idxgeom=0; idxgeom<_mdCasiers.getNumGeometries(); idxgeom++) { + int iattr=_mdCasiers.getIndiceOf(GISAttributeConstants.TITRE); + String name=""; + if (iattr!=-1) + name=(String)_mdCasiers.getValue(iattr,idxgeom); + + coords.clear(); + GISPolygone geom=(GISPolygone)_mdCasiers.getGeometry(idxgeom); + + // On controle que le casier est conforme. + if (geom.getCoordinateSequence().size()<5) { + _ana.addWarn(DodicoLib.getS("Casier '{0}' : Le contour n'est pas conforme",name), 0); + continue; + } + + // On teste que le contour contient bien au moins 1 point. + PointInRing pir=GISLib.createPolygoneTester(geom); + + for (int j=_selSemis.getMinIndex(); j<=_selSemis.getMaxIndex(); j++) { + if (!_selSemis.isSelected(j)) continue; + + GISMultiPoint semis=(GISMultiPoint)_scn.getObject(j); + CoordinateSequence seq=semis.getCoordinateSequence(); + for (int k=0; k<seq.size(); k++) { + Coordinate c=seq.getCoordinate(k); + if (GISLib.isIn(c, geom, pir, 0)) + coords.add(c); + } + } + + // Le casier ne poss\xE8de aucun point interne => On le retire des casiers a exporter. + if (coords.size()==0) { + _ana.addWarn(MdlResource.getS("Casier '{0}' : Aucun point des semis s\xE9lectionn\xE9s ne se trouve \xE0 l'int\xE9rieur",name), -1); + continue; + } + _idxConserves.add(idxgeom); + + // Recup\xE9ration des points, et cr\xE9ation d'un semis. + GISMultiPoint semis=GISGeometryFactory.INSTANCE.createMultiPoint(coords.toArray(new Coordinate[0])); + zsemis.addGeometry(semis,null,null); + } + + return zsemis; + } } - - + /** - * Construit les semis internes aux casiers. En fait, on recr\xE9e des semis pour chaque contour de casier. - * Les casiers sans semis interne ou non conformes sont supprim\xE9s du mod\xE8le. - * - * @param _scn La scene. - * @param _mdCasiers Le modele des casiers. - * @param _idxConserves Les index casiers conserv\xE9s. (Parametre de retour) - * @param _selSemis La selection des semis. - * @return Les semis. + * Un exporter de casiers au format Rubar (MAGE). + * @author Bertrand Marchand + * @version $Id:$ */ - protected GISZoneCollectionMultiPoint buildSemis(ZScene _scn, - GISDataModel _mdCasiers, TIntArrayList _idxConserves, CtuluListSelection _selSemis, CtuluAnalyze _ana) { + public static class Rubar extends MdlCasierExporter { - GISZoneCollectionMultiPoint zsemis=new GISZoneCollectionMultiPoint(); - zsemis.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.BATHY},null); - zsemis.setAttributeIsZ(GISAttributeConstants.BATHY); + public CtuluIOOperationSynthese export(File _f, ZScene _scn, GISDataModel _mdCasiers, CtuluListSelection _selNiveaux) { + GISDataModel mdCasiers=_mdCasiers; + + CtuluAnalyze ana=new CtuluAnalyze(); + CtuluIOOperationSynthese synt=new CtuluIOOperationSynthese(); + synt.setAnalyze(ana); + + if (mdCasiers==null || mdCasiers.getNumGeometries()==0) { + ana.addWarn(DodicoLib.getS("Aucun casiers \xE0 exporter"), -1); + return synt; + } + + if (!hasNoIntersectionWithContours(_scn, _mdCasiers, _selNiveaux) || + !hasNoIntersectionWithNiveaux(_scn, _mdCasiers, _selNiveaux)) { + ana.addError(DodicoLib.getS("Les lignes de niveaux s\xE9lectionn\xE9es coupent des\n"+ + "contours de casiers ou se coupent entre elles.\n" + + "Aucun casiers export\xE9"), -1); + return synt; + } + + int nbCasiers=mdCasiers.getNumGeometries(); + TIntArrayList idxConserves=new TIntArrayList(); + GISZoneCollectionLigneBrisee mdNiveaux=buildNiveaux(_scn, mdCasiers, idxConserves, _selNiveaux, ana); + + // On ne conserve du mod\xE8le que les indexs conserv\xE9s. + if (idxConserves.size()!=nbCasiers) { + mdCasiers=new GISDataModelFilterAdapter(mdCasiers, null, idxConserves.toNativeArray()); + } + + FileWriteOperationAbstract writer=getFileFormat().createWriter(); + CtuluAnalyze ana2=writer.write(new GISDataModel[]{mdCasiers, mdNiveaux}, _f, null).getAnalyze(); + ana.merge(ana2); + + if (!ana.containsErrors()&&!ana.containsFatalError()) { + if (idxConserves.size()!=nbCasiers) { + ana.addWarn(DodicoLib.getS("{0} casiers sur {1} ont \xE9t\xE9 export\xE9s", ""+idxConserves.size(), ""+nbCasiers), -1); + } + else { + ana.addInfo(DodicoLib.getS("{0} casiers sur {1} ont \xE9t\xE9 export\xE9s", ""+nbCasiers, ""+nbCasiers), -1); + } + } + + return synt; + } - List<Coordinate> coords=new ArrayList<Coordinate>(); + public FileFormatVersionInterface getFileFormat() { + return RubarCasierFileFormat.getInstance(); + } + + public int getMaskForSubSelection() { + return GISLib.MASK_POLYGONE; + } - for (int idxgeom=0; idxgeom<_mdCasiers.getNumGeometries(); idxgeom++) { - int iattr=_mdCasiers.getIndiceOf(GISAttributeConstants.TITRE); - String name=""; - if (iattr!=-1) - name=(String)_mdCasiers.getValue(iattr,idxgeom); + public boolean isDataOk(CtuluListSelection _sel, CtuluAnalyze _ana) { + return true; + } + + /** + * Test que les courbes de niveaux n'ont pas d'intersections entre elles. + * @return true si pas d'intersections avec les autres courbes de niveaux. + */ + private boolean hasNoIntersectionWithNiveaux(ZScene _scn, + GISDataModel _mdCasiers, CtuluListSelection _selNiveaux) { - coords.clear(); - GISPolygone geom=(GISPolygone)_mdCasiers.getGeometry(idxgeom); + for (int iniv1=_selNiveaux.getMinIndex(); iniv1<=_selNiveaux.getMaxIndex(); iniv1++) { + if (!_selNiveaux.isSelected(iniv1)) continue; + GISPolygone niv1=(GISPolygone)_scn.getObject(iniv1); + + // Test avec les courbes de niveaux + for (int iniv2=iniv1+1; iniv2<=_selNiveaux.getMaxIndex(); iniv2++) { + if (!_selNiveaux.isSelected(iniv2)) continue; + GISPolygone niv2=(GISPolygone)_scn.getObject(iniv2); + if (niv2.intersects(niv1)) return false; + } + } + return true; + } + + /** + * Test que les courbes de niveaux n'ont pas d'intersections avec les contours de casiers. + * @return true si pas d'intersections avec les contours. + */ + private boolean hasNoIntersectionWithContours(ZScene _scn, + GISDataModel _mdCasiers, CtuluListSelection _selNiveaux) { - // On controle que le casier est conforme. - if (geom.getCoordinateSequence().size()<5) { - _ana.addWarn(DodicoLib.getS("Casier '{0}' : Le contour n'est pas conforme",name), 0); - continue; + for (int iniv1=_selNiveaux.getMinIndex(); iniv1<=_selNiveaux.getMaxIndex(); iniv1++) { + if (!_selNiveaux.isSelected(iniv1)) continue; + GISPolygone niv1=(GISPolygone)_scn.getObject(iniv1); + + // Test avec les casiers + for (int j=0; j<_mdCasiers.getNumGeometries(); j++) { + GISPolygone casier=(GISPolygone)_mdCasiers.getGeometry(j); + if (casier.intersects(niv1)) return false; + } } + return true; + } + + /** + * Construit les lignes de niveau internes aux casiers. + * Les casiers non conformes sont supprim\xE9s du mod\xE8le. + * + * @param _scn La scene. + * @param _mdCasiers Le modele des casiers. + * @param _idxConserves Les index casiers conserv\xE9s. (Parametre de retour) + * @param _selNiveaux La selection des lignes de niveau. + * @return Les semis. + */ + private GISZoneCollectionLigneBrisee buildNiveaux(ZScene _scn, + GISDataModel _mdCasiers, TIntArrayList _idxConserves, CtuluListSelection _selNiveaux, CtuluAnalyze _ana) { - // On teste que le contour contient bien au moins 1 point. - PointInRing pir=GISLib.createPolygoneTester(geom); + GISZoneCollectionLigneBrisee zniveaux=new GISZoneCollectionLigneBrisee(); + zniveaux.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.BATHY,RubarCasierWriter.INDEX_CASIER},null); + zniveaux.setAttributeIsZ(GISAttributeConstants.BATHY); - for (int j=_selSemis.getMinIndex(); j<=_selSemis.getMaxIndex(); j++) { - if (!_selSemis.isSelected(j)) continue; + List<Coordinate> coords=new ArrayList<Coordinate>(); + + for (int idxgeom=0; idxgeom<_mdCasiers.getNumGeometries(); idxgeom++) { + int iattr=_mdCasiers.getIndiceOf(GISAttributeConstants.TITRE); + String name=""; + if (iattr!=-1) + name=(String)_mdCasiers.getValue(iattr,idxgeom); - GISMultiPoint semis=(GISMultiPoint)_scn.getObject(j); - CoordinateSequence seq=semis.getCoordinateSequence(); - for (int k=0; k<seq.size(); k++) { - Coordinate c=seq.getCoordinate(k); - if (GISLib.isIn(c, geom, pir, 0)) - coords.add(c); + coords.clear(); + GISPolygone geom=(GISPolygone)_mdCasiers.getGeometry(idxgeom); + + // On controle que le casier est conforme (tous les points du contour on m\xEAme Z) + if (!GISLib.isNiveau(geom.getCoordinateSequence())) { + _ana.addWarn(DodicoLib.getS("Casier '{0}' : Le contour n'est pas conforme (Z non constant)",name), 0); + continue; } + + // On recherche a quel contour appartient chaque ligne de niveau. A ce stade, les courbes de niveaux ne se coupent pas entre + // elles, et ne coupent pas de contours. + PointInRing pir=GISLib.createPolygoneTester(geom); + + for (int j=_selNiveaux.getMinIndex(); j<=_selNiveaux.getMaxIndex(); j++) { + if (!_selNiveaux.isSelected(j)) continue; + + GISPolygone niv=(GISPolygone)_scn.getObject(j); + CoordinateSequence seq=niv.getCoordinateSequence(); + // Une coordonn\xE9e dans le contour => La ligne de niveau appartient au contour. + Coordinate c=seq.getCoordinate(0); + if (GISLib.isIn(c, geom, pir, 0)) { + zniveaux.addGeometry(niv,new Object[]{null,new Integer(idxgeom)},null); + } + } + + _idxConserves.add(idxgeom); + + // Recup\xE9ration des points, et cr\xE9ation d'un semis. +// GISMultiPoint semis=GISGeometryFactory.INSTANCE.createMultiPoint(coords.toArray(new Coordinate[0])); +// zniveaux.addGeometry(semis,null,null); } - // Le casier ne poss\xE8de aucun point interne => On le retire des casiers a exporter. - if (coords.size()==0) { - _ana.addWarn(MdlResource.getS("Casier '{0}' : Aucun point des semis s\xE9lectionn\xE9s ne se trouve \xE0 l'int\xE9rieur",name), -1); - continue; - } - _idxConserves.add(idxgeom); - - // Recup\xE9ration des points, et cr\xE9ation d'un semis. - GISMultiPoint semis=GISGeometryFactory.INSTANCE.createMultiPoint(coords.toArray(new Coordinate[0])); - zsemis.addGeometry(semis,null,null); + // Pour intiailiser la BATHY. + zniveaux.postImport(0); + return zniveaux; } - - return zsemis; } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -19,11 +19,11 @@ import org.fudaa.fudaa.modeleur.layer.MdlLayer2dCasier; /** - * Un filtre qui retourne un modele de donn\xE9es pour des calques/g\xE9om\xE9tries selectionn\xE9es + * Un filtre qui retourne un modele de casiers pour des calques/g\xE9om\xE9tries selectionn\xE9es * de l'arbre des calques. * * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ public class MdlCasierExporterFilter implements BCalqueVisitor { @@ -73,8 +73,17 @@ * aucune donn\xE9e r\xE9cup\xE9r\xE9e apr\xE8s filtre. */ public GISDataModel filter() { + // On transfert dans les zones casier les Z de l'attribut vers la coordonn\xE9e. + mdTree_.getRootCalque().apply(new BCalqueVisitor() { + public boolean visit(BCalque _cq) { + if (_cq instanceof MdlLayer2dCasier) { + ((MdlLayer2dCasier)_cq).modeleDonnees().getGeomData().prepareExport(); + } + return true; + } + }); + zones.clear(); - if (isOnlyOnSelectedLayers_) { final BCalque[] parent=mdTree_.getSelection(); if (parent!=null) Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -202,4 +202,8 @@ changeState(bt.getActionCommand()); } } + + public MdlVisuPanel getPanel() { + return (MdlVisuPanel)super.getPanel(); + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -118,6 +118,13 @@ return /*parent_*/null; } + /** + * Retourne le groupe des calques de donn\xE9es altim\xE9triques + */ + public BGroupeCalque getGroupAlti() { + return cqAlti_; + } + public void importImage() { // actImport_.actionPerformed(null); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java 2009-03-23 13:58:06 UTC (rev 4564) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlCasierExportAction.java 2009-03-24 15:34:57 UTC (rev 4565) @@ -9,7 +9,9 @@ import java.awt.event.ActionEvent; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import org.fudaa.ctulu.CtuluIOOperationSynthese; import org.fudaa.ctulu.CtuluLib; @@ -21,13 +23,11 @@ import org.fudaa.ebli.calque.ZCalqueGeometry; import org.fudaa.ebli.calque.ZModeleGeometry; import org.fudaa.ebli.calque.ZScene; -import org.fudaa.ebli.calque.ZSelectionEvent; -import org.fudaa.ebli.calque.ZSelectionListener; import org.fudaa.ebli.commun.EbliActionSimple; import org.fudaa.fudaa.commun.FudaaLib; +import org.fudaa.fudaa.modeleur.MdlCasierExportPanel; import org.fudaa.fudaa.modeleur.MdlCasierExporter; import org.fudaa.fudaa.modeleur.MdlCasierExporterFilter; -import org.fudaa.fudaa.modeleur.MdlCasierExportPanel; import org.fudaa.fudaa.modeleur.MdlEditionManager; import org.fudaa.fudaa.modeleur.resource.MdlResource; import org.fudaa.fudaa.ressource.FudaaResource; @@ -47,12 +47,10 @@ } public void actionPerformed(final ActionEvent _e) { - MdlCasierExporter exporter; - // Les formats de fichier casiers exportables. - HashMap<FileFormatVersionInterface, MdlCasierExporter> ff2Exporter=new HashMap<FileFormatVersionInterface, MdlCasierExporter>(); - ff2Exporter.put((exporter=new MdlCasierExporter.Mascaret()).getFileFormat(),exporter); - - FileFormatVersionInterface[] ffs=ff2Exporter.keySet().toArray(new FileFormatVersionInterface[0]); + // Les exporters de fichier casiers. + MdlCasierExporter[] exporters=new MdlCasierExporter[2]; + exporters[0]=new MdlCasierExporter.Rubar(); + exporters[1]=new MdlCasierExporter.Mascaret(); ZScene scn=editor_.getSupport(); boolean bpreselect= @@ -60,7 +58,7 @@ !scn.isSelectionEmpty() && containsOnlyCasiers(); - MdlCasierExportPanel pn=new MdlCasierExportPanel(ffs,editor_.getUi(),editor_.getPanel(),bpreselect); + MdlCasierExportPanel pn=new MdlCasierExportPanel(exporters,editor_.getUi(),editor_.getPanel(),bpreselect); if (pn.afficheModaleOk(editor_.getFrame(), FudaaLib.getS("Export de casiers"))) { // R\xE9cup\xE9ration du modele des casiers a exporter. @@ -70,9 +68,11 @@ flt.setTreatmentOnlyOnSelectedLayers(pn.isExportOnSelectedLayers()); GISDataModel mdCasiers=flt.filter(); + // Exporter et fichier selectionn\xE9s. File f=pn.getFile(); - exporter=ff2Exporter.get(pn.getFileFormat()); + MdlCasierExporter exporter=pn.getSelectedExporter(); + // Export. CtuluIOOperationSynthese synt=exporter.export(f,scn,mdCasiers,pn.getSelection()); editor_.getUi().manageErrorOperationAndIsFatal(synt); } @@ -82,6 +82,10 @@ return CtuluLib.getS("S\xE9lectionner des casiers."); } + /** + * Controle que la selection ne contient que des contours de casiers. + * @return + */ public boolean containsOnlyCasiers() { ZScene scn=editor_.getSupport(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-27 16:54:32
|
Revision: 4589 http://fudaa.svn.sourceforge.net/fudaa/?rev=4589&view=rev Author: bmarchan Date: 2009-03-27 16:54:10 +0000 (Fri, 27 Mar 2009) Log Message: ----------- Tache #215 : Impl?\195?\169mentation d'un algo simple de cr?\195?\169ation de profil. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculator.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/test/org/fudaa/ctulu/interpolation/profile/TestInterpolationProfile.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilRefineAndProj.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java 2009-03-27 15:01:19 UTC (rev 4588) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -36,9 +36,9 @@ void preload(GISAttributeInterface[] _att, ProgressionInterface _prog); /** - * Permet de recuperer le polygone recouvrant si calcule (null sinon). + * Permet de recuperer la boite englobante si calcule (null sinon). * - * @return le polygone recouvrant. Peut etre null si le calcul n'est pas immediat + * @return le boite englobante. Peut etre null si le calcul n'est pas immediat ou pas fait. */ Envelope getEnvelopeInternal(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java 2009-03-27 15:01:19 UTC (rev 4588) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -7,6 +7,7 @@ */ package org.fudaa.ctulu.gis; +import java.util.ArrayList; import java.util.List; import org.fudaa.ctulu.CtuluLibGeometrie; @@ -67,8 +68,147 @@ } return r; } + + /** + * Raffine une sequence entre 2 index par ajouts de points interm\xE9diaires entre 2 points. + * La m\xE9thode utilis\xE9e pour raffiner peut \xEAtre :<p> + * 0 : Suivant un nombre de points a ajouter entre 2 points cons\xE9cutifs.<br> + * 1 : Suivant une distance maximale entre 2 points cons\xE9cutifs.<br> + * 2 : Suivant un nombre maximum total entre les 2 index (sans les 2 index) + * + * @param _seq La s\xE9quence de coordonn\xE9es. + * @param _idxdeb L'indice de d\xE9but de raffinement. + * @param _idxfin L'indice de fin de raffinement. + * @param _meth La m\xE9thode de rafinement. + * @param _nbpts Le nombre de points (entre 2 points - methode 0 - ou maxi - methode 2) + * @param _dstmin La distance maximale. + * @return La nouvelle sequence, ou la m\xEAme si rien n'a \xE9t\xE9 modifi\xE9. + */ + public static CoordinateSequence refine(final CoordinateSequence _seq, int _idxdeb, int _idxfin, int _meth, int _nbpts, double _dstmax) { + if (_idxdeb>=_idxfin) return _seq; + + ArrayList<Coordinate> coords=new ArrayList<Coordinate>(_seq.size()); + for (int i=0; i<_idxdeb; i++) { + coords.add((Coordinate)_seq.getCoordinate(i).clone()); + } + + Coordinate[] cexts=new Coordinate[2]; + + // Methode par nombre de points entre 2. + if (_meth==0) { + for (int i=_idxdeb; i<_idxfin; i++) { + cexts[0]=_seq.getCoordinate(i); + cexts[1]=_seq.getCoordinate(i+1); + Coordinate[] cints=interpolateNCoordinates(cexts,_nbpts); + coords.add((Coordinate)cexts[0].clone()); + for (int j=0; j<cints.length; j++) + coords.add(cints[j]); + } + } + + // Methode par distance maxi entre 2. + else if (_meth==1) { + for (int i=_idxdeb; i<_idxfin; i++) { + double dst=Math.sqrt((_seq.getX(i+1)-_seq.getX(i))*(_seq.getX(i+1)-_seq.getX(i))+ + (_seq.getY(i+1)-_seq.getY(i))*(_seq.getY(i+1)-_seq.getY(i))); + int nbpts=(int)(dst/_dstmax); + if (dst/_dstmax==(int)(dst/_dstmax)) nbpts--; + cexts[0]=_seq.getCoordinate(i); + cexts[1]=_seq.getCoordinate(i+1); + Coordinate[] cints=interpolateNCoordinates(cexts, nbpts); + coords.add((Coordinate)cexts[0].clone()); + for (int j=0; j<cints.length; j++) + coords.add(cints[j]); + } + } + + // Methode par nombre total maxi + else if (_meth==2) { + // Distances entre chaque point cons\xE9cutifs + int[] nbadd=new int[_idxfin-_idxdeb]; + for (int i=_idxdeb; i<_idxfin; i++) { + nbadd[i-_idxdeb]=0; + } + + // Placement des points + int nbpts=_nbpts-(_idxfin-_idxdeb-1); + while (nbpts>0) { + double dstmax=Double.NEGATIVE_INFINITY; + int iadd=0; + for (int i=_idxdeb; i<_idxfin; i++) { + double dst=Math.sqrt((_seq.getX(i+1)-_seq.getX(i))*(_seq.getX(i+1)-_seq.getX(i))+ + (_seq.getY(i+1)-_seq.getY(i))*(_seq.getY(i+1)-_seq.getY(i))); + dst/=(nbadd[i-_idxdeb]+1); + if (dst>dstmax) { + dstmax=dst; + iadd=i-_idxdeb; + } + } + nbadd[iadd]++; + nbpts--; + } + for (int i=_idxdeb; i<_idxfin; i++) { + cexts[0]=_seq.getCoordinate(i); + cexts[1]=_seq.getCoordinate(i+1); + Coordinate[] cints=interpolateNCoordinates(cexts,nbadd[i-_idxdeb]); + coords.add((Coordinate)cexts[0].clone()); + for (int j=0; j<cints.length; j++) + coords.add(cints[j]); + } + } + + for (int i=_idxfin; i<_seq.size(); i++) { + coords.add((Coordinate)_seq.getCoordinate(i).clone()); + } + + return GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(coords.toArray(new Coordinate[0])); + } + /** + * Retourne le tableau des coordonn\xE9es de points r\xE9partis uniform\xE9ments entre 2 points. + * @param _coords Les coordonn\xE9es des 2 points extr\xE9mit\xE9s + * @param _nbpts Le nombre de points a calculer. + * @return Les coordonn\xE9es des points r\xE9partis entre les 2 points extr\xE9mit\xE9s. + */ + public static Coordinate[] interpolateNCoordinates(Coordinate[] _coords, int _nbpts) { + Coordinate[] coords=new Coordinate[_nbpts]; + for (int i=0; i<coords.length; i++) { + Coordinate c=new Coordinate(); + c.x=_coords[0].x+(_coords[1].x-_coords[0].x)*(i+1)/(_nbpts+1.); + c.y=_coords[0].y+(_coords[1].y-_coords[0].y)*(i+1)/(_nbpts+1.); + c.z=_coords[0].z+(_coords[1].z-_coords[0].z)*(i+1)/(_nbpts+1.); + coords[i]=c; + } + + return coords; + } + + /** + * Retourne le tableau des coordonn\xE9es de points r\xE9partis uniform\xE9ments entre 2 points. + * @param _coords Les coordonn\xE9es des 2 points extr\xE9mit\xE9s + * @param _dist La distance entre 2 points. + * @return Les coordonn\xE9es des points r\xE9partis entre les 2 points extr\xE9mit\xE9s. + */ + public static Coordinate[] interpolateCoordinates(Coordinate[] _coords, double _dist) { + double distTot= + Math.sqrt((_coords[1].x-_coords[0].x)*(_coords[1].x-_coords[0].x)+(_coords[1].y-_coords[0].y)*(_coords[1].y-_coords[0].y)); + int nbpts=(int)Math.round(distTot/_dist)-1; + + Coordinate[] coords=new Coordinate[nbpts]; + for (int i=0; i<coords.length; i++) { + Coordinate c=new Coordinate(); + c.x=_coords[0].x+(_coords[1].x-_coords[0].x)*(i+1)*_dist/distTot; + c.y=_coords[0].y+(_coords[1].y-_coords[0].y)*(i+1)*_dist/distTot; + c.z=_coords[0].z+(_coords[1].z-_coords[0].z)*(i+1)*_dist/distTot; + coords[i]=c; + } + + return coords; + } + + + /** * @param _s la ligne a tester * @param _other les lignes * @return true si _s intersecte une des lignes _other Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java 2009-03-27 15:01:19 UTC (rev 4588) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -170,10 +170,10 @@ } /** - * @param _i le nombre attendu de points + * @param _nbObject le nombre attendu de points */ - public GISZoneCollectionPoint(final int _i, final GISZoneListener _l) { - super(_i); + public GISZoneCollectionPoint(final int _nbObject, final GISZoneListener _l) { + super(_nbObject); setListener(_l); } Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilRefineAndProj.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilRefineAndProj.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilRefineAndProj.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -0,0 +1,136 @@ +/* + * @creation 27 Mars 2009 + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ctulu.interpolation.profile; + +import java.util.ArrayList; +import java.util.List; + +import org.fudaa.ctulu.CtuluAnalyze; +import org.fudaa.ctulu.CtuluVariable; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISGeometryFactory; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISPoint; +import org.fudaa.ctulu.gis.GISZoneCollectionPoint; +import org.fudaa.ctulu.interpolation.InterpolationParameters; +import org.fudaa.ctulu.interpolation.InterpolationResultsHolderI; +import org.fudaa.ctulu.interpolation.InterpolationSupportValuesI; +import org.fudaa.ctulu.interpolation.InterpolationTarget; +import org.fudaa.ctulu.interpolation.InterpolationTargetGISAdapter; +import org.fudaa.ctulu.interpolation.SupportLocationI; +import org.fudaa.ctulu.interpolation.bilinear.InterpolatorBilinear; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; + +/** + * Un algorithme de cr\xE9ation d'un profil par rafinement puis projection sur un nuage de points. L'algorithme prend en entr\xE9e + * une trace de profil et un nuage de points. + * L'algo proc\xE8de comme suit:<p> + * <ol> + * <li>Ajout de points sur le profil par rafinement</li> + * <li>Projection sur le nuage de points de ces nouveaux points cr\xE9\xE9s</li> + * <li>Cr\xE9ation des points 3D en retour.</li> + * </ol> + * + * @author Bertrand Marchand + * @version $Id$ + */ +public class InterpolationProfilRefineAndProj { + + /** + * Une classe pour adapter le nuage de points \xE0 un support d'interpolation. + * @author Bertrand Marchand + * @version $Id:$ + */ + class SupportCloudAdapter implements SupportLocationI, InterpolationSupportValuesI { + PointCloudI cloud_; + public SupportCloudAdapter(PointCloudI _cloud) { + cloud_=_cloud; + } + public double getPtX(int _i) { + return cloud_.getX(_i); + } + public double getPtY(int _i) { + return cloud_.getY(_i); + } + public int getPtsNb() { + return cloud_.getNbPoints(); + } + public double getV(CtuluVariable _var, int _i) { + return cloud_.getZ(_i); + } + } + + /** Les points de la trace. */ + private GISPoint[] ptsTrace_; + /** Le nuage de points */ + private PointCloudI cloud_; + + /** + * Instance de l'algorithme. + * @param _ptsTrace + * @param _cloud + */ + public InterpolationProfilRefineAndProj(GISPoint[] _ptsTrace, PointCloudI _cloud) { + ptsTrace_=_ptsTrace; + cloud_=_cloud; + } + + /** + * Lancement de l'algorithme. + * @param _ana L'analyseur du processus. + * @return Les points du profil. Peut retourner null si des erreurs ont \xE9t\xE9 constat\xE9es. + */ + public GISPoint[] process(CtuluAnalyze _ana) { + + // Raffinement \\ + + // Cr\xE9ation des points interm\xE9diaires entre 2 points. Le nombre de points total est d\xE9fini \xE0 30. + Coordinate[] coords=new Coordinate[ptsTrace_.length]; + for (int i=0; i<ptsTrace_.length; i++) + coords[i]=ptsTrace_[i].getCoordinate(); + CoordinateSequence seq=GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(coords); + seq=GISLib.refine(seq, 0, ptsTrace_.length-1, 2, 28, 0); + + // Interpolation \\ + + // Cr\xE9ation de la cible d'interpolation (les points du profil) + GISZoneCollectionPoint zpts=new GISZoneCollectionPoint(seq.size(),null); + for (int i=0; i<seq.size(); i++) + zpts.addGeometry(GISGeometryFactory.INSTANCE.createPoint(seq.getCoordinate(i)),null,null); + InterpolationTarget target=new InterpolationTargetGISAdapter(zpts); + + // Cr\xE9ation du support (nuage de points) + SupportCloudAdapter support=new SupportCloudAdapter(cloud_); + + // Cr\xE9ation des variables a interpoler (BATHY et c'est tout) + List<GISAttributeInterface> vars=new ArrayList<GISAttributeInterface>(); + vars.add(GISAttributeConstants.BATHY); + + // Interpolation + InterpolationParameters params=new InterpolationParameters(vars,target,support); + InterpolatorBilinear interp=new InterpolatorBilinear(support); + interp.interpolate(params); + + // Erreurs => On ne va pas plus loin + _ana.merge(params.getAnalyze()); + if (_ana.containsErrors()) + return null; + + // R\xE9cup\xE9ration des r\xE9sultats, et transfert aux Z des points profils. + GISPoint[] pts=new GISPoint[seq.size()]; + InterpolationResultsHolderI res=params.getResults(); + for (int i=0; i<seq.size(); i++) { + pts[i]=((GISPoint)zpts.getGeometry(i)); + pts[i].setZ(res.getValuesForPt(i)[0]); + } + + return pts; + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilRefineAndProj.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculator.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculator.java 2009-03-27 15:01:19 UTC (rev 4588) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculator.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -6,6 +6,7 @@ */ package org.fudaa.ctulu.interpolation.profile ; +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.CtuluLibGeometrie; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; @@ -125,16 +126,21 @@ * Calcul du profil \xE0 partir du nuage de points. * NB : on impose de fournir la fen\xEAtre pour \xEAtre s\xFBr d'avoir un rectangle * @param _algo : flag de la m\xE9thode \xE0 utiliser + * @param _ana La trace d'ex\xE9cution (pamaretre de sortie). + * @return Les points, ou null s'il y a eu une erreur lors de l'ex\xE9cution * * TODO : A r\xE9implementer. */ - public GISPoint[] extractProfile(int _algo) { + public GISPoint[] extractProfile(int _algo, CtuluAnalyze _ana) { FuLog.debug("CTU:Cloud Nb points="+cloud_.getNbPoints()); FuLog.debug("CTU:Fenetre selection Nb points="+window_.select(cloud_).getNbPoints()); if(_algo==0) return new InterpolationProfilTest(ptsTrace_, cloud_).process(); else if (_algo==1) { + return new InterpolationProfilRefineAndProj(ptsTrace_, cloud_).process(_ana); + } + else if (_algo==2) { // Un algo tout a fait basique double x; double y; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/test/org/fudaa/ctulu/interpolation/profile/TestInterpolationProfile.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/test/org/fudaa/ctulu/interpolation/profile/TestInterpolationProfile.java 2009-03-27 15:01:19 UTC (rev 4588) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/test/org/fudaa/ctulu/interpolation/profile/TestInterpolationProfile.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -7,13 +7,14 @@ */ package org.fudaa.ctulu.interpolation.profile; +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISPoint; /** * Test de l'interpolateur de profil. A partir d'un nuage de points et d'une trace 2D. * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ public class TestInterpolationProfile { @@ -93,10 +94,11 @@ System.out.println("Pt "+i+": X="+trace[i].getX()+" Y="+trace[i].getY()+" Z="+trace[i].getZ()); } pc.setTrace(trace); - prof=pc.extractProfile(0); + prof=pc.extractProfile(0,new CtuluAnalyze()); + System.out.println("* Profil obtenu:"); for (int i=0; i<prof.length; i++) { - System.out.println("Pt "+i+": X="+prof[i].getX()+" Y="+prof[i].getX()+" Z="+prof[i].getZ()); + System.out.println("Pt "+i+": X="+prof[i].getX()+" Y="+prof[i].getY()+" Z="+prof[i].getZ()); } // Extraction pour une trace calcul\xE9e. @@ -107,10 +109,10 @@ for (int i=0; i<trace.length; i++) { System.out.println("Pt "+i+": X="+trace[i].getX()+" Y="+trace[i].getY()+" Z="+trace[i].getZ()); } - prof=pc.extractProfile(0); + prof=pc.extractProfile(1,new CtuluAnalyze()); System.out.println("* Profil obtenu:"); for (int i=0; i<prof.length; i++) { - System.out.println("Pt "+i+": X="+prof[i].getX()+" Y="+prof[i].getX()+" Z="+prof[i].getZ()); + System.out.println("Pt "+i+": X="+prof[i].getX()+" Y="+prof[i].getY()+" Z="+prof[i].getZ()); } } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-03-27 15:01:19 UTC (rev 4588) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -13,6 +13,7 @@ import java.util.List; import java.util.Map; +import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelection; @@ -292,7 +293,7 @@ if (pnDecimation_==null) pnDecimation_=new MdlDecimationPanel(); - CtuluCommandComposite cmd=new CtuluCommandComposite(FudaaLib.getS("D\xE9cimer")); + CtuluCommandComposite cmp=new CtuluCommandComposite(FudaaLib.getS("D\xE9cimer")); String title; if (getScene().isAtomicMode()) @@ -323,14 +324,14 @@ if (mdld instanceof MdlModel2dLine) { MdlModel2dLine mdl=(MdlModel2dLine)mdld; mdl.decimate(getScene().sceneId2LayerId(idxGeom), idxdeb, idxfin, pnDecimation_.isNbPtsGiven() ? 0:1, pnDecimation_ - .getNbPts(), pnDecimation_.getDistance(), cmd); + .getNbPts(), pnDecimation_.getDistance(), cmp); } } } getScene().clearSelection(); if(getMng()!=null) - getMng().addCmd(cmd.getSimplify()); + getMng().addCmd(cmp.getSimplify()); } /** @@ -442,7 +443,7 @@ * Rend rectiligne une polyligne. */ public void linearisePolyligne() { - CtuluCommandComposite cmd=new CtuluCommandComposite(FudaaLib.getS("Rendre rectiligne des polylignes")); + CtuluCommandComposite cmp=new CtuluCommandComposite(FudaaLib.getS("Rendre rectiligne des polylignes")); int[] idxGeoms=getScene().getSelectionHelper().getSelectedIndexes(); // Verification de la selection \\ boolean selectionValid=true; @@ -458,14 +459,14 @@ GISZoneCollectionLigneBrisee zone=(GISZoneCollectionLigneBrisee) ((ZModeleEditable)calque.modeleDonnees()).getGeomData(); if (getScene().isAtomicMode()&&getScene().getLayerSelectionMulti().getSelection(idxGeom).getNbSelectedIndex()>1) - LibUtils.linearisePolyligne(zone, idx, getScene().getLayerSelectionMulti().getSelection(idxGeom).getSelectedIndex(), cmd); + LibUtils.linearisePolyligne(zone, idx, getScene().getLayerSelectionMulti().getSelection(idxGeom).getSelectedIndex(), cmp); else - LibUtils.linearisePolyligne(zone, idx, new int[]{0, polyligne.getNumPoints()-1}, cmd); + LibUtils.linearisePolyligne(zone, idx, new int[]{0, polyligne.getNumPoints()-1}, cmp); } } // Mise \xE0 jour du undo/redo if(mng_!=null) - mng_.addCmd(cmd.getSimplify()); + mng_.addCmd(cmp.getSimplify()); // Suppression de la selection getScene().clearSelection(); } @@ -475,27 +476,24 @@ */ public void interpolateProfile() { MdlInterpolateProfilePanel pnInterpolateProfile=new MdlInterpolateProfilePanel(pn_); - if (pnInterpolateProfile.afficheModaleOk(pn_.getFrame(), FudaaLib.getS("Interpolation d'un profil"))&&pnInterpolateProfile.getCalqueProfileDestination()!=null) { + if (pnInterpolateProfile.afficheModaleOk(pn_.getFrame(), FudaaLib.getS("Cr\xE9ation d'un profil"))&&pnInterpolateProfile.getCalqueProfileDestination()!=null) { + CtuluCommandComposite cmp=new CtuluCommandComposite(FudaaLib.getS("Cr\xE9er un profil \xE0 partir d'une trace")); + GISDataModel mdl=pnInterpolateProfile.getSupportCollection(); - InterpolationSupportGISAdapter support=new InterpolationSupportGISAdapter(mdl); ProfileCalculator calculator=new ProfileCalculator(); - // Configuration du calculator \\ - // Cr\xE9ation de la fen\xEAtre contenant les points - double xMin=support.getPtX(0); - double xMax=support.getPtX(0); - double yMin=support.getPtY(0); - double yMax=support.getPtY(0); - for(int i=1;i<support.getPtsNb();i++){ - if(support.getPtX(i)<xMin) - xMin=support.getPtX(i); - else if(support.getPtX(i)>xMax) - xMax=support.getPtX(i); - if(support.getPtY(i)<yMin) - yMin=support.getPtY(i); - else if(support.getPtY(i)>yMax) - yMax=support.getPtY(i); - } - calculator.setWindow(new ProfileCalculatorWindow(new GISPoint[]{new GISPoint(xMin, yMin, 0), new GISPoint(xMin, yMax, 0), new GISPoint(xMax, yMax, 0), new GISPoint(xMax, yMin, 0)})); + + // La fenetre + double xmin=mdl.getEnvelopeInternal().getMinX(); + double xmax=mdl.getEnvelopeInternal().getMaxX(); + double ymin=mdl.getEnvelopeInternal().getMinY(); + double ymax=mdl.getEnvelopeInternal().getMaxY(); + calculator.setWindow(new ProfileCalculatorWindow(new GISPoint[]{ + new GISPoint(xmin, ymin, 0), + new GISPoint(xmin, ymax, 0), + new GISPoint(xmax, ymax, 0), + new GISPoint(xmax, ymin, 0) + })); + // R\xE9cup\xE9ration des points de la trace du profil int idGeom=scene_.getSelectionHelper().getUniqueSelectedIdx(); if(idGeom==-1||!(scene_.getObject(idGeom) instanceof Geometry)){ @@ -507,6 +505,7 @@ for(int i=0;i<coords.length;i++) points[i]=new GISPoint(coords[i]); calculator.setTrace(points); + // Configuration du nuage de point GISAttributeInterface[] attrs=new GISAttributeInterface[mdl.getNbAttributes()]; for(int i=0;i<mdl.getNbAttributes();i++) @@ -521,8 +520,15 @@ if(mdl.getGeometry(i) instanceof GISMultiPoint) idxMultiPoint[j++]=i; calculator.setCloud(new GISDataModelToPointCloudAdapter(mdl, GISAttributeConstants.BATHY)); - // Utilisation de l'interpolateur de profil - GISPoint[] profil=calculator.extractProfile(0); + + // Interpolateur de profil + CtuluAnalyze ana=new CtuluAnalyze(); + GISPoint[] profil=calculator.extractProfile(1,ana); + if (ana.containsErrors()) { + ui_.manageAnalyzeAndIsFatal(ana); + return; + } + // Ajout du r\xE9sultat dans le calque cible GISZoneCollection zone=((ZModeleGeometry)pnInterpolateProfile.getCalqueProfileDestination().modeleDonnees()).getGeomData(); coords=new Coordinate[profil.length]; @@ -536,7 +542,12 @@ for(int i=0;i<coords.length;i++) ((Object[])data[idxZattr])[i]=profil[i].getZ(); } - ((ZModeleGeometry)pnInterpolateProfile.getCalqueProfileDestination().modeleDonnees()).getGeomData().addGeometry(poly, data, mng_); + ((ZModeleGeometry)pnInterpolateProfile.getCalqueProfileDestination().modeleDonnees()).getGeomData().addGeometry(poly, data, cmp); + + if (mng_!=null) + mng_.addCmd(cmp.getSimplify()); + + ui_.manageAnalyzeAndIsFatal(ana); } } @@ -573,7 +584,7 @@ if (ui_.manageAnalyzeAndIsFatal(params.getAnalyze())) return; - final CtuluCommandComposite cmp = new CtuluCommandComposite(); + final CtuluCommandComposite cmp = new CtuluCommandComposite(FudaaLib.getS("Projection sur des semis")); // Transfert du Z sur les sommets concern\xE9s. int ipt=0; @@ -625,14 +636,14 @@ * Inverse le sens de la polyligne. */ public void invertOrientationSelectedGeometries() { - CtuluCommandComposite cmd=new CtuluCommandComposite(FudaaLib.getS("Inversion de l'orientation")); + CtuluCommandComposite cmp=new CtuluCommandComposite(FudaaLib.getS("Inversion de l'orientation")); int[] geoms=getScene().getSelectionHelper().getSelectedIndexes(); for (int i=0; i<geoms.length; i++) { ZModeleDonnees mdld=getScene().getLayerForId(geoms[i]).modeleDonnees(); if (mdld instanceof MdlModel2dLine) - ((MdlModel2dLine)mdld).invertOrientation(getScene().sceneId2LayerId(geoms[i]), cmd); + ((MdlModel2dLine)mdld).invertOrientation(getScene().sceneId2LayerId(geoms[i]), cmp); } if (getMng()!=null) - getMng().addCmd(cmd.getSimplify()); + getMng().addCmd(cmp.getSimplify()); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2009-03-27 15:01:19 UTC (rev 4588) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2009-03-27 16:54:10 UTC (rev 4589) @@ -9,8 +9,6 @@ import gnu.trove.TIntArrayList; -import java.util.ArrayList; - import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelection; @@ -18,6 +16,7 @@ import org.fudaa.ctulu.CtuluNamedCommand; import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISGeometryFactory; +import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; import org.fudaa.ebli.calque.ZModelGeometryListener; @@ -95,51 +94,6 @@ } /** - * Retourne le tableau des coordonn\xE9es de points r\xE9partis uniform\xE9ments entre 2 points. - * @param _coords Les coordonn\xE9es des 2 points extr\xE9mit\xE9s - * @param _nbpts La distance entre 2 points. - * @return Les coordonn\xE9es des points r\xE9partis entre les 2 points extr\xE9mit\xE9s. - */ - private Coordinate[] interpolateCoordinates(Coordinate[] _coords, double _dist) { - double distTot= - Math.sqrt((_coords[1].x-_coords[0].x)*(_coords[1].x-_coords[0].x)+(_coords[1].y-_coords[0].y)*(_coords[1].y-_coords[0].y)); - int nbpts=(int)Math.round(distTot/_dist)-1; - - Coordinate[] coords=new Coordinate[nbpts]; - for (int i=0; i<coords.length; i++) { - Coordinate c=new Coordinate(); - c.x=_coords[0].x+(_coords[1].x-_coords[0].x)*(i+1)*_dist/distTot; - c.y=_coords[0].y+(_coords[1].y-_coords[0].y)*(i+1)*_dist/distTot; - c.z=_coords[0].z+(_coords[1].z-_coords[0].z)*(i+1)*_dist/distTot; - coords[i]=c; - } - - return coords; - } - - /** - * Retourne le tableau des coordonn\xE9es de points r\xE9partis uniform\xE9ments entre 2 points. - * @param _coords Les coordonn\xE9es des 2 points extr\xE9mit\xE9s - * @param _nbpts Le nombre de points a calculer. - * @return Les coordonn\xE9es des points r\xE9partis entre les 2 points extr\xE9mit\xE9s. - */ - private Coordinate[] interpolateNCoordinates(Coordinate[] _coords, int _nbpts) { - double distTot= - Math.sqrt((_coords[1].x-_coords[0].x)*(_coords[1].x-_coords[0].x)+(_coords[1].y-_coords[0].y)*(_coords[1].y-_coords[0].y)); - - Coordinate[] coords=new Coordinate[_nbpts]; - for (int i=0; i<coords.length; i++) { - Coordinate c=new Coordinate(); - c.x=_coords[0].x+(_coords[1].x-_coords[0].x)*(i+1)/(_nbpts+1.); - c.y=_coords[0].y+(_coords[1].y-_coords[0].y)*(i+1)/(_nbpts+1.); - c.z=_coords[0].z+(_coords[1].z-_coords[0].z)*(i+1)/(_nbpts+1.); - coords[i]=c; - } - - return coords; - } - - /** * Decime une ligne. La m\xE9thode utilis\xE9e pour d\xE9cimer peut \xEAtre :<p> * 0 : Suivant un nombre de points a supprimer entre 2 points conserv\xE9s.<br> * 1 : Suivant une distance minimale. @@ -208,47 +162,9 @@ */ public boolean refine(int _idxGeom, int _idxdeb,int _idxfin,int _meth,int _nbpts, double _dstmax, CtuluCommandContainer _cmd) { LineString geom=(LineString)getGeomData().getGeometry(_idxGeom); - CoordinateSequence seq=geom.getCoordinateSequence(); + CoordinateSequence seq=GISLib.refine(geom.getCoordinateSequence(), _idxdeb, _idxfin, _meth, _nbpts, _dstmax); - ArrayList coords=new ArrayList(seq.size()); - - for (int i=0; i<_idxdeb; i++) { - coords.add(seq.getCoordinate(i).clone()); - } - - Coordinate[] cexts=new Coordinate[2]; - // Methode par nombre de points. - if (_meth==0) { - for (int i=_idxdeb; i<_idxfin; i++) { - cexts[0]=seq.getCoordinate(i); - cexts[1]=seq.getCoordinate(i+1); - Coordinate[] cints=interpolateNCoordinates(cexts,_nbpts); - coords.add(cexts[0].clone()); - for (int j=0; j<cints.length; j++) - coords.add(cints[j]); - } - } - // Methode par distance maxi. - else if (_meth==1) { - for (int i=_idxdeb; i<_idxfin; i++) { - double dst=Math.sqrt((seq.getX(i+1)-seq.getX(i))*(seq.getX(i+1)-seq.getX(i))+ - (seq.getY(i+1)-seq.getY(i))*(seq.getY(i+1)-seq.getY(i))); - int nbpts=(int)(dst/_dstmax); - if (dst/_dstmax==(int)(dst/_dstmax)) nbpts--; - cexts[0]=seq.getCoordinate(i); - cexts[1]=seq.getCoordinate(i+1); - Coordinate[] cints=interpolateNCoordinates(cexts, nbpts); - coords.add(cexts[0].clone()); - for (int j=0; j<cints.length; j++) - coords.add(cints[j]); - } - } - - for (int i=_idxfin; i<seq.size(); i++) { - coords.add(seq.getCoordinate(i).clone()); - } - - GISPolyligne newgeom=(GISPolyligne)GISGeometryFactory.INSTANCE.createLineString((Coordinate[])coords.toArray(new Coordinate[0])); + GISPolyligne newgeom=(GISPolyligne)GISGeometryFactory.INSTANCE.createLineString(seq); CtuluCommandComposite cmd=new CtuluCommandComposite(); getGeomData().setGeometry(_idxGeom, newgeom, cmd); setGeomModif(_idxGeom, cmd); // Modification de l'etat de la g\xE9om\xE9trie This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-03-29 15:52:15
|
Revision: 4592 http://fudaa.svn.sourceforge.net/fudaa/?rev=4592&view=rev Author: bmarchan Date: 2009-03-29 15:52:05 +0000 (Sun, 29 Mar 2009) Log Message: ----------- Un peu de doc technique... Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/LibUtils.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/Mdl.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportTreeModel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImportStepDestination.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/package.html branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/package.html Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCutCopyPasteManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlZDialog.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/package.html branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/package.html branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/package.html branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/package.html branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/package.html branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/package.html Removed Paths: ------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/CutCopyPasteManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/ZDialog.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -15,8 +15,9 @@ /** - * Une g\xE9om\xE9trie polygone. Un polygone est une polyligne ferm\xE9e. Son premier et sont dernier point sont identiques. - * Le nombre de points doit \xEAtre >= 4. + * Une g\xE9om\xE9trie polygone. Un polygone est une polyligne ferm\xE9e. Au sens Fudaa, sa premi\xE8re et sa derni\xE8re coordonn\xE9es sont + * identiques. Si un polygone est pour l'utilisateur constitu\xE9 de 4 points, son nombre de coordonn\xE9es sera en r\xE9alit\xE9 de 5. + * Le nombre de coordonn\xE9es du polygone doit \xEAtre au minimum de 4. * @author Fred Deniger * @version $Id$ */ Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/CutCopyPasteManager.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/CutCopyPasteManager.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/CutCopyPasteManager.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -1,309 +0,0 @@ -/* - * @creation 21 janv. 2009 - * @modification $Date:$ - * @license GNU General Public License 2 - * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.fudaa.modeleur; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.swing.event.InternalFrameAdapter; -import javax.swing.event.InternalFrameEvent; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; - -import org.fudaa.ctulu.CtuluCommandComposite; -import org.fudaa.ctulu.gis.GISAttributeInterface; -import org.fudaa.ctulu.gis.GISAttributeModel; -import org.fudaa.ctulu.gis.GISCoordinateSequenceFactory; -import org.fudaa.ctulu.gis.GISGeometryFactory; -import org.fudaa.ctulu.gis.GISLib; -import org.fudaa.ctulu.gis.GISZoneCollection; -import org.fudaa.ebli.calque.ZModeleGeometry; -import org.fudaa.ebli.calque.ZScene; -import org.fudaa.ebli.calque.ZSelectionEvent; -import org.fudaa.ebli.calque.ZSelectionListener; -import org.fudaa.ebli.calque.dessin.DeForme; -import org.fudaa.ebli.calque.edition.ZCalqueEditable; -import org.fudaa.ebli.calque.edition.ZModeleEditable; -import org.fudaa.ebli.commun.EbliActionInterface; -import org.fudaa.ebli.commun.EbliActionMap; -import org.fudaa.fudaa.commun.FudaaLib; -import org.fudaa.fudaa.modeleur.layer.MdlModel2dLine; -import org.fudaa.fudaa.modeleur.layer.MdlModel2dMultiPoint; - -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.CoordinateSequence; -import com.vividsolutions.jts.geom.Geometry; - -/** - * G\xE8re les fonctions de couper/coller/copier de la fen\xEAtre 2d. - * - * @author Emmanuel MARTIN - * @version $Id$ - */ -public class CutCopyPasteManager { - /** La fen\xEAtre 2d \xE0 g\xE9rer. */ - protected MdlFille2d mdlFille2d_; - /** La sc\xE8ne permettant l'acc\xE8s sur les g\xE9om\xE9tries et les selections. */ - protected ZScene zScene_; - /** L'editeur de sc\xE8ne contenant les m\xE9thodes pour le d\xE9placement des g\xE9om\xE9tries. */ - protected MdlSceneEditor zSceneEditor_; - /** Copy action interface */ - protected EbliActionInterface copyAction_; - /** Cut action interface */ - protected EbliActionInterface cutAction_; - /** Paste action interface */ - protected EbliActionInterface pasteAction_; - /** Les mod\xE8les contennant les g\xE9om\xE9tries en cours de copy. */ - protected List<ZModeleGeometry> models_=new ArrayList<ZModeleGeometry>(); - /** Les points selectionn\xE9s pour la copy en mode sommet. */ - protected List<Coordinate> coordinates_=new ArrayList<Coordinate>(); - // Les gestionnaires d'\xE9v\xE9nements \\ - protected EventFrameManager eventManager1_; - protected EventSelectedGeometriesManager eventManager2_; - protected EventSelectedCalquesManager eventManager3_; - - /** - * Mise \xE0 jour correcte de bouton copier/coller/couper lors des diff\xE9rente - * manipulation de la fen\xEAtre. - */ - protected class EventFrameManager extends InternalFrameAdapter { - public boolean disablePaste_=false; - public boolean disableCopy_=false; - public boolean disableCut_=false; - - public void internalFrameActivated(InternalFrameEvent e) { - disablePaste_=false; - disableCopy_=false; - disableCut_=false; - updateButtons(); - } - - public void internalFrameDeactivated(InternalFrameEvent e) { - disablePaste_=true; - disableCopy_=true; - disableCut_=true; - updateButtons(); - } - } - - /** - * Mise \xE0 jour des boutons en fonction de la selection qui est faite dans les - * calques. - */ - protected class EventSelectedGeometriesManager implements ZSelectionListener { - public boolean disablePaste_=false; - public boolean disableCopy_=false; - public boolean disableCut_=false; - - public void selectionChanged(ZSelectionEvent _evt) { - disableCopy_=zScene_.isSelectionEmpty(); - disableCut_=zScene_.isSelectionEmpty()||zScene_.isAtomicMode(); - updateButtons(); - } - } - - /** - * Mise \xE0 jour de du bouton 'coller' en fonction du calque selectionn\xE9 dans - * l'arbre des calques. - */ - protected class EventSelectedCalquesManager implements TreeSelectionListener { - public boolean disablePaste_=false; - public boolean disableCopy_=false; - public boolean disableCut_=false; - - public void valueChanged(TreeSelectionEvent e) { - disableCut_=!(mdlFille2d_.getArbreCalqueModel().getSelectedCalque() instanceof ZCalqueEditable); - disablePaste_=!(mdlFille2d_.getArbreCalqueModel().getSelectedCalque() instanceof ZCalqueEditable); - updateButtons(); - } - } - - public CutCopyPasteManager(MdlFille2d _mdlFille2d, MdlSceneEditor _zSceneEditor) { - mdlFille2d_=_mdlFille2d; - zScene_=_zSceneEditor.getScene(); - zSceneEditor_=_zSceneEditor; - copyAction_=EbliActionMap.getInstance().getAction("COPIER"); - cutAction_=EbliActionMap.getInstance().getAction("COUPER"); - pasteAction_=EbliActionMap.getInstance().getAction("COLLER"); - // Verification de la pr\xE9sence des actions - if (copyAction_==null||cutAction_==null||pasteAction_==null) - throw new IllegalArgumentException(FudaaLib - .getS("Les actions n\xE9c\xE9ssaire aux fonctionnalit\xE9s de couper/copier/coller n'ont pas \xE9t\xE9 trouv\xE9s.")); - // Mise en place des diff\xE9rentes \xE9coutes - eventManager1_=new EventFrameManager(); - eventManager2_=new EventSelectedGeometriesManager(); - eventManager3_=new EventSelectedCalquesManager(); - mdlFille2d_.addInternalFrameListener(eventManager1_); - zScene_.addSelectionListener(eventManager2_); - mdlFille2d_.getArbreCalqueModel().addTreeSelectionListener(eventManager3_); - // Initialisation des valeurs de blockage des boutons. - eventManager2_.selectionChanged(null); - eventManager3_.valueChanged(null); - } - - /** - * Active les boutons qui doivent l'\xEAtre. - */ - protected void updateButtons() { - copyAction_.setEnabled(!eventManager1_.disableCopy_&&!eventManager2_.disableCopy_&&!eventManager3_.disableCopy_); - pasteAction_.setEnabled((models_.size()>0||coordinates_.size()>0)&&!eventManager1_.disablePaste_&&!eventManager2_.disablePaste_&&!eventManager3_.disablePaste_); - cutAction_.setEnabled(!eventManager1_.disableCut_&&!eventManager2_.disableCut_&&!eventManager3_.disableCut_); - } - - public void copy() { - models_.clear(); - coordinates_.clear(); - if (zScene_.isAtomicMode()) { - // Copy en mode atomic \\ - int[] idxScene=zScene_.getLayerSelectionMulti().getIdxSelected(); - if (idxScene!=null) { - for(int i=0;i<idxScene.length;i++) { - int idx=zScene_.sceneId2LayerId(idxScene[i]); - // Extraction des informations sur la zone - GISZoneCollection zone=((ZModeleEditable) zScene_.getLayerForId(idxScene[i]).modeleDonnees()).getGeomData(); - GISAttributeInterface attrZ=zone.getAttributeIsZ(); - int idxAttrZ=-1; - if(attrZ!=null) - idxAttrZ=zone.getIndiceOf(zone.getAttributeIsZ()); - // La g\xE9om\xE9trie \xE0 traiter - CoordinateSequence seqGeom=zone.getCoordinateSequence(idx); - int[] selectedIdx=zScene_.getLayerSelectionMulti().getSelection(idxScene[i]).getSelectedIndex(); - // Extraction des coordonn\xE9es - for(int j=0;j<selectedIdx.length;j++) { - Coordinate coord=seqGeom.getCoordinate(selectedIdx[j]); - if(attrZ!=null) { - if(attrZ.isAtomicValue()) - coord.z=(Double) ((GISAttributeModel) zone.getValue(idxAttrZ, idx)).getObjectValueAt(selectedIdx[j]); - else - coord.z=(Double) zone.getValue(idxAttrZ,idx); - } - coordinates_.add(coord); - } - } - } - } - else { - // Copy en mode global \\ - int[] idxScene=zScene_.getLayerSelection().getSelectedIndex(); - if (idxScene!=null) { - // Tri des g\xE9om\xE9tries en fonction de leur calque d'origine - Map<ZCalqueEditable, List<Integer>> selectedGeom=new HashMap<ZCalqueEditable, List<Integer>>(); - for (int i=0; i<idxScene.length; i++) { - ZCalqueEditable calque=(ZCalqueEditable)zScene_.getLayerForId(idxScene[i]); - if (!selectedGeom.containsKey(calque)) - selectedGeom.put(calque, new ArrayList<Integer>()); - selectedGeom.get(calque).add(zScene_.sceneId2LayerId(idxScene[i])); - } - // Cr\xE9ation des mod\xE8les de cache - for (Map.Entry<ZCalqueEditable, List<Integer>> entry : selectedGeom.entrySet()) { - // Cr\xE9ation du mod\xE8le - ZModeleEditable modelSource=entry.getKey().getModelEditable(); - ZModeleEditable modelCache=null; - if (modelSource instanceof MdlModel2dMultiPoint) - modelCache=new MdlModel2dMultiPoint(null); - else if (modelSource instanceof MdlModel2dLine) - modelCache=new MdlModel2dLine(null); - modelCache.getGeomData().setAttributes(modelSource.getGeomData().getAttributes(), null); - // Remplissage du mod\xE8le - for (int i=0; i<entry.getValue().size(); i++) { - int idxGeom=entry.getValue().get(i); - Geometry geom=modelSource.getGeomData().getGeometry(idxGeom); - GISAttributeModel[] models=modelSource.getGeomData().getModels(); - Object[] data=new Object[models.length]; - for (int j=0; j<data.length; j++) - data[j]=models[j].getObjectValueAt(idxGeom); - modelCache.getGeomData().addGeometry(geom, data, null); - } - // Ajout du mod\xE8le de cache - models_.add(modelCache); - } - } - } - updateButtons(); - } - - public void cut() { - copy(); - zSceneEditor_.removeSelectedObjects(mdlFille2d_.getCmdMng()); - } - - public void paste() { - try { - CtuluCommandComposite cmd; - // Collage de g\xE9om\xE9trie - if (models_.size()>0) { - cmd=new CtuluCommandComposite(FudaaLib.getS("Coller des g\xE9om\xE9tries")); - for (int i=0; i<models_.size(); i++) { - int[] idxSource=new int[models_.get(i).getNombre()]; - for (int j=0; j<idxSource.length; j++) - idxSource[j]=j; - zSceneEditor_.moveGeometries(models_.get(i), idxSource, (ZCalqueEditable)zScene_.getCalqueActif(), cmd); - } - } - // Collage de points - else { - cmd=new CtuluCommandComposite(FudaaLib.getS("Coller des sommets")); - ZCalqueEditable calque=((ZCalqueEditable)zScene_.getCalqueActif()); - ZModeleEditable modele=(ZModeleEditable)calque.modeleDonnees(); - GISZoneCollection zone=modele.getGeomData(); - GISAttributeInterface attrZ=zone.getAttributeIsZ(); - int idxAttrZ=-1; - if (attrZ!=null) - idxAttrZ=zone.getIndiceOf(attrZ); - // Cr\xE9ation de la g\xE9om\xE9trie - CoordinateSequence coordSeq=new GISCoordinateSequenceFactory().create(coordinates_.toArray(new Coordinate[0])); - Geometry geom=null; - if (modele instanceof MdlModel2dMultiPoint) - geom=GISGeometryFactory.INSTANCE.createMultiPoint(coordSeq); - else if (modele instanceof MdlModel2dLine) { - boolean isFerme=coordSeq.getCoordinate(0).equals(coordSeq.getCoordinate(coordSeq.size()-1)); - if ((calque.canAddForme(DeForme.LIGNE_BRISEE)&&!isFerme)||!calque.canAddForme(DeForme.POLYGONE)) { - if (coordSeq.size()<2) - throw new IllegalArgumentException(FudaaLib.getS("Il faut au moins deux points pour coller en temps que polyligne.")); - geom=GISLib.toPolyligne(coordSeq); - } - else { - if (coordSeq.size()<2) - throw new IllegalArgumentException(FudaaLib.getS("Il faut au moins trois points pour coller en temps que polygone.")); - geom=GISLib.toPolygone(coordSeq); - } - } - // Cr\xE9ation de l'attribut z - Object[] data=new Object[zone.getNbAttributes()]; - if (attrZ!=null) - if (attrZ.isAtomicValue()) { - data[idxAttrZ]=new Double[coordSeq.size()]; - for (int i=0; i<coordSeq.size(); i++) - ((Double[])data[idxAttrZ])[i]=new Double(coordSeq.getOrdinate(i, 2)); - } - else { - boolean allSame=true; - int i=0; - while (allSame&&++i<coordSeq.size()) - allSame=coordSeq.getOrdinate(i-1, 2)==coordSeq.getOrdinate(i, 2); - if (allSame) - data[idxAttrZ]=coordSeq.getOrdinate(0, 2); - else { - ZDialog dialog =new ZDialog(mdlFille2d_.getVisuPanel().getEditor().getFrame(), FudaaLib.getS("Choisissez un Z")); - dialog.setVisible(true); - data[idxAttrZ]=dialog.getValue(); - } - } - // Ajout de la g\xE9om\xE9trie - zone.addGeometry(geom, data, cmd); - } - if (mdlFille2d_.getCmdMng()!=null) - mdlFille2d_.getCmdMng().addCmd(cmd.getSimplify()); - } - catch (IllegalArgumentException _exp) { - mdlFille2d_.getVisuPanel().getController().getUI().error(_exp.getMessage()); - } - } -} Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/LibUtils.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/LibUtils.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/LibUtils.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -25,15 +25,14 @@ import com.vividsolutions.jts.geom.Coordinate; /** - * Quelques m\xE9thodes utiles et ind\xE9dendantes. + * Quelques m\xE9thodes utiles et ind\xE9pendantes. * @author Emmanuel MARTIN * @version $Id$ */ public class LibUtils { /** - * Rend rectiligne un morceau d'une polyligne. - * _idxPoints doit contenir au moins deux index de point. + * Rend rectiligne tout ou partie d'une polyligne.<p> * * Si plus de deux points sont selectionn\xE9s dans la g\xE9om\xE9trie (exemple idx : * 0, 3 et 4), on iterre sur les points selectionn\xE9s deux \xE0 deux (donc 0 et 3 @@ -41,8 +40,12 @@ * points dont les indices sont entre les deux trait\xE9s (premi\xE8re it\xE9ration : * projection du point 2, aucun pour la seconde). si la projection d'un point * n'appartient pas au segment, il est ignor\xE9. + * + * @param _zone La zone contenant la ligne a lin\xE9ariser + * @param _idxGeom L'index de la ligne dans la zone. + * @param _idxPoints Les sommets entre lequels lin\xE9ariser. Doit contenir au moins deux index de point. + * @param _cmd Le manager de commande. */ - @SuppressWarnings("unchecked") static public void linearisePolyligne(GISZoneCollectionLigneBrisee _zone, int _idxGeom, int[] _idxPoints, CtuluCommandContainer _cmd) { if(_zone==null||_idxPoints==null) throw new IllegalArgumentException("_zone et _idxPoints ne doivent pas \xEAtre null."); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/Mdl.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/Mdl.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/Mdl.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -19,13 +19,17 @@ import org.fudaa.fudaa.ressource.FudaaResource; /** - * Fudaa-Modeleur : Lancement de l'application. + * Le programme pricipal de lancement de l'application Fudaa-Modeleur * @author fred deniger * @version $Id: Mdl.java,v 1.1.2.1 2008/01/15 14:00:29 bmarchan Exp $ */ public final class Mdl { private Mdl() {} + /** + * Lancement de l'application Fudaa Modeleur + * @param _args Les param\xE8tres de lancement. + */ public static void main(String[] _args) { BuResource.BU.setIconFamily("crystal"); Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCutCopyPasteManager.java (from rev 4518, branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/CutCopyPasteManager.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCutCopyPasteManager.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCutCopyPasteManager.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,325 @@ +/* + * @creation 21 janv. 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; + +import org.fudaa.ctulu.CtuluCommandComposite; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISAttributeModel; +import org.fudaa.ctulu.gis.GISCoordinateSequenceFactory; +import org.fudaa.ctulu.gis.GISGeometryFactory; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZSelectionEvent; +import org.fudaa.ebli.calque.ZSelectionListener; +import org.fudaa.ebli.calque.dessin.DeForme; +import org.fudaa.ebli.calque.edition.ZCalqueEditable; +import org.fudaa.ebli.calque.edition.ZModeleEditable; +import org.fudaa.ebli.commun.EbliActionInterface; +import org.fudaa.ebli.commun.EbliActionMap; +import org.fudaa.fudaa.commun.FudaaLib; +import org.fudaa.fudaa.modeleur.layer.MdlModel2dLine; +import org.fudaa.fudaa.modeleur.layer.MdlModel2dMultiPoint; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Un gestionnaire des op\xE9rations de copier/couper/coller de la fen\xEAtre 2D. La copie de plusieurs g\xE9om\xE9tries ou sommets est + * autoris\xE9e. + * + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class MdlCutCopyPasteManager { + /** La fen\xEAtre 2d \xE0 g\xE9rer. */ + protected MdlFille2d mdlFille2d_; + /** La sc\xE8ne permettant l'acc\xE8s sur les g\xE9om\xE9tries et les selections. */ + protected ZScene zScene_; + /** L'editeur de sc\xE8ne contenant les m\xE9thodes pour le d\xE9placement des g\xE9om\xE9tries. */ + protected MdlSceneEditor zSceneEditor_; + /** Copy action interface */ + protected EbliActionInterface copyAction_; + /** Cut action interface */ + protected EbliActionInterface cutAction_; + /** Paste action interface */ + protected EbliActionInterface pasteAction_; + /** Les mod\xE8les contenant les g\xE9om\xE9tries en cours de copy. */ + protected List<ZModeleGeometry> models_=new ArrayList<ZModeleGeometry>(); + /** Les points selectionn\xE9s pour la copy en mode sommet. */ + protected List<Coordinate> coordinates_=new ArrayList<Coordinate>(); + // Les gestionnaires d'\xE9v\xE9nements \\ + protected EventFrameManager eventManager1_; + protected EventSelectedGeometriesManager eventManager2_; + protected EventSelectedCalquesManager eventManager3_; + + /** + * Mise \xE0 jour correcte de bouton copier/coller/couper lors des diff\xE9rente + * manipulation de la fen\xEAtre. + */ + protected class EventFrameManager extends InternalFrameAdapter { + public boolean disablePaste_=false; + public boolean disableCopy_=false; + public boolean disableCut_=false; + + public void internalFrameActivated(InternalFrameEvent e) { + disablePaste_=false; + disableCopy_=false; + disableCut_=false; + updateButtons(); + } + + public void internalFrameDeactivated(InternalFrameEvent e) { + disablePaste_=true; + disableCopy_=true; + disableCut_=true; + updateButtons(); + } + } + + /** + * Mise \xE0 jour des boutons en fonction de la selection qui est faite dans les + * calques. + */ + protected class EventSelectedGeometriesManager implements ZSelectionListener { + public boolean disablePaste_=false; + public boolean disableCopy_=false; + public boolean disableCut_=false; + + public void selectionChanged(ZSelectionEvent _evt) { + disableCopy_=zScene_.isSelectionEmpty(); + disableCut_=zScene_.isSelectionEmpty()||zScene_.isAtomicMode(); + updateButtons(); + } + } + + /** + * Mise \xE0 jour de du bouton 'coller' en fonction du calque selectionn\xE9 dans + * l'arbre des calques. + */ + protected class EventSelectedCalquesManager implements TreeSelectionListener { + public boolean disablePaste_=false; + public boolean disableCopy_=false; + public boolean disableCut_=false; + + public void valueChanged(TreeSelectionEvent e) { + disableCut_=!(mdlFille2d_.getArbreCalqueModel().getSelectedCalque() instanceof ZCalqueEditable); + disablePaste_=!(mdlFille2d_.getArbreCalqueModel().getSelectedCalque() instanceof ZCalqueEditable); + updateButtons(); + } + } + + /** + * Constructeur. + * @param _mdlFille2d La fenetre fille + * @param _zSceneEditor L'\xE9diteur de scene. + */ + public MdlCutCopyPasteManager(MdlFille2d _mdlFille2d, MdlSceneEditor _zSceneEditor) { + mdlFille2d_=_mdlFille2d; + zScene_=_zSceneEditor.getScene(); + zSceneEditor_=_zSceneEditor; + copyAction_=EbliActionMap.getInstance().getAction("COPIER"); + cutAction_=EbliActionMap.getInstance().getAction("COUPER"); + pasteAction_=EbliActionMap.getInstance().getAction("COLLER"); + // Verification de la pr\xE9sence des actions + if (copyAction_==null||cutAction_==null||pasteAction_==null) + throw new IllegalArgumentException(FudaaLib + .getS("Les actions n\xE9c\xE9ssaire aux fonctionnalit\xE9s de couper/copier/coller n'ont pas \xE9t\xE9 trouv\xE9s.")); + // Mise en place des diff\xE9rentes \xE9coutes + eventManager1_=new EventFrameManager(); + eventManager2_=new EventSelectedGeometriesManager(); + eventManager3_=new EventSelectedCalquesManager(); + mdlFille2d_.addInternalFrameListener(eventManager1_); + zScene_.addSelectionListener(eventManager2_); + mdlFille2d_.getArbreCalqueModel().addTreeSelectionListener(eventManager3_); + // Initialisation des valeurs de blockage des boutons. + eventManager2_.selectionChanged(null); + eventManager3_.valueChanged(null); + } + + /** + * Active les boutons qui doivent l'\xEAtre. + */ + protected void updateButtons() { + copyAction_.setEnabled(!eventManager1_.disableCopy_&&!eventManager2_.disableCopy_&&!eventManager3_.disableCopy_); + pasteAction_.setEnabled((models_.size()>0||coordinates_.size()>0)&&!eventManager1_.disablePaste_&&!eventManager2_.disablePaste_&&!eventManager3_.disablePaste_); + cutAction_.setEnabled(!eventManager1_.disableCut_&&!eventManager2_.disableCut_&&!eventManager3_.disableCut_); + } + + /** + * Action de copie. Les objets s\xE9lectionn\xE9s sont copi\xE9s dans un buffer temporaire. + */ + public void copy() { + models_.clear(); + coordinates_.clear(); + if (zScene_.isAtomicMode()) { + // Copy en mode atomic \\ + int[] idxScene=zScene_.getLayerSelectionMulti().getIdxSelected(); + if (idxScene!=null) { + for(int i=0;i<idxScene.length;i++) { + int idx=zScene_.sceneId2LayerId(idxScene[i]); + // Extraction des informations sur la zone + GISZoneCollection zone=((ZModeleEditable) zScene_.getLayerForId(idxScene[i]).modeleDonnees()).getGeomData(); + GISAttributeInterface attrZ=zone.getAttributeIsZ(); + int idxAttrZ=-1; + if(attrZ!=null) + idxAttrZ=zone.getIndiceOf(zone.getAttributeIsZ()); + // La g\xE9om\xE9trie \xE0 traiter + CoordinateSequence seqGeom=zone.getCoordinateSequence(idx); + int[] selectedIdx=zScene_.getLayerSelectionMulti().getSelection(idxScene[i]).getSelectedIndex(); + // Extraction des coordonn\xE9es + for(int j=0;j<selectedIdx.length;j++) { + Coordinate coord=seqGeom.getCoordinate(selectedIdx[j]); + if(attrZ!=null) { + if(attrZ.isAtomicValue()) + coord.z=(Double) ((GISAttributeModel) zone.getValue(idxAttrZ, idx)).getObjectValueAt(selectedIdx[j]); + else + coord.z=(Double) zone.getValue(idxAttrZ,idx); + } + coordinates_.add(coord); + } + } + } + } + else { + // Copy en mode global \\ + int[] idxScene=zScene_.getLayerSelection().getSelectedIndex(); + if (idxScene!=null) { + // Tri des g\xE9om\xE9tries en fonction de leur calque d'origine + Map<ZCalqueEditable, List<Integer>> selectedGeom=new HashMap<ZCalqueEditable, List<Integer>>(); + for (int i=0; i<idxScene.length; i++) { + ZCalqueEditable calque=(ZCalqueEditable)zScene_.getLayerForId(idxScene[i]); + if (!selectedGeom.containsKey(calque)) + selectedGeom.put(calque, new ArrayList<Integer>()); + selectedGeom.get(calque).add(zScene_.sceneId2LayerId(idxScene[i])); + } + // Cr\xE9ation des mod\xE8les de cache + for (Map.Entry<ZCalqueEditable, List<Integer>> entry : selectedGeom.entrySet()) { + // Cr\xE9ation du mod\xE8le + ZModeleEditable modelSource=entry.getKey().getModelEditable(); + ZModeleEditable modelCache=null; + if (modelSource instanceof MdlModel2dMultiPoint) + modelCache=new MdlModel2dMultiPoint(null); + else if (modelSource instanceof MdlModel2dLine) + modelCache=new MdlModel2dLine(null); + modelCache.getGeomData().setAttributes(modelSource.getGeomData().getAttributes(), null); + // Remplissage du mod\xE8le + for (int i=0; i<entry.getValue().size(); i++) { + int idxGeom=entry.getValue().get(i); + Geometry geom=modelSource.getGeomData().getGeometry(idxGeom); + GISAttributeModel[] models=modelSource.getGeomData().getModels(); + Object[] data=new Object[models.length]; + for (int j=0; j<data.length; j++) + data[j]=models[j].getObjectValueAt(idxGeom); + modelCache.getGeomData().addGeometry(geom, data, null); + } + // Ajout du mod\xE8le de cache + models_.add(modelCache); + } + } + } + updateButtons(); + } + + /** + * Action de couper. Les objets s\xE9lectionn\xE9s sont tranf\xE9r\xE9s dans un buffer temporaire. Seuls les g\xE9om\xE9tries peuvent + * \xEAtre coup\xE9es. + */ + public void cut() { + copy(); + zSceneEditor_.removeSelectedObjects(mdlFille2d_.getCmdMng()); + } + + /** + * Action de coller. Les objets du buffer temporaire sont cr\xE9\xE9s dans le calque s\xE9lectionn\xE9. + */ + public void paste() { + try { + CtuluCommandComposite cmd; + // Collage de g\xE9om\xE9trie + if (models_.size()>0) { + cmd=new CtuluCommandComposite(FudaaLib.getS("Coller des g\xE9om\xE9tries")); + for (int i=0; i<models_.size(); i++) { + int[] idxSource=new int[models_.get(i).getNombre()]; + for (int j=0; j<idxSource.length; j++) + idxSource[j]=j; + zSceneEditor_.moveGeometries(models_.get(i), idxSource, (ZCalqueEditable)zScene_.getCalqueActif(), cmd); + } + } + // Collage de points + else { + cmd=new CtuluCommandComposite(FudaaLib.getS("Coller des sommets")); + ZCalqueEditable calque=((ZCalqueEditable)zScene_.getCalqueActif()); + ZModeleEditable modele=(ZModeleEditable)calque.modeleDonnees(); + GISZoneCollection zone=modele.getGeomData(); + GISAttributeInterface attrZ=zone.getAttributeIsZ(); + int idxAttrZ=-1; + if (attrZ!=null) + idxAttrZ=zone.getIndiceOf(attrZ); + // Cr\xE9ation de la g\xE9om\xE9trie + CoordinateSequence coordSeq=new GISCoordinateSequenceFactory().create(coordinates_.toArray(new Coordinate[0])); + Geometry geom=null; + if (modele instanceof MdlModel2dMultiPoint) + geom=GISGeometryFactory.INSTANCE.createMultiPoint(coordSeq); + else if (modele instanceof MdlModel2dLine) { + boolean isFerme=coordSeq.getCoordinate(0).equals(coordSeq.getCoordinate(coordSeq.size()-1)); + if ((calque.canAddForme(DeForme.LIGNE_BRISEE)&&!isFerme)||!calque.canAddForme(DeForme.POLYGONE)) { + if (coordSeq.size()<2) + throw new IllegalArgumentException(FudaaLib.getS("Il faut au moins deux points pour coller en temps que polyligne.")); + geom=GISLib.toPolyligne(coordSeq); + } + else { + if (coordSeq.size()<2) + throw new IllegalArgumentException(FudaaLib.getS("Il faut au moins trois points pour coller en temps que polygone.")); + geom=GISLib.toPolygone(coordSeq); + } + } + // Cr\xE9ation de l'attribut z + Object[] data=new Object[zone.getNbAttributes()]; + if (attrZ!=null) + if (attrZ.isAtomicValue()) { + data[idxAttrZ]=new Double[coordSeq.size()]; + for (int i=0; i<coordSeq.size(); i++) + ((Double[])data[idxAttrZ])[i]=new Double(coordSeq.getOrdinate(i, 2)); + } + else { + boolean allSame=true; + int i=0; + while (allSame&&++i<coordSeq.size()) + allSame=coordSeq.getOrdinate(i-1, 2)==coordSeq.getOrdinate(i, 2); + if (allSame) + data[idxAttrZ]=coordSeq.getOrdinate(0, 2); + else { + MdlZDialog dialog =new MdlZDialog(mdlFille2d_.getVisuPanel().getEditor().getFrame(), FudaaLib.getS("Choisissez un Z")); + dialog.setVisible(true); + data[idxAttrZ]=dialog.getValue(); + } + } + // Ajout de la g\xE9om\xE9trie + zone.addGeometry(geom, data, cmd); + } + if (mdlFille2d_.getCmdMng()!=null) + mdlFille2d_.getCmdMng().addCmd(cmd.getSimplify()); + } + catch (IllegalArgumentException _exp) { + mdlFille2d_.getVisuPanel().getController().getUI().error(_exp.getMessage()); + } + } +} Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -40,14 +40,14 @@ CtuluImageImporter, CtuluUndoRedoInterface, FudaaSavable, BuCutCopyPasteInterface { /** Le gestionnaire de couper/coller/copier de la fen\xEAtre. */ - protected CutCopyPasteManager cutCopyPasteManager_; + protected MdlCutCopyPasteManager cutCopyPasteManager_; public MdlFille2d(FudaaCommonImplementation _ui) { super(new MdlVisuPanel(_ui), _ui, null); setName("mdlMainFille"); setTitle(FSigResource.FSIG.getString("Vue 2D")); setPreferredSize(new Dimension(500, 400)); - cutCopyPasteManager_=new CutCopyPasteManager(this, (MdlSceneEditor) getMdlVisuPanel().getEditor().getSceneEditor()); + cutCopyPasteManager_=new MdlCutCopyPasteManager(this, (MdlSceneEditor) getMdlVisuPanel().getEditor().getSceneEditor()); } public void saveIn(final FudaaSaveZipWriter _writer, final ProgressionInterface _prog) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportPanel.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportPanel.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -39,7 +39,6 @@ import org.fudaa.ctulu.gui.CtuluFileChooserPanel; import org.fudaa.fudaa.commun.save.FudaaSaveProject; import org.fudaa.fudaa.commun.save.FudaaSaveZipLoader; -import org.fudaa.fudaa.modeleur.MdlImplementation.MdlFileFilter; import org.fudaa.fudaa.modeleur.MdlProjectImportTreeModel.LayerNode; import org.fudaa.fudaa.modeleur.resource.MdlResource; import org.fudaa.fudaa.sig.FSigLib; @@ -52,13 +51,18 @@ import com.memoire.fu.FuLog; /** - * @author fred deniger + * Un panneau pour fusionner un fichier projet dans le projet courant par importation. + * @author Bertrand Marchand * @version $Id: MdlProjectImportPanel.java,v 1.1.2.1 2008/05/13 12:10:21 bmarchan Exp $ */ public class MdlProjectImportPanel extends CtuluDialogPanel { - - public static class CellRenderer extends JLabel implements TreeCellRenderer { + /** + * Une classe permettant le rendu de l'arbre des calques dans le panneau d'import de projet. + * @author Bertrand Marchand + * @version $Id:$ + */ + private static class CellRenderer extends JLabel implements TreeCellRenderer { final Color selectedBackground_ = UIManager.getColor("Tree.selectionBackground"); final Color selectedForground_ = UIManager.getColor("Tree.selectionForeground"); final Border focusBorderColor_ = BorderFactory.createLineBorder(UIManager.getColor("Tree.selectionBorderColor"), 1); @@ -101,7 +105,7 @@ String filename_=""; BuRadioButton rbAllLayers_; BuRadioButton rbSelectedLayers_; - MdlFileFilter flt_; + FileFilter flt_; JTree trLayers_; FudaaSaveZipLoader loader_=null; String[] ignoredLayers=new String[0]; @@ -119,7 +123,7 @@ setLayout(new BuVerticalLayout(5,true,true)); final String title = FSigLib.getS("Le fichier projet"); - flt_=new MdlImplementation.MdlFileFilter(); + flt_=MdlImplementation.FILTER; pn_ = new CtuluFileChooserPanel(title); pn_.getTf().addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent e) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportTreeModel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportTreeModel.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectImportTreeModel.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -15,7 +15,7 @@ import org.fudaa.fudaa.commun.save.FudaaSaveZipLoader; /** - * Un modele d'arbre bas\xE9 sur un fichier projet, pour la repr\xE9sentation des calques existants dans ce fichier. + * Un modele d'arbre bas\xE9 sur la lecture d'un fichier projet, pour la repr\xE9sentation des calques existants dans ce fichier. * @author Bertrand Marchand * @version $Id: MdlProjectImportTreeModel.java,v 1.1.2.1 2008/05/13 12:10:18 bmarchan Exp $ */ @@ -24,8 +24,12 @@ private FudaaSaveZipLoader loader_; private static String NAME_ROOT="data"; - - public static class LayerNode extends DefaultMutableTreeNode { + /** + * Un noeud de ce mod\xE8le d'arbre, contenant un titre et un nom. + * @author Bertrand Marchand + * @version $Id:$ + */ + static class LayerNode extends DefaultMutableTreeNode { public String name_; public String title_; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -209,7 +209,7 @@ else titre+=MdlResource.getS("sans nom"); // Instanciation de la popup - ZDialog dialog =new ZDialog(calquePanel_.getEditor().getFrame(), titre); + MdlZDialog dialog =new MdlZDialog(calquePanel_.getEditor().getFrame(), titre); dialog.setVisible(true); datadest[iatt]=dialog.getValue(); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -59,9 +59,12 @@ import com.memoire.bu.BuWizardTask; /** - * Wizard d'import du modeleur. - * @author Bertrand Marchand - * @author Emmanuel Martin + * Un Wizard d'import de fichiers contenant des donn\xE9es g\xE9om\xE9triques sous des formats tr\xE8s divers. Ce Wizard demande + * en premiere \xE9tape les fichiers \xE0 importer, puis propose les calques vers lequels transf\xE9rer ces donn\xE9es. + * Lors du transfert, il est demand\xE9 \xE0 l'utilisateur de pr\xE9ciser le mappage entre les variables lues et les variables + * cibles de chaque calque. + * + * @author Bertrand Marchand, Emmanuel Martin * @version $Id:$ */ public class MdlWizardImport extends BuWizardTask { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImportStepDestination.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImportStepDestination.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImportStepDestination.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -57,13 +57,14 @@ import com.memoire.bu.BuVerticalLayout; /** + * L'\xE9tape de choix des calques destinations lors de l'import de fichiers de donn\xE9es. * @author Emmanuel MARTIN * @version $Id$ */ public class MdlWizardImportStepDestination extends JPanel implements CellEditorListener, ListSelectionListener { /** - * Model utilis\xE9 par la table d'import. + * Modele utilis\xE9 par la table d'import. * @author Emmanuel MARTIN * @version $Id$ */ Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlZDialog.java (from rev 4515, branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/ZDialog.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlZDialog.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlZDialog.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,60 @@ +/* + * @creation 21 janv. 2009 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur; + +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JPanel; + +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.fudaa.modeleur.resource.MdlResource; + +import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuLabel; + +/** + * Une fen\xEAtre modale pour l'obtension d'un Z. + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class MdlZDialog extends JDialog implements ActionListener { + private JComponent text_; + + public MdlZDialog(Frame _frame, String _title) { + super(_frame, _title, true); + // Position & resizable + setLocation(_frame.getLocation().x+_frame.getSize().width/2, _frame.getLocation().y+_frame.getSize().height/2); + setResizable(false); + // Contenu + JPanel container=new JPanel(new BuBorderLayout(2, 2)); + container.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); + text_=GISAttributeConstants.BATHY.getEditor().createEditorComponent(); + JButton ok=new JButton(MdlResource.getS("Valider")); + ok.addActionListener(this); + container.add(new BuLabel(MdlResource.getS("Valeur de Z :")), BuBorderLayout.WEST); + container.add(text_, BuBorderLayout.EAST); + container.add(ok, BuBorderLayout.SOUTH); + add(container); + pack(); + } + + public void actionPerformed(ActionEvent e) { + setVisible(false); + dispose(); + } + + public Double getValue() { + return (Double)GISAttributeConstants.BATHY.getEditor().getValue(text_); + } +} Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/ZDialog.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/ZDialog.java 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/ZDialog.java 2009-03-29 15:52:05 UTC (rev 4592) @@ -1,60 +0,0 @@ -/* - * @creation 21 janv. 2009 - * @modification $Date:$ - * @license GNU General Public License 2 - * @copyright (c)1998-2009 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.fudaa.modeleur; - -import java.awt.Frame; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JPanel; - -import org.fudaa.ctulu.gis.GISAttributeConstants; -import org.fudaa.fudaa.modeleur.resource.MdlResource; - -import com.memoire.bu.BuBorderLayout; -import com.memoire.bu.BuLabel; - -/** - * Fen\xEAtre modale pour l'obtension d'un Z. - * @author Emmanuel MARTIN - * @version $Id$ - */ -public class ZDialog extends JDialog implements ActionListener { - private JComponent text_; - - public ZDialog(Frame _frame, String _title) { - super(_frame, _title, true); - // Position & resizable - setLocation(_frame.getLocation().x+_frame.getSize().width/2, _frame.getLocation().y+_frame.getSize().height/2); - setResizable(false); - // Contenu - JPanel container=new JPanel(new BuBorderLayout(2, 2)); - container.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); - text_=GISAttributeConstants.BATHY.getEditor().createEditorComponent(); - JButton ok=new JButton(MdlResource.getS("Valider")); - ok.addActionListener(this); - container.add(new BuLabel(MdlResource.getS("Valeur de Z :")), BuBorderLayout.WEST); - container.add(text_, BuBorderLayout.EAST); - container.add(ok, BuBorderLayout.SOUTH); - add(container); - pack(); - } - - public void actionPerformed(ActionEvent e) { - setVisible(false); - dispose(); - } - - public Double getValue() { - return (Double)GISAttributeConstants.BATHY.getEditor().getValue(text_); - } -} Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/package.html 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -1,5 +1,5 @@ <html> <body> -<i>Contient les actions sp\xE9cifiques de Fudaa-Modeleur.<p> +Contient les actions sp\xE9cifiques de Fudaa-Modeleur.<p> </body> </html> Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -1,5 +1,5 @@ <html> <body> -<i>Contient les calques 2D/1D et les mod\xE8les sp\xE9cifiques \xE0 la visualisation dans le modeleur.<p> +Contient les calques 2D/1D et les mod\xE8les sp\xE9cifiques \xE0 la visualisation dans la fenetre 2D du modeleur.<p> </body> </html> Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/package.html (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,5 @@ +<html> +<body> +Contient les controlleur du Modeleur 1D, qui traite les actions et fait le lien entre les vues et les mod\xE8les. +</body> +</html> Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/package.html ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/package.html (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,5 @@ +<html> +<body> +Contient les mod\xE8les du Modeleur 1D, pour le bief actif, le profil actif, etc. +</body> +</html> Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/package.html ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/package.html (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,5 @@ +<html> +<body> +Ce package et ses sous packages contient les classes de mise en oeuvre de la fonctionnalit\xE9 Modeleur 1D +</body> +</html> Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/package.html ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/package.html (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,5 @@ +<html> +<body> +Contient les vues du Modeleur 1D, c'est \xE0 dire les fen\xEAtres, les boites de dialogues, les panneaux. +</body> +</html> Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/package.html ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/package.html 2009-03-29 15:48:24 UTC (rev 4591) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -1,6 +1,7 @@ <html> <body> -<i>Package applicatif : </i>Fudaa-Modeleur, logiciel de mod\xE9lisation de donn\xE9es g\xE9om\xE9trique 1D et 2D. Ce package contient les classes générales de +Fudaa-Modeleur, logiciel de mod\xE9lisation de donn\xE9es g\xE9om\xE9trique 1D et 2D. Ce package ainsi que ses sous packages contient les classes spécifiques \xE0 l'application Fudaa-Modeleur.<p> + Ce package est un package applicatif de Fudaa. La partie Modeleur 1D est plus sp\xE9cifiquement trait\xE9e dans le sous package modeleur1d. </body> </html> Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/package.html (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,6 @@ +<html> +<body> +Regroupe les classes utilis\xE9es dans la persistence des calques de la fenetre 2D lors des +op\xE9rations de sauvegarde/restitution du fichier projet. +</body> +</html> Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/package.html ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/package.html =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/package.html (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/package.html 2009-03-29 15:52:05 UTC (rev 4592) @@ -0,0 +1,6 @@ +<html> +<body> +Regroupe les classes d'acc\xE8s aux ressources sp\xE9cifiques de l'application, ainsi que les ressources +(images, fichiers de traduction, etc.) +</body> +</html> Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/package.html ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-05-22 14:14:54
|
Revision: 4799 http://fudaa.svn.sourceforge.net/fudaa/?rev=4799&view=rev Author: bmarchan Date: 2009-05-22 13:44:06 +0000 (Fri, 22 May 2009) Log Message: ----------- Correctif pour g?\195?\169rer correctement les exports 2D Rubar Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/MdlResource.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/MdlResource.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -17,7 +17,7 @@ * pas n\xE9cessairement dans un ordre croissant. * * @author fred deniger - * @version $Id: GISDataModelAbstract.java,v 1.1 2007-01-10 08:58:47 deniger Exp $ + * @version $Id$ */ public abstract class GISDataModelAbstract implements GISDataModel { @@ -25,7 +25,8 @@ protected final GISDataModel model_; /** - * @param _attShown Les indices des seuls attributs a exposer. + * @param _attShown Les indices des seuls attributs a exposer. Peut etre <code>null</code>. Auquel cas tous les attributs sont + * expos\xE9s. * @param _model Le mod\xE8le d'origine. */ public GISDataModelAbstract(final int[] _attShown, final GISDataModel _model) { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -19,7 +19,7 @@ * <b>Important</b> : Le filtre autorise des attributs qui ne sont pas dans le modele d'origine. * Pour ces attributs, les valeurs retourn\xE9es pour chaque g\xE9om\xE9trie sont nulles. * @author Fred Deniger - * @version $Id: GISDataModelFilterAdapter.java,v 1.1 2007-01-10 08:58:47 deniger Exp $ + * @version $Id$ */ public class GISDataModelFilterAdapter extends GISDataModelAbstract { @@ -146,8 +146,11 @@ final int[] geometryShown_; /** - * @param _model - * @param _idxAtt + * @param _model Le modele d'origine. + * @param _idxAtt Les indices des seuls attributs a exposer. Peut etre <code>null</code>. Auquel cas tous les attributs sont + * expos\xE9s. + * @param _idxGeom Les indices des seules g\xE9om\xE9tries \xE0 exposer. Peut etre <code>null</code>. Auquel cas toutes les g\xE9om\xE9tries sont + * expos\xE9es. */ public GISDataModelFilterAdapter(final GISDataModel _model, final int[] _idxAtt, final int[] _idxGeom) { super(_idxAtt, _model); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStWriter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStWriter.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStWriter.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -21,6 +21,7 @@ import org.fudaa.ctulu.gis.GISDataModel; import org.fudaa.ctulu.gis.GISDataModelFilterAdapter; import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.dodico.commun.DodicoLib; import org.fudaa.dodico.fortran.FileOpWriterCharSimpleAbstract; import org.fudaa.dodico.fortran.FortranWriter; @@ -32,7 +33,7 @@ * nom du profil. * * @author fred deniger, Bertrand Marchand - * @version $Id: RubarStWriter.java,v 1.4 2007-05-04 13:47:30 deniger Exp $ + * @version $Id$ */ public class RubarStWriter extends FileOpWriterCharSimpleAbstract { @@ -60,9 +61,24 @@ return; } + profs_=((GISDataModel[])_o)[0]; GISDataModel lines=((GISDataModel[])_o)[1]; + + // Profils ou non ? + boolean bprofs=profs_!=null && profs_.getNumGeometries()!=0; // Lignes directrices ou non ? boolean bldirs=lines!=null && lines.getNumGeometries()!=0; + + if (!bprofs) { + if (bldirs) { + analyze_.addInfo(DodicoLib.getS("Aucun profil : Les lignes directrices ne seront pas export\xE9es")); + } + else { + analyze_.addInfo(DodicoLib.getS("Aucun profil \xE0 exporter")); + } + return; + } + // Si pb avec les lignes directrices => Pas d'\xE9criture de fichier. if (!prepareWrite((GISDataModel[])_o)) return; @@ -133,7 +149,20 @@ writer.writeFields(fmt); } - } catch (final IOException _evt) { + + int nbprofs=profs_.getNumGeometries(); + if (isSt_) { + analyze_.addInfo(DodicoLib.getS("{0} profils sur {1} ont \xE9t\xE9 export\xE9s", ""+nbprofs, ""+nbprofs), -1); + } + else { + analyze_.addInfo(DodicoLib.getS("{0} lignes de niveaux sur {1} ont \xE9t\xE9 export\xE9es", ""+nbprofs, ""+nbprofs), -1); + } + if (bldirs) { + int nbldirs=lines.getNumGeometries(); + analyze_.addInfo(DodicoLib.getS("{0} lignes directrices sur {1} ont \xE9t\xE9 export\xE9es", ""+nbldirs, ""+nbldirs), -1); + } + } + catch (final IOException _evt) { analyze_.manageException(_evt); } } @@ -147,7 +176,6 @@ */ private boolean prepareWrite(GISDataModel[] _mdls) { GISDataModel ldirs=_mdls[1]; - profs_=_mdls[0]; pts2lds_=null; if (ldirs==null || ldirs.getNumGeometries()==0) return true; // On ne peut rien controler sans lignes directrices. Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStWriter.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -14,6 +14,7 @@ import java.awt.event.ItemListener; import java.io.File; +import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JPanel; import javax.swing.JScrollPane; @@ -142,6 +143,12 @@ bgLayers.add(rbVisibleLayers_); bgLayers.add(rbSelectedGeometries_); + BuLabel lbAide=new BuLabel(FudaaLib.getS("Remarque : Les g\xE9om\xE9tries non visibles ne seront pas export\xE9es")); + lbAide.setFont(MdlResource.HELP_FONT); + lbAide.setForeground(MdlResource.HELP_FORGROUND_COLOR); + lbAide.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); + add(lbAide); + rbAllLayers_.setSelected(true); if (_preselect) rbSelectedGeometries_.setSelected(true); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExporterFilter.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -7,6 +7,8 @@ */ package org.fudaa.fudaa.modeleur; +import gnu.trove.TIntArrayList; + import java.util.ArrayList; import java.util.List; @@ -16,6 +18,7 @@ import org.fudaa.ebli.calque.BArbreCalqueModel; import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.BCalqueVisitor; +import org.fudaa.ebli.calque.ZModeleGeometry; import org.fudaa.fudaa.modeleur.layer.MdlLayer2dCasier; /** @@ -30,6 +33,7 @@ boolean isOnlyOnSelectedLayers_; boolean isOnlyOnVisibleLayers_; boolean isOnlyOnSelectedGeometries_; + boolean isOnlyOnVisibleGeometries_=true; BArbreCalqueModel mdTree_; List<GISDataModel> zones=new ArrayList<GISDataModel>(); @@ -52,6 +56,7 @@ md=cq.modeleDonnees().getGeomData(); + // On ne retient que les g\xE9om\xE9tries s\xE9lectionn\xE9es du calque. if (isOnlyOnSelectedGeometries_) { // Si pas de g\xE9om\xE9tries selectionn\xE9es on passe. if (cq.isSelectionEmpty()) @@ -63,6 +68,20 @@ md=new GISDataModelFilterAdapter(md,null,sel); } } + + // On ne retient que les g\xE9om\xE9tries visibles du calque. + else if (isOnlyOnVisibleGeometries_) { + ZModeleGeometry mod=cq.modeleDonnees(); + TIntArrayList idx=new TIntArrayList(mod.getNombre()); + for (int id=0; id<mod.getNombre(); id++) { + if (mod.isGeometryVisible(id)) + idx.add(id); + } + if (idx.size()==0) + return true; + + md=new GISDataModelFilterAdapter(md, null, idx.toNativeArray()); + } zones.add(md); } return true; @@ -122,4 +141,11 @@ public void setTreatmentOnlySelectedGeometries(boolean _b) { isOnlyOnSelectedGeometries_=_b; } + + /** + * Le traitement s'applique uniquement aux g\xE9om\xE9tries visibles. + */ + public void setTreatmentOnlyOnVisibleGeometries(boolean _b) { + isOnlyOnVisibleGeometries_=_b; + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -20,6 +20,7 @@ import org.fudaa.ctulu.gui.CtuluLibSwing; import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.BGroupeCalque; +import org.fudaa.ebli.calque.ZScene; import org.fudaa.ebli.calque.action.SceneJoinAction; import org.fudaa.ebli.calque.action.SceneSplitAction; import org.fudaa.ebli.calque.dessin.DeForme; @@ -124,7 +125,12 @@ } public void exportSelectedLayer() { - MdlProjectExportPanel pn=new MdlProjectExportPanel(getUi()); + ZScene scn=getSupport(); + boolean bpreselect= + !scn.isAtomicMode() && + !scn.isSelectionEmpty(); + + MdlProjectExportPanel pn=new MdlProjectExportPanel(getUi(),bpreselect); if (CtuluDialogPanel.isCancelResponse(pn.afficheModale(getFrame(), FudaaLib.getS("Exporter les donn\xE9es de la fen\xEAtre active")))) return; final FSigLayerFilter filter=new FSigLayerFilter(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -8,13 +8,17 @@ package org.fudaa.fudaa.modeleur; import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; import java.io.File; import java.util.HashMap; import java.util.Map; +import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JFileChooser; import javax.swing.JPanel; +import javax.swing.UIManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @@ -27,6 +31,7 @@ import org.fudaa.dodico.rubar.io.RubarStCnFileFormat; import org.fudaa.dodico.telemac.io.SinusxFileFormat; import org.fudaa.fudaa.commun.FudaaLib; +import org.fudaa.fudaa.modeleur.resource.MdlResource; import org.fudaa.fudaa.sig.FSigLib; import org.fudaa.fudaa.sig.layer.FSigLayerExporter; @@ -38,7 +43,7 @@ /** * Un panneau pour exporter les donn\xE9es 2D. * @author Bertrand Marchand - * @version $Id: MdlProjectImportPanel.java,v 1.1.2.1 2008/05/13 12:10:21 bmarchan Exp $ + * @version $Id$ */ public class MdlProjectExportPanel extends CtuluDialogPanel implements DocumentListener { @@ -55,7 +60,12 @@ /** Le filtre de fichier pour Rubar */ BuFileFilter fltRubar_; - public MdlProjectExportPanel(CtuluUI _ui) { + /** + * + * @param _ui L'ui. + * @param _preselect Des g\xE9om\xE9tries ont \xE9t\xE9 pr\xE9selectionn\xE9es. + */ + public MdlProjectExportPanel(CtuluUI _ui, boolean _preselect) { ui_=_ui; filters_=buildFilter2Export(); @@ -78,7 +88,7 @@ rbAllLayers_=new BuRadioButton(FudaaLib.getS("Exporter tous les calques")); rbSelectedLayers_=new BuRadioButton(FudaaLib.getS("Exporter les calques s\xE9lectionn\xE9s (et leurs sous-calques)")); rbVisibleLayers_=new BuRadioButton(FudaaLib.getS("Exporter les seuls calques visibles")); - rbSelectedGeometries_=new BuRadioButton(FudaaLib.getS("Exporter les g\xE9om\xE9tries selectionn\xE9es.")); + rbSelectedGeometries_=new BuRadioButton(FudaaLib.getS("Exporter les g\xE9om\xE9tries selectionn\xE9es")); add(rbAllLayers_); add(rbSelectedLayers_); add(rbVisibleLayers_); @@ -88,8 +98,18 @@ bgLayers.add(rbSelectedLayers_); bgLayers.add(rbVisibleLayers_); bgLayers.add(rbSelectedGeometries_); - - rbAllLayers_.doClick(); + + BuLabel lbAide=new BuLabel(FudaaLib.getS("Remarque : Les g\xE9om\xE9tries non visibles ne seront pas export\xE9es")); + lbAide.setFont(MdlResource.HELP_FONT); + lbAide.setForeground(MdlResource.HELP_FORGROUND_COLOR); + lbAide.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); + add(lbAide); + + rbAllLayers_.setSelected(true); + if (_preselect) + rbSelectedGeometries_.setSelected(true); + else + rbSelectedGeometries_.setEnabled(false); } private BuFileFilter[] buildFilter2Export() { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/MdlResource.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/MdlResource.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/MdlResource.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -7,13 +7,18 @@ */ package org.fudaa.fudaa.modeleur.resource; +import java.awt.Color; +import java.awt.Font; + +import javax.swing.JLabel; + import com.memoire.bu.BuResource; import org.fudaa.fudaa.ressource.FudaaResource; /** * Des ressources pour Fudaa-Modeleur, en particulier la traduction de langage. - * @version $Id: FSigResource.java,v 1.4 2006/09/19 15:10:20 deniger Exp $ + * @version $Id$ * @author Bertrand Marchand */ public final class MdlResource extends FudaaResource { @@ -35,5 +40,11 @@ public static String getS(final String _s, final String _v0, final String _v1) { return MDL.getString(_s, _v0, _v1); } + + /** Couleur pour un message d'aide dans les dialogues */ + public final static Color HELP_FORGROUND_COLOR=new Color(0,0,180); + + /** Font pour un message d'aide dans les dialogues */ + public final static Font HELP_FONT=new JLabel().getFont().deriveFont(Font.ITALIC | Font.BOLD); } \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/resource/MdlResource.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -31,6 +31,7 @@ import org.fudaa.ctulu.gis.factory.GISExportDataStoreFactory; import org.fudaa.ctulu.gis.gml.GISGMLZoneExporter; import org.fudaa.ctulu.gis.mif.MIFDataStoreFactory; +import org.fudaa.dodico.commun.DodicoLib; import org.fudaa.dodico.dunes.io.DunesGEOFileFormat; import org.fudaa.dodico.rubar.io.RubarSEMFileFormat; import org.fudaa.dodico.rubar.io.RubarSEMWriterGISAdapter; @@ -44,7 +45,7 @@ /** * @author fred deniger - * @version $Id: FSigLayerExporter.java,v 1.4 2007-06-14 12:01:22 deniger Exp $ + * @version $Id$ */ public abstract class FSigLayerExporter { @@ -225,15 +226,19 @@ GISDataModel mdl=new GISDataModelMultiAdapter(mdlsemis.toArray(new GISDataModel[0])); ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]), new RubarSEMWriterGISAdapter(mdl), _prog).getAnalyze(); + + int nbsemis=mdl.getNumGeometries(); + ana.addInfo(DodicoLib.getS("{0} semis sur {1} ont \xE9t\xE9 export\xE9s", ""+nbsemis, ""+nbsemis), -1); + synt.getAnalyze().merge(ana); if (synt.containsFatalError()) return synt; } // Les profils et lignes directrices - if (mdlprofs.size()>0) { + if (mdlprofs.size()>0 || mdlligdir.size()>0) { ff=RubarStCnFileFormat.getInstance(); GISDataModel[] mdl=new GISDataModel[2]; - mdl[0]=new GISDataModelMultiAdapter(mdlprofs.toArray(new GISDataModel[0])); + mdl[0]=mdlprofs.size()==0 ? null:new GISDataModelMultiAdapter(mdlprofs.toArray(new GISDataModel[0])); mdl[1]=mdlligdir.size()==0 ? null:new GISDataModelMultiAdapter(mdlligdir.toArray(new GISDataModel[0])); ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]), mdl, _prog).getAnalyze(); synt.getAnalyze().merge(ana); @@ -263,39 +268,6 @@ if (synt.containsFatalError()) return synt; } - // Les polylignes. -/* int nb = _filter.polyCq_.size(); - GISDataModel[] models = new GISDataModel[nb]; - FileFormatUnique ff=new RubarStCnFileFormat(); - for (int i = 0; i < nb; i++) { - models[i]=GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)), - new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.NATURE}); -// models[i] = new GISDataModelZoneAdapter(_filter.getCollect(_filter.polyCq_.get(i)), FuEmptyArrays.INT0); - } - if (models.length>0) { - ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]), new GISDataModelMultiAdapter(models), _prog) - .getAnalyze(); - synt.getAnalyze().merge(ana); - if (synt.containsFatalError()) return synt; - } - - // Les semis => Tous dans le m\xEAme fichier. - models = new GISDataModel[_filter.mlptsCq_.size()+_filter.pointCq_.size()]; - ff=new RubarSEMFileFormat(); - int nbMlt = _filter.mlptsCq_.size(); - for (int i = 0; i < nbMlt; i++) { - models[i]=GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.mlptsCq_.get(i)), null); - } - int nbPts = _filter.pointCq_.size(); - for (int i = 0; i < nbPts; i++) { - models[i+nbMlt]=new GISDataModelPointMultiPointAdapter( - GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.pointCq_.get(i)), null)); - } - if (models.length>0) { - ana=ff.write(CtuluLibFile.appendExtensionIfNeeded(f, ff.getExtensions()[0]), - new RubarSEMWriterGISAdapter(new GISDataModelMultiAdapter(models)), _prog).getAnalyze(); - synt.getAnalyze().merge(ana); - }*/ return synt; } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2009-05-22 00:06:43 UTC (rev 4798) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2009-05-22 13:44:06 UTC (rev 4799) @@ -7,6 +7,8 @@ */ package org.fudaa.fudaa.sig.layer; +import gnu.trove.TIntArrayList; + import java.io.File; import java.util.ArrayList; import java.util.HashSet; @@ -40,8 +42,9 @@ List<ZCalqueAffichageDonneesInterface> pointCq_ = new ArrayList<ZCalqueAffichageDonneesInterface>(); List<ZCalqueAffichageDonneesInterface> polyCq_ = new ArrayList<ZCalqueAffichageDonneesInterface>(); List<ZCalqueAffichageDonneesInterface> mlptsCq_=new ArrayList<ZCalqueAffichageDonneesInterface>(); - boolean bonlyVisible_=false; + protected boolean bonlyVisible_=false; protected boolean onlySelectedGeometries_=false; + protected boolean bonlyOnVisibleGeometries_=true; /** * @@ -73,12 +76,22 @@ final GISDataModel getCollect(final ZCalqueAffichageDonneesInterface _o) { GISZoneCollection zone = ((ZModeleGeometry) _o.modeleDonnees()).getGeomData(); zone.prepareExport(); + + // On ne retient que les g\xE9om\xE9tries s\xE9lectionn\xE9es. if (onlySelectedGeometries_) { - int[] idxAttributes=new int[zone.getNbAttributes()]; - for (int i=0; i<zone.getNbAttributes(); i++) - idxAttributes[i]=i; - return new GISDataModelFilterAdapter(zone, idxAttributes, _o.getSelectedObjectInTable()); + return new GISDataModelFilterAdapter(zone, null, _o.getSelectedObjectInTable()); } + + // On ne retient que les g\xE9om\xE9tries visibles du calque. + else if (bonlyOnVisibleGeometries_) { + ZModeleGeometry md=(ZModeleGeometry)_o.modeleDonnees(); + TIntArrayList idx=new TIntArrayList(md.getNombre()); + for (int id=0; id<md.getNombre(); id++) { + if (md.isGeometryVisible(id)) + idx.add(id); + } + return new GISDataModelFilterAdapter(zone, null, idx.toNativeArray()); + } else return zone; } @@ -105,6 +118,14 @@ } /** + * Le traitement ne se fait que sur les g\xE9om\xE9tries visibles. + * @param _b True : Uniquement les g\xE9om\xE9tries visibles des calques s\xE9lectionn\xE9s sont consid\xE9r\xE9es. + */ + public void setTreatmentOnlyOnVisibleGeometries(boolean _b) { + bonlyOnVisibleGeometries_=_b; + } + + /** * Le traitement s'applique uniquement aux g\xE9om\xE9tries selectionn\xE9es. */ public void setTreatmentOnlySelectedGeometries(boolean _b) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-05-29 14:42:56
|
Revision: 4820 http://fudaa.svn.sourceforge.net/fudaa/?rev=4820&view=rev Author: bmarchan Date: 2009-05-29 14:42:53 +0000 (Fri, 29 May 2009) Log Message: ----------- Ordonnancement croissant des altitudes dans les casiers Rubar. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java 2009-05-29 14:37:21 UTC (rev 4819) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierWriter.java 2009-05-29 14:42:53 UTC (rev 4820) @@ -7,6 +7,9 @@ */ package org.fudaa.dodico.rubar.io; +import java.util.Set; +import java.util.TreeSet; + import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ctulu.gis.GISAttributeInteger; import org.fudaa.ctulu.gis.GISAttributeInterface; @@ -28,11 +31,35 @@ */ public class RubarCasierWriter extends FileOpWriterCharSimpleAbstract { + /** + * Une entr\xE9e altitude/surface comparable pour le tri suivant les altitudes. Le tri se fait suivant une altitude croissante. + */ + private class AltSurfEntry implements Comparable<AltSurfEntry> { + public double surf; + public double alt; + + /** + * Cr\xE9ation d'une entr\xE9e altitude/surface. + * @param _alt L'altitude + * @param _surf La surface associ\xE9e. + */ + public AltSurfEntry(double _alt, double _surf) { + surf=_surf; + alt=_alt; + } + + public int compareTo(AltSurfEntry _o) { + return alt>_o.alt ? 1:alt<_o.alt ? -1:0; + } + } + /** A utiliser pour chaque ligne de niveau, comme index sur le casier auquel elle se rapporte */ public static final GISAttributeInterface INDEX_CASIER=new GISAttributeInteger("Index casier"); - + /** * Ecrit les casiers. Les casiers sont consid\xE9r\xE9s conformes, c'est a dire a plus de 3 points et 0 ou plus lignes de niveaux. + * Les surfaces correspondant aux lignes de niveau sont \xE9crites par altitudes croissantes. + * * @param _o Un tableau GISDataModel[2]. * [0] : le modele des contours de casiers * [1] : le modele des lignes de niveau ferm\xE9es internes aux casiers. Il poss\xE8de un attribut INDEX_CASIER, qui indique le @@ -55,30 +82,39 @@ } final FortranWriter writer = new FortranWriter(out_); - final int[] fmt={10,10}; + // Format en principe F10.0,F10.0, mais on triche pour que les lecteurs au format libre fonctionnent aussi. + final int[] fmt={1,9,1,9}; try { + Set<AltSurfEntry> sAltSurfs=new TreeSet<AltSurfEntry>(); + for (int icas = 0; icas < mdcasiers.getNumGeometries(); icas++) { GISPolygone gcasier=((GISPolygone)mdcasiers.getGeometry(icas)); - String name; - if (iattName==-1||(name=(String)mdcasiers.getValue(iattName, icas))==null||name.length()>3) name="C"+(icas+1); - - writer.writeln("$"+name); + // Tri des couples par altitude croissante. + + sAltSurfs.clear(); // Le contour casier - writer.doubleField(1,getSurface(gcasier)); - writer.doubleField(0,getAltitude(gcasier.getCoordinateSequence())); - writer.writeFields(fmt); - + sAltSurfs.add(new AltSurfEntry(getAltitude(gcasier.getCoordinateSequence()),getSurface(gcasier))); // Les lignes de niveau pour ce casier. for (int iniv=0; iniv< mdniv.getNumGeometries(); iniv++) { if (mdniv.getValue(iattRef, iniv).equals(icas)) { GISPolygone gniv=((GISPolygone)mdniv.getGeometry(iniv)); - writer.doubleField(1,getSurface(gniv)); - writer.doubleField(0,getAltitude(gniv.getCoordinateSequence())); - writer.writeFields(fmt); + sAltSurfs.add(new AltSurfEntry(getAltitude(gniv.getCoordinateSequence()),getSurface(gniv))); } } + + // Ecriture du nom + String name; + if (iattName==-1||(name=(String)mdcasiers.getValue(iattName, icas))==null||name.length()>3) name="C"+(icas+1); + writer.writeln("$"+name); + + // Ecriture des couples altitude/surface + for (AltSurfEntry entry : sAltSurfs) { + writer.doubleField(3,entry.surf); + writer.doubleField(1,entry.alt); + writer.writeFields(fmt); + } } } catch (final Exception _evt) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-05-29 14:37:21 UTC (rev 4819) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-05-29 14:42:53 UTC (rev 4820) @@ -33,8 +33,12 @@ import org.fudaa.ctulu.gui.CtuluDialogPanel; import org.fudaa.ctulu.gui.CtuluFileChooserPanel; import org.fudaa.ebli.calque.BArbreCalqueModel; +import org.fudaa.ebli.calque.BCalque; +import org.fudaa.ebli.calque.BCalqueVisitor; import org.fudaa.ebli.calque.CalqueGISTreeModel; +import org.fudaa.ebli.calque.ZCalqueAffichageDonnees; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesAbstract; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; import org.fudaa.ebli.calque.ZCalqueGeometry; import org.fudaa.ebli.calque.ZScene; import org.fudaa.ebli.calque.edition.ZModeleGeometryDefault; @@ -104,6 +108,17 @@ BuLabel lbTitle=new BuLabel(FSigLib.getS("S\xE9lectionnez les g\xE9om\xE9tries \xE0 int\xE9grer aux casiers")); add(lbTitle); + // Pour eviter des probl\xE8me de Z incorrect. + // TODO : Devrait \xEAtre fait a chaque modification de l'attribut Z de la zone. + _pn.getGroupAlti().apply(new BCalqueVisitor() { + public boolean visit(BCalque _cq) { + if (_cq instanceof ZCalqueGeometry) { + ((ZCalqueGeometry)_cq).modeleDonnees().getGeomData().prepareExport(); + } + return true; + } + + }); CalqueGISTreeModel md=new CalqueGISTreeModel(null,_pn.getGroupAlti()); md.setMask(GISLib.MASK_MULTIPOINT); trLayers_=md.createView(true,true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-06-03 09:32:47
|
Revision: 4833 http://fudaa.svn.sourceforge.net/fudaa/?rev=4833&view=rev Author: bmarchan Date: 2009-06-03 09:32:41 +0000 (Wed, 03 Jun 2009) Log Message: ----------- 1. Lecture fichiers Rubar .cn : Les g?\195?\169om?\195?\169tries sont affect?\195?\169es directement ?\195?\160 un calque courbe de niveau + Suppression comm hydro 2. Lecture fichier Rubar .st/.cn : Le nom des profils/courbes niveau est intiialis?\195?\169 par ordre d'apparition dans le fichier a partir de 1 si inexistant dans le fichier lu. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/fortran/FortranDoubleReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardImportHelper.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/fortran/FortranDoubleReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardImportHelper.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/fortran/FortranDoubleReader.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/fortran/FortranDoubleReader.java 2009-06-03 06:45:44 UTC (rev 4832) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/fortran/FortranDoubleReader.java 2009-06-03 09:32:41 UTC (rev 4833) @@ -22,7 +22,7 @@ /** * @author Fred Deniger - * @version $Id: FortranDoubleReader.java,v 1.15 2007-06-13 12:57:16 deniger Exp $ + * @version $Id$ */ public class FortranDoubleReader extends FileOpReadCharSimpleAbstract implements FortranInterface { final int[] fmt_; @@ -45,14 +45,14 @@ } /** - * La lecture supporte les lignes de commentaires. Elle sont introduites par l'un des caract\xE8re contenus + * La lecture accepte les lignes de commentaires. Elle sont introduites par l'un des caract\xE8re contenus * dans _charComments.<p> * <b>Attention</b><br> * la casse du caract\xE8re qui introduit un commentaire est importante. Par exemple, si on * souhaite des lignes commentaires commencant par 'C' ou 'c', il faudra donner _charComments="Cc" * @param _charComments Les diff\xE9rents caract\xE8res autoris\xE9s pour introduire une ligne commentaire. */ - public void supportCommentLines(String _charComments) { + public void acceptCommentLines(String _charComments) { charComments_=_charComments; } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/fortran/FortranDoubleReader.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java 2009-06-03 06:45:44 UTC (rev 4832) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java 2009-06-03 09:32:41 UTC (rev 4833) @@ -17,7 +17,7 @@ /** * @author fred deniger - * @version $Id: RubarSEMFileFormat.java,v 1.1 2006-12-05 10:13:17 deniger Exp $ + * @version $Id$ */ public class RubarSEMFileFormat extends FileFormatUnique { @@ -31,7 +31,7 @@ public FileReadOperationAbstract createReader() { FortranDoubleReader w=new FortranDoubleReader(getFmt()); - w.supportCommentLines("#"); + w.acceptCommentLines("#"); return w; } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStReader.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStReader.java 2009-06-03 06:45:44 UTC (rev 4832) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStReader.java 2009-06-03 09:32:41 UTC (rev 4833) @@ -1,6 +1,5 @@ /* * @creation 4 d\xE9c. 06 - * @modification $Date: 2007-06-11 13:07:05 $ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -11,9 +10,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.LineString; @@ -30,12 +27,15 @@ import org.fudaa.dodico.fortran.FileOpReadCharSimpleAbstract; /** - * Un reader pour un fichier Rubar (ST, ou CN). + * Un reader pour un fichier Rubar (.st qui contient des profils, ou .cn qui contient des courbes de niveau). Un fichier .m + * est identique en lecture \xE0 un fichier .st. + * * @author fred deniger, Bertrand Marchand - * @version $Id: RubarStReader.java,v 1.5 2007-06-11 13:07:05 deniger Exp $ + * @version $Id$ */ public class RubarStReader extends FileOpReadCharSimpleAbstract { + /** Le fichier est de type .st. */ boolean isSt_; public RubarStReader() { @@ -132,8 +132,9 @@ if (str != null) { lignes.add(str); pks.add(pk); + // Le nom par d\xE9faut correspond \xE0 la position de la g\xE9om\xE9trie dans le fichier. if ("".equals(name)) { - names.add(CtuluLib.getS(isSt_?"P":"N")+((GISGeometry)str).getId()); + names.add(CtuluLib.getS(isSt_?"P":"N")+(names.size()+1)); } else { names.add(name); @@ -141,16 +142,19 @@ } coordinatesEnCours.clear(); } - } catch (final EOFException _io) {} catch (final IOException _io) { + } + catch (final EOFException _io) {} + catch (final IOException _io) { analyze_.manageException(_io); - } catch (final NumberFormatException _if) { + } + catch (final NumberFormatException _if) { analyze_.manageException(_if, in_.getLineNumber()); } final LineString str = GISLib.createLineOrLinearFromList(coordinatesEnCours); if (str != null) { lignes.add(str); if ("".equals(name)) { - names.add(CtuluLib.getS("P")+((GISGeometry)str).getId()); + names.add(CtuluLib.getS(isSt_?"P":"N")+(names.size()+1)); } else { names.add(name); @@ -158,13 +162,23 @@ } GISZoneCollectionLigneBrisee[] ret=new GISZoneCollectionLigneBrisee[2]; - // Profils + + // Profils / Lignes de niveaux if (lignes.size() > 0) { final GISZoneCollectionLigneBrisee zligs = new GISZoneCollectionLigneBrisee(null); zligs.addAllLineStringClosedOrNode((LineString[]) lignes.toArray(new LineString[lignes.size()]), null); - zligs.setAttributes(new GISAttributeInterface[] { + + GISAttributeInterface[] attrs; + if (isSt_) + attrs=new GISAttributeInterface[] { + GISAttributeConstants.BATHY, GISAttributeConstants.TITRE, + GISAttributeConstants.NATURE, GISAttributeConstants.COMMENTAIRE_HYDRO}; + else + attrs=new GISAttributeInterface[] { GISAttributeConstants.BATHY, GISAttributeConstants.TITRE, - GISAttributeConstants.NATURE, GISAttributeConstants.COMMENTAIRE_HYDRO}, null); + GISAttributeConstants.NATURE}; + + zligs.setAttributes(attrs, null); if(zligs.getAttributeIsZ()==null) zligs.setAttributeIsZ(GISAttributeConstants.BATHY); zligs.postImport(0); @@ -175,16 +189,24 @@ attmod.setObject(i,attmod.getAttribute().createDataForGeom(names.get(i),1),null); } - // Affectation de l'attribut commentaire hydro. - attmod=zligs.getModel(GISAttributeConstants.COMMENTAIRE_HYDRO); - for (int i=0; i<pks.size(); i++) { - attmod.setObject(i,attmod.getAttribute().createDataForGeom(pks.get(i),1),null); + // Affectation de l'attribut commentaire hydro (uniquement ST) + if (isSt_) { + attmod=zligs.getModel(GISAttributeConstants.COMMENTAIRE_HYDRO); + for (int i=0; i<pks.size(); i++) { + attmod.setObject(i,attmod.getAttribute().createDataForGeom(pks.get(i),1),null); + } } // Affectation de l'attribut nature attmod=zligs.getModel(GISAttributeConstants.NATURE); + String nature; + if (isSt_) + nature=GISAttributeConstants.ATT_NATURE_PF; + else + nature=GISAttributeConstants.ATT_NATURE_CN; + for (int i=0; i<attmod.getSize(); i++) { - attmod.setObject(i,attmod.getAttribute().createDataForGeom(GISAttributeConstants.ATT_NATURE_PF,1),null); + attmod.setObject(i,attmod.getAttribute().createDataForGeom(nature,1),null); } ret[0]=zligs; } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStReader.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardImportHelper.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardImportHelper.java 2009-06-03 06:45:44 UTC (rev 4832) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardImportHelper.java 2009-06-03 09:32:41 UTC (rev 4833) @@ -35,7 +35,7 @@ /** * @author fred deniger - * @version $Id: FSigWizardImportHelper.java,v 1.1 2007-01-19 13:14:09 deniger Exp $ + * @version $Id$ */ public final class FSigWizardImportHelper { @@ -54,7 +54,7 @@ lay.setColumnXAlign(new float[] { 0f, 0f }); BuPanel line = new BuPanel(); line.setLayout(lay); - line.add(FSigGeomSrcDataUtils.buildLabeli18n("Nombre de lignes:")); + line.add(FSigGeomSrcDataUtils.buildLabeli18n("Nombre de lignes ouvertes:")); lbNbLines_=FSigGeomSrcDataUtils.buildLabel(""); line.add(lbNbLines_); line.add(FSigGeomSrcDataUtils.buildLabeli18n("Nombre de lignes ferm\xE9es:")); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardImportHelper.java ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-06-03 13:10:48
|
Revision: 4835 http://fudaa.svn.sourceforge.net/fudaa/?rev=4835&view=rev Author: bmarchan Date: 2009-06-03 13:10:45 +0000 (Wed, 03 Jun 2009) Log Message: ----------- Acc?\195?\169l?\195?\169ration du traitement pour cr?\195?\169ation profil a partir d'une trace. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/GISDataModelToPointCloudAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/GISDataModelToPointCloudAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/GISDataModelToPointCloudAdapter.java 2009-06-03 10:42:07 UTC (rev 4834) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/GISDataModelToPointCloudAdapter.java 2009-06-03 13:10:45 UTC (rev 4835) @@ -21,7 +21,7 @@ * tout sous forme d'un nuage de points. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class GISDataModelToPointCloudAdapter implements PointCloudI{ @@ -46,7 +46,7 @@ attributeZ_=_attrZ; for(int i=0;i<model_.getNumGeometries();i++) if(model_.getGeometry(i) instanceof GISMultiPoint) - for(int j=0;j<((GISMultiPoint)model_.getGeometry(i)).getNumPoints();j++) + for(int j=0, jend=model_.getGeometry(i).getNumPoints(); j<jend; j++) correspondance_.put(idxCorrespondance++, new Integer[]{i, j}); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-06-03 10:42:07 UTC (rev 4834) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlCasierExportPanel.java 2009-06-03 13:10:45 UTC (rev 4835) @@ -254,7 +254,7 @@ initZoom_ = pn_.getVueCalque().getViewBoite(); cqTmp_ = new ZCalqueGeometry(mdl); cqTmp_.setDestructible(true); - final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS_DOUBLE, 4, Color.RED); + final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS, 4, Color.RED); cqTmp_.setIconModel(0, model); cqTmp_.setIconModel(1, model); final TraceLigneModel ligne = new TraceLigneModel(TraceLigne.INVISIBLE, 2, Color.RED); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java 2009-06-03 10:42:07 UTC (rev 4834) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java 2009-06-03 13:10:45 UTC (rev 4835) @@ -171,7 +171,7 @@ initZoom_ = pn_.getVueCalque().getViewBoite(); cqTmp_ = new ZCalqueGeometry(mdl); cqTmp_.setDestructible(true); - final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS_DOUBLE, 4, Color.RED); + final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS, 4, Color.RED); cqTmp_.setIconModel(0, model); cqTmp_.setIconModel(1, model); final TraceLigneModel ligne = new TraceLigneModel(TraceLigne.INVISIBLE, 2, Color.RED); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java 2009-06-03 10:42:07 UTC (rev 4834) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java 2009-06-03 13:10:45 UTC (rev 4835) @@ -133,7 +133,7 @@ initZoom_ = pn_.getVueCalque().getViewBoite(); cqTmp_ = new ZCalqueGeometry(mdl); cqTmp_.setDestructible(true); - final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS_DOUBLE, 4, Color.RED); + final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS, 4, Color.RED); cqTmp_.setIconModel(0, model); cqTmp_.setIconModel(1, model); final TraceLigneModel ligne = new TraceLigneModel(TraceLigne.INVISIBLE, 2, Color.RED); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2009-06-04 15:45:14
|
Revision: 4849 http://fudaa.svn.sourceforge.net/fudaa/?rev=4849&view=rev Author: bmarchan Date: 2009-06-04 15:45:13 +0000 (Thu, 04 Jun 2009) Log Message: ----------- Changement d'appelation des fichiers : Rubar => Cemagref Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStCnFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStCnFileFormat.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java 2009-06-04 15:26:18 UTC (rev 4848) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarCasierFileFormat.java 2009-06-04 15:45:13 UTC (rev 4849) @@ -21,7 +21,7 @@ public RubarCasierFileFormat() { super(1); - nom_ = DodicoLib.getS("Rubar casiers"); + nom_ = DodicoLib.getS("Cemagref casiers"); description_ = H2dResource.getS("Fichier contenant des casiers"); extensions_=new String[]{"mage"}; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java 2009-06-04 15:26:18 UTC (rev 4848) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarSEMFileFormat.java 2009-06-04 15:45:13 UTC (rev 4849) @@ -26,7 +26,7 @@ extensions_ = new String[] { "sem" }; super.description_ = H2dResource.getS("Fichier de semis de points"); super.id_ = "RUBAR_SEM"; - super.nom_ = "Rubar semis"; + super.nom_ = "Cemagref semis"; } public FileReadOperationAbstract createReader() { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStCnFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStCnFileFormat.java 2009-06-04 15:26:18 UTC (rev 4848) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStCnFileFormat.java 2009-06-04 15:45:13 UTC (rev 4849) @@ -22,7 +22,7 @@ /** * @author fred deniger - * @version $Id: RubarStCnFileFormat.java,v 1.4 2007-05-04 13:47:30 deniger Exp $ + * @version $Id$ */ public class RubarStCnFileFormat extends FileFormatUnique { @@ -34,7 +34,7 @@ extensions_ = new String[] { "st", "cn", "m" }; super.description_ = H2dResource.getS("Fichier de sections"); super.id_ = "RUBAR_ST"; - super.nom_ = "Rubar st"; + super.nom_ = "Cemagref st"; } @@ -48,7 +48,7 @@ } public static BuFileFilter createStFilter() { - return new BuFileFilter(new String[] { "st", "cn" }, "Rubar st"); + return new BuFileFilter(new String[] { "st", "cn" }, "Cemagref st"); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStCnFileFormat.java ___________________________________________________________________ Added: svn:keywords + Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-06-04 15:26:18 UTC (rev 4848) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectExportPanel.java 2009-06-04 15:45:13 UTC (rev 4849) @@ -114,7 +114,7 @@ private BuFileFilter[] buildFilter2Export() { final BuFileFilter sx = SinusxFileFormat.getInstance().createFileFilter(); - fltRubar_=new BuFileFilter(new String[]{"cn","st","sem"},"Rubar"); + fltRubar_=new BuFileFilter(new String[]{"cn","st","sem"},"Cemagref"); final BuFileFilter dunes= DunesGEOFileFormat.getInstance().createFileFilter(); filter2Exporter_ = new HashMap<BuFileFilter, FSigLayerExporter>(5);// pour l'instant ..... This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |