From: <emm...@us...> - 2008-11-14 11:10:57
|
Revision: 4216 http://fudaa.svn.sourceforge.net/fudaa/?rev=4216&view=rev Author: emmanuel_martin Date: 2008-11-14 11:10:52 +0000 (Fri, 14 Nov 2008) Log Message: ----------- Tache #82 : "Import de fichier Mascaret avec r?\195?\169f?\195?\169rence 2D." Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardFileMng.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java 2008-11-14 11:10:52 UTC (rev 4216) @@ -0,0 +1,38 @@ +/* + * @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; + +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; + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java 2008-11-14 11:10:52 UTC (rev 4216) @@ -0,0 +1,307 @@ +/* + * @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; + +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 { + + /** + * Container des informations relative \xE0 un profil. + */ + private class Profil{ + public String nomBief; + public String nomProfil; + public List<Double> coordZ=new ArrayList<Double>(); // Bathy ou Topo + public List<Character> bathyOuTopo=new ArrayList<Character>(); // B ou T + // Info sp\xE9cifique 1D + public double abscisseCurvilingeAxeHydrolique; + public List<Double> coordCurviligneProfil=new ArrayList<Double>(); + // Info sp\xE9cifique 2D + public List<double[]> coordXYTraceProfil=new ArrayList<double[]>(); + public double[] coordIntersectionAxeHydrolique; + public List<double[]> coordXYProfil=new ArrayList<double[]>(); + + /** @return vrai si seul des informations 1d sont pr\xE9sentes. */ + public boolean is1d(){ + return coordCurviligneProfil.size()>0&&coordXYTraceProfil.size()==0&&coordIntersectionAxeHydrolique==null + &&coordXYProfil.size()==0; + } + + /** @return vrai si les informations 2d sont pr\xE9sentes. (les infos 1d peuvent \xEAtre \xE9galement pr\xE9sentes) */ + public boolean is2d(){ + return (coordXYTraceProfil.size()!=0||coordIntersectionAxeHydrolique!=null&&coordIntersectionAxeHydrolique.length!=0||coordXYProfil + .size()!=0); + } + + /** Check les attributs communs \xE0 1d et 2d. */ + private boolean checkCommon(){ + boolean check=nomBief.length()>0&&nomProfil.length()>0&&coordZ.size()>0&&bathyOuTopo.size()==coordZ.size(); + int i=-1; + // Verifi que bathyOuTopo ne comporte que B ou T + while(check&&++i<bathyOuTopo.size()) + check=bathyOuTopo.get(i).equals('T')||bathyOuTopo.get(i).equals('B'); + return check; + } + + /** @return vrai si les informations utile 1D sont compl\xE8tes et coh\xE9rentes. */ + public boolean check1D(){ + boolean check=checkCommon()&&abscisseCurvilingeAxeHydrolique>=0&&coordCurviligneProfil.size()==coordZ.size(); + int i=0; + // Verifi que l'ordre des coordonn\xE9es est croissant. + while(check&&++i<coordCurviligneProfil.size()) + check=coordCurviligneProfil.get(i-1)<=coordCurviligneProfil.get(i); + return check; + } + + /** @return vrai si les informations utile 2D sont compl\xE8tes et coh\xE9rentes. */ + public boolean check2D(){ + boolean check=checkCommon()&&coordXYTraceProfil.size()>=2&&coordXYTraceProfil.size()<=4 + &&coordIntersectionAxeHydrolique.length==2&&coordXYProfil.size()==coordZ.size(); + // Verification de la taille des coordonn\xE9es XY du profile + int i=-1; + while(check&&++i<coordXYProfil.size()) + check=coordXYProfil.get(i).length==2; + return check; + } + } + + /** 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<Profil> profils_=new ArrayList<Profil>(); + + 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; + } + + /** + * @returnun 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")) { + Profil profil=new Profil(); + + // Premi\xE8re ligne \\ + // Extraction des informations commune \xE0 1d et 2d + profil.nomBief=nextWordToken(lineToken); + profil.nomProfil=nextWordToken(lineToken); + profil.abscisseCurvilingeAxeHydrolique=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 hydrolique + if (token!=null&&token.equals("AXE")) + profil.coordIntersectionAxeHydrolique=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.bathyOuTopo.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 profiles 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}, 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)); + Profil 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]); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_TP}, null); + // Profil + coordSeq=new CoordinateArraySequence(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, profil.coordZ.get(i)); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_PF}, null); + } + if (profils_.size()>1) { + // G\xE9n\xE9ration de l'axe hydrolique \\ + CoordinateArraySequence coordSeq=new CoordinateArraySequence(profils_.size()); + for (int i=0; i<profils_.size(); i++) { + coordSeq.setOrdinate(i, 0, profils_.get(i).coordIntersectionAxeHydrolique[0]); + coordSeq.setOrdinate(i, 1, profils_.get(i).coordIntersectionAxeHydrolique[1]); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{null, GISAttributeConstants.ATT_NATURE_AH}, null); + } + else + analyze_.addInfo(fileName_+DodicoLib.getS(" : le fichier ne comporte qu'un profile, aucun axe hydrolique 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) { + } + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native 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 2008-11-13 10:39:29 UTC (rev 4215) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java 2008-11-14 11:10:52 UTC (rev 4216) @@ -979,9 +979,12 @@ } error(_analyze.getDesc(), deb, false); return true; - } else if (_analyze.containsErrors()) { + } else if (_analyze.containsErrors()) error(_analyze.getDesc(), CtuluAnalyze.getResume(_analyze.getErrorCanal(), 5), 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/sig/wizard/FSigFileLoaderMascaret.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java 2008-11-14 11:10:52 UTC (rev 4216) @@ -0,0 +1,78 @@ +/* + * @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.fudaa.sig.wizard; + +import java.io.File; + +import org.fudaa.ctulu.CtuluAnalyze; +import org.fudaa.ctulu.CtuluIOOperationSynthese; +import org.fudaa.ctulu.ProgressionInterface; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISDataModelAttributeAdapter; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.dodico.mascaret.MascaretFileFormat; + +import com.memoire.bu.BuFileFilter; + +/** + * Loader des fichiers mascaret (extension : geomref). + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class FSigFileLoaderMascaret implements FSigFileLoaderI { + + private BuFileFilter filter_; + + public FSigFileLoaderMascaret(){ + filter_=new BuFileFilter(new String[]{"geo", "georef"}, "Fichier mascaret"); + } + + private FSigFileLoaderMascaret(final BuFileFilter _filter){ + filter_=_filter; + } + + /* (non-Javadoc) + * @see org.fudaa.fudaa.sig.wizard.FSigFileLoaderI#createNew() + */ + public FSigFileLoaderI createNew() { + return new FSigFileLoaderMascaret(filter_); + } + + /* (non-Javadoc) + * @see org.fudaa.fudaa.sig.wizard.FSigFileLoaderI#getFileFilter() + */ + public BuFileFilter getFileFilter() { + return filter_; + } + + /* (non-Javadoc) + * @see org.fudaa.fudaa.sig.wizard.FSigFileLoaderI#setInResult(org.fudaa.fudaa.sig.wizard.FSigFileLoadResult, java.io.File, java.lang.String, org.fudaa.ctulu.ProgressionInterface, org.fudaa.ctulu.CtuluAnalyze) + */ + public void setInResult(FSigFileLoadResult _r, File _f, String _origine, ProgressionInterface _prog, CtuluAnalyze _analyze) { + final CtuluIOOperationSynthese op=new MascaretFileFormat().read(_f, _prog); + // En cas d'erreur, fin d'import. + if(op.containsMessages()&&op.getAnalyze().containsFatalError()||op.getAnalyze().containsErrors()||op.getAnalyze().containsInfos()||op.getAnalyze().containsWarnings()) + _analyze.merge(op.getAnalyze()); + if(op.containsMessages()&&op.getAnalyze().containsFatalError()) + return; + + GISZoneCollectionLigneBrisee lines=(GISZoneCollectionLigneBrisee)op.getSource(); + _r.nbPointTotal_+=lines.getNumPoints(); + _r.nbPolylignes_+=lines.getNumGeometries(); + // Ajout de l'attribut ETAT_GEOM + _r.findOrCreateAttribute(GISAttributeConstants.ETAT_GEOM.getID(), String.class, false); + GISDataModelAttributeAdapter adapter = new GISDataModelAttributeAdapter(lines); + adapter.addAttribut(GISAttributeConstants.ETAT_GEOM, _origine); + // + _r.ligneModel_.add(adapter); + _r.addUsedAttributes(GISLib.getAttributeFrom(lines)); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardFileMng.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardFileMng.java 2008-11-13 10:39:29 UTC (rev 4215) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigWizardFileMng.java 2008-11-14 11:10:52 UTC (rev 4216) @@ -155,6 +155,8 @@ addLoader(r, fmtLoader, new FSigFileLoaderReflucadPRO()); // reflux solution addLoader(r, fmtLoader, new FSigFileLoaderRefluxRefondeResult()); + // Mascaret + addLoader(r, fmtLoader, new FSigFileLoaderMascaret()); // les maillages addGridList(r, fmtLoader); final BuFileFilter[] filters = new BuFileFilter[r.size()]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-14 14:43:58
|
Revision: 4217 http://fudaa.svn.sourceforge.net/fudaa/?rev=4217&view=rev Author: bmarchan Date: 2008-11-14 14:43:52 +0000 (Fri, 14 Nov 2008) Log Message: ----------- Correction des messages a l'utilisateur. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java 2008-11-14 11:10:52 UTC (rev 4216) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java 2008-11-14 14:43:52 UTC (rev 4217) @@ -28,7 +28,7 @@ /** * Parser du format Mascaret. (versions 6.0 et pr\xE9c\xE9dentes) * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class MascaretReader extends FileReadOperationAbstract { @@ -41,22 +41,22 @@ public List<Double> coordZ=new ArrayList<Double>(); // Bathy ou Topo public List<Character> bathyOuTopo=new ArrayList<Character>(); // B ou T // Info sp\xE9cifique 1D - public double abscisseCurvilingeAxeHydrolique; + public double abscisseCurvilingeAxeHydraulique; public List<Double> coordCurviligneProfil=new ArrayList<Double>(); // Info sp\xE9cifique 2D public List<double[]> coordXYTraceProfil=new ArrayList<double[]>(); - public double[] coordIntersectionAxeHydrolique; + public double[] coordIntersectionAxeHydraulique; public List<double[]> coordXYProfil=new ArrayList<double[]>(); /** @return vrai si seul des informations 1d sont pr\xE9sentes. */ public boolean is1d(){ - return coordCurviligneProfil.size()>0&&coordXYTraceProfil.size()==0&&coordIntersectionAxeHydrolique==null + return coordCurviligneProfil.size()>0&&coordXYTraceProfil.size()==0&&coordIntersectionAxeHydraulique==null &&coordXYProfil.size()==0; } /** @return vrai si les informations 2d sont pr\xE9sentes. (les infos 1d peuvent \xEAtre \xE9galement pr\xE9sentes) */ public boolean is2d(){ - return (coordXYTraceProfil.size()!=0||coordIntersectionAxeHydrolique!=null&&coordIntersectionAxeHydrolique.length!=0||coordXYProfil + return (coordXYTraceProfil.size()!=0||coordIntersectionAxeHydraulique!=null&&coordIntersectionAxeHydraulique.length!=0||coordXYProfil .size()!=0); } @@ -72,7 +72,7 @@ /** @return vrai si les informations utile 1D sont compl\xE8tes et coh\xE9rentes. */ public boolean check1D(){ - boolean check=checkCommon()&&abscisseCurvilingeAxeHydrolique>=0&&coordCurviligneProfil.size()==coordZ.size(); + boolean check=checkCommon()&&abscisseCurvilingeAxeHydraulique>=0&&coordCurviligneProfil.size()==coordZ.size(); int i=0; // Verifi que l'ordre des coordonn\xE9es est croissant. while(check&&++i<coordCurviligneProfil.size()) @@ -83,7 +83,7 @@ /** @return vrai si les informations utile 2D sont compl\xE8tes et coh\xE9rentes. */ public boolean check2D(){ boolean check=checkCommon()&&coordXYTraceProfil.size()>=2&&coordXYTraceProfil.size()<=4 - &&coordIntersectionAxeHydrolique.length==2&&coordXYProfil.size()==coordZ.size(); + &&coordIntersectionAxeHydraulique.length==2&&coordXYProfil.size()==coordZ.size(); // Verification de la taille des coordonn\xE9es XY du profile int i=-1; while(check&&++i<coordXYProfil.size()) @@ -127,7 +127,7 @@ } /** - * @returnun token dont le caract\xE8re de s\xE9paration est le retour \xE0 la ligne. Null si rien \xE0 lire. + * @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(); @@ -189,16 +189,16 @@ // Extraction des informations commune \xE0 1d et 2d profil.nomBief=nextWordToken(lineToken); profil.nomProfil=nextWordToken(lineToken); - profil.abscisseCurvilingeAxeHydrolique=Double.parseDouble(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 hydrolique + // Coordonn\xE9e d'intersection du profile et de l'axe hydraulique if (token!=null&&token.equals("AXE")) - profil.coordIntersectionAxeHydrolique=new double[]{Double.parseDouble(nextWordToken(lineToken)), + profil.coordIntersectionAxeHydraulique=new double[]{Double.parseDouble(nextWordToken(lineToken)), Double.parseDouble(nextWordToken(lineToken))}; // Lignes suivantes : coordonn\xE9es du profile \\ @@ -215,7 +215,7 @@ } // Verification de la coh\xE9rance des informations if (profil.is1d()) - throw new ParseError(fileName_+DodicoLib.getS(" : les profiles 1D ne sont pas g\xE9r\xE9s")); + 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 @@ -263,16 +263,16 @@ zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_PF}, null); } if (profils_.size()>1) { - // G\xE9n\xE9ration de l'axe hydrolique \\ + // 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).coordIntersectionAxeHydrolique[0]); - coordSeq.setOrdinate(i, 1, profils_.get(i).coordIntersectionAxeHydrolique[1]); + coordSeq.setOrdinate(i, 0, profils_.get(i).coordIntersectionAxeHydraulique[0]); + coordSeq.setOrdinate(i, 1, profils_.get(i).coordIntersectionAxeHydraulique[1]); } zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{null, GISAttributeConstants.ATT_NATURE_AH}, null); } else - analyze_.addInfo(fileName_+DodicoLib.getS(" : le fichier ne comporte qu'un profile, aucun axe hydrolique ne sera g\xE9n\xE9r\xE9.")); + analyze_.addInfo(fileName_+DodicoLib.getS(" : le fichier ne comporte qu'un profil, aucun axe hydraulique ne sera g\xE9n\xE9r\xE9.")); return zone; } Modified: 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/FSigFileLoaderMascaret.java 2008-11-14 11:10:52 UTC (rev 4216) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java 2008-11-14 14:43:52 UTC (rev 4217) @@ -21,17 +21,17 @@ import com.memoire.bu.BuFileFilter; /** - * Loader des fichiers mascaret (extension : geomref). + * Loader des fichiers mascaret (extension : georef). * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class FSigFileLoaderMascaret implements FSigFileLoaderI { private BuFileFilter filter_; public FSigFileLoaderMascaret(){ - filter_=new BuFileFilter(new String[]{"geo", "georef"}, "Fichier mascaret"); + filter_=new BuFileFilter(new String[]{"geo", "georef"}, "Mascaret"); } private FSigFileLoaderMascaret(final BuFileFilter _filter){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-14 14:50:27
|
Revision: 4218 http://fudaa.svn.sourceforge.net/fudaa/?rev=4218&view=rev Author: bmarchan Date: 2008-11-14 14:50:16 +0000 (Fri, 14 Nov 2008) Log Message: ----------- D?\195?\169placement des classes de lecture Mascaret de mascaret -> marscaret.io. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/ 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 Removed Paths: ------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java 2008-11-14 14:43:52 UTC (rev 4217) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java 2008-11-14 14:50:16 UTC (rev 4218) @@ -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; - -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; - } - -} Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java 2008-11-14 14:43:52 UTC (rev 4217) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java 2008-11-14 14:50:16 UTC (rev 4218) @@ -1,307 +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; - -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 { - - /** - * Container des informations relative \xE0 un profil. - */ - private class Profil{ - public String nomBief; - public String nomProfil; - public List<Double> coordZ=new ArrayList<Double>(); // Bathy ou Topo - public List<Character> bathyOuTopo=new ArrayList<Character>(); // B ou T - // Info sp\xE9cifique 1D - public double abscisseCurvilingeAxeHydraulique; - public List<Double> coordCurviligneProfil=new ArrayList<Double>(); - // Info sp\xE9cifique 2D - public List<double[]> coordXYTraceProfil=new ArrayList<double[]>(); - public double[] coordIntersectionAxeHydraulique; - public List<double[]> coordXYProfil=new ArrayList<double[]>(); - - /** @return vrai si seul des informations 1d sont pr\xE9sentes. */ - public boolean is1d(){ - return coordCurviligneProfil.size()>0&&coordXYTraceProfil.size()==0&&coordIntersectionAxeHydraulique==null - &&coordXYProfil.size()==0; - } - - /** @return vrai si les informations 2d sont pr\xE9sentes. (les infos 1d peuvent \xEAtre \xE9galement pr\xE9sentes) */ - public boolean is2d(){ - return (coordXYTraceProfil.size()!=0||coordIntersectionAxeHydraulique!=null&&coordIntersectionAxeHydraulique.length!=0||coordXYProfil - .size()!=0); - } - - /** Check les attributs communs \xE0 1d et 2d. */ - private boolean checkCommon(){ - boolean check=nomBief.length()>0&&nomProfil.length()>0&&coordZ.size()>0&&bathyOuTopo.size()==coordZ.size(); - int i=-1; - // Verifi que bathyOuTopo ne comporte que B ou T - while(check&&++i<bathyOuTopo.size()) - check=bathyOuTopo.get(i).equals('T')||bathyOuTopo.get(i).equals('B'); - return check; - } - - /** @return vrai si les informations utile 1D sont compl\xE8tes et coh\xE9rentes. */ - public boolean check1D(){ - boolean check=checkCommon()&&abscisseCurvilingeAxeHydraulique>=0&&coordCurviligneProfil.size()==coordZ.size(); - int i=0; - // Verifi que l'ordre des coordonn\xE9es est croissant. - while(check&&++i<coordCurviligneProfil.size()) - check=coordCurviligneProfil.get(i-1)<=coordCurviligneProfil.get(i); - return check; - } - - /** @return vrai si les informations utile 2D sont compl\xE8tes et coh\xE9rentes. */ - public boolean check2D(){ - boolean check=checkCommon()&&coordXYTraceProfil.size()>=2&&coordXYTraceProfil.size()<=4 - &&coordIntersectionAxeHydraulique.length==2&&coordXYProfil.size()==coordZ.size(); - // Verification de la taille des coordonn\xE9es XY du profile - int i=-1; - while(check&&++i<coordXYProfil.size()) - check=coordXYProfil.get(i).length==2; - return check; - } - } - - /** 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<Profil> profils_=new ArrayList<Profil>(); - - 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")) { - Profil profil=new Profil(); - - // 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.bathyOuTopo.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}, 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)); - Profil 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]); - } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_TP}, null); - // Profil - coordSeq=new CoordinateArraySequence(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, profil.coordZ.get(i)); - } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_PF}, 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]); - } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{null, GISAttributeConstants.ATT_NATURE_AH}, 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/MascaretFileFormat.java (from rev 4216, branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java 2008-11-14 14:50:16 UTC (rev 4218) @@ -0,0 +1,38 @@ +/* + * @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; + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretFileFormat.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Added: svn:mergeinfo + /branches/Br_FudaaModeleur_TF/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java:3445-3850 /branches/FudaaModeleur_TC1/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretFileFormat.java:3861-3891 Added: svn:eol-style + native Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java (from rev 4217, branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java 2008-11-14 14:50:16 UTC (rev 4218) @@ -0,0 +1,307 @@ +/* + * @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 { + + /** + * Container des informations relative \xE0 un profil. + */ + private class Profil{ + public String nomBief; + public String nomProfil; + public List<Double> coordZ=new ArrayList<Double>(); // Bathy ou Topo + public List<Character> bathyOuTopo=new ArrayList<Character>(); // B ou T + // Info sp\xE9cifique 1D + public double abscisseCurvilingeAxeHydraulique; + public List<Double> coordCurviligneProfil=new ArrayList<Double>(); + // Info sp\xE9cifique 2D + public List<double[]> coordXYTraceProfil=new ArrayList<double[]>(); + public double[] coordIntersectionAxeHydraulique; + public List<double[]> coordXYProfil=new ArrayList<double[]>(); + + /** @return vrai si seul des informations 1d sont pr\xE9sentes. */ + public boolean is1d(){ + return coordCurviligneProfil.size()>0&&coordXYTraceProfil.size()==0&&coordIntersectionAxeHydraulique==null + &&coordXYProfil.size()==0; + } + + /** @return vrai si les informations 2d sont pr\xE9sentes. (les infos 1d peuvent \xEAtre \xE9galement pr\xE9sentes) */ + public boolean is2d(){ + return (coordXYTraceProfil.size()!=0||coordIntersectionAxeHydraulique!=null&&coordIntersectionAxeHydraulique.length!=0||coordXYProfil + .size()!=0); + } + + /** Check les attributs communs \xE0 1d et 2d. */ + private boolean checkCommon(){ + boolean check=nomBief.length()>0&&nomProfil.length()>0&&coordZ.size()>0&&bathyOuTopo.size()==coordZ.size(); + int i=-1; + // Verifi que bathyOuTopo ne comporte que B ou T + while(check&&++i<bathyOuTopo.size()) + check=bathyOuTopo.get(i).equals('T')||bathyOuTopo.get(i).equals('B'); + return check; + } + + /** @return vrai si les informations utile 1D sont compl\xE8tes et coh\xE9rentes. */ + public boolean check1D(){ + boolean check=checkCommon()&&abscisseCurvilingeAxeHydraulique>=0&&coordCurviligneProfil.size()==coordZ.size(); + int i=0; + // Verifi que l'ordre des coordonn\xE9es est croissant. + while(check&&++i<coordCurviligneProfil.size()) + check=coordCurviligneProfil.get(i-1)<=coordCurviligneProfil.get(i); + return check; + } + + /** @return vrai si les informations utile 2D sont compl\xE8tes et coh\xE9rentes. */ + public boolean check2D(){ + boolean check=checkCommon()&&coordXYTraceProfil.size()>=2&&coordXYTraceProfil.size()<=4 + &&coordIntersectionAxeHydraulique.length==2&&coordXYProfil.size()==coordZ.size(); + // Verification de la taille des coordonn\xE9es XY du profile + int i=-1; + while(check&&++i<coordXYProfil.size()) + check=coordXYProfil.get(i).length==2; + return check; + } + } + + /** 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<Profil> profils_=new ArrayList<Profil>(); + + 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")) { + Profil profil=new Profil(); + + // 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.bathyOuTopo.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}, 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)); + Profil 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]); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_TP}, null); + // Profil + coordSeq=new CoordinateArraySequence(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, profil.coordZ.get(i)); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_PF}, 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]); + } + zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{null, GISAttributeConstants.ATT_NATURE_AH}, 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) { + } + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Added: svn:mergeinfo + /branches/Br_FudaaModeleur_TF/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java:3445-3850 /branches/FudaaModeleur_TC1/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/MascaretReader.java:3861-3891 Added: svn:eol-style + native Modified: 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/FSigFileLoaderMascaret.java 2008-11-14 14:43:52 UTC (rev 4217) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java 2008-11-14 14:50:16 UTC (rev 4218) @@ -16,7 +16,7 @@ import org.fudaa.ctulu.gis.GISDataModelAttributeAdapter; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; -import org.fudaa.dodico.mascaret.MascaretFileFormat; +import org.fudaa.dodico.mascaret.io.MascaretFileFormat; import com.memoire.bu.BuFileFilter; Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderMascaret.java ___________________________________________________________________ Modified: svn:keywords - Id + Date Revision Author URL Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-17 14:54:33
|
Revision: 4221 http://fudaa.svn.sourceforge.net/fudaa/?rev=4221&view=rev Author: emmanuel_martin Date: 2008-11-17 14:54:27 +0000 (Mon, 17 Nov 2008) Log Message: ----------- tache #88 (CDC 11.3.1) : "Inverser des profils" Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.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/MdlSceneEditor.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/MdlModel2dLine.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/fleche.png branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/fleche.png =================================================================== (Binary files differ) Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/fleche.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:keywords + Id 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 2008-11-16 20:34:00 UTC (rev 4220) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -124,6 +124,8 @@ 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_; /** * @@ -142,9 +144,20 @@ iconModel_ = new TraceIconModel(TraceIcon.CARRE_PLEIN, 2, Color.BLACK); ligneModelOuvert_ = new TraceLigneModel(ligneModel_); iconeModelOuvert_ = new TraceIconModel(iconModel_); + showLineOrientation_=false; + } + public boolean getShowLineOrientation(){ + return showLineOrientation_; } - + + public void setShowLineOrientation(boolean _value){ + if(showLineOrientation_!=_value){ + showLineOrientation_=_value; + repaint(); + } + } + protected EbliListeSelectionMulti creeSelectionMulti() { return new EbliListeSelectionMulti(modeleDonnees().getNombre() / 2); } @@ -568,7 +581,19 @@ if (!isRapide()) initTrace(ligneModel, i); final GrPoint ptDest = new GrPoint(); - for (int j = nbPoints - 2; j >= 0; j--) { + // Dessine le premier segment avec une fleche si l'option est activ\xE9e + if(nbPoints>=2){ + modele_.point(ptDest, i, nbPoints - 2); + ptDest.autoApplique(versEcran); + // Pour les polygone \xE7a se passe plus loin + if(showLineOrientation_&&!modele_.isGeometryFermee(i)) + tl.dessineFleche(_g, (int)ptDest.x_, (int)ptDest.y_, (int)ptOri.x_, (int)ptOri.y_, 5, 3); + else + tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + ptOri.initialiseAvec(ptDest); + } + // Dessine le reste + for (int j = nbPoints - 3; j >= 0; j--) { // le point de dest est initialise modele_.point(ptDest, i, j); ptDest.autoApplique(versEcran); @@ -578,7 +603,11 @@ if (modele_.isGeometryFermee(i)) { modele_.point(ptOri, i, nbPoints - 1); ptOri.autoApplique(versEcran); - tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + // La fl\xE8che pour les polygone + if(showLineOrientation_) + tl.dessineFleche(_g, (int)ptOri.x_, (int)ptOri.y_, (int)ptDest.x_, (int)ptDest.y_, 5, 3); + else + tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); } modele_.point(ptOri, i, nbPoints - 1); ptOri.autoApplique(versEcran); Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -0,0 +1,80 @@ +/* + * @creation 14 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.ebli.calque.action; + +import javax.swing.event.TreeModelEvent; +import javax.swing.event.TreeModelListener; + +import org.fudaa.ebli.calque.BArbreCalqueModel; +import org.fudaa.ebli.calque.BCalque; +import org.fudaa.ebli.calque.BCalqueVisitor; +import org.fudaa.ebli.calque.ZCalqueLigneBrisee; +import org.fudaa.ebli.commun.EbliActionChangeState; +import org.fudaa.ebli.commun.EbliLib; + +import com.memoire.bu.BuResource; + +/** + * Une action pour montrer l'orientation des lignes dans les calques. + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class SceneShowOrientationAction extends EbliActionChangeState implements TreeModelListener { + + protected BArbreCalqueModel treeModel_; + + public SceneShowOrientationAction(BArbreCalqueModel _treeModel) { + super(EbliLib.getS("Affichage du sens des lignes"), BuResource.BU.getIcon("fleche"), "SHOW_ORIENTATION"); + treeModel_=_treeModel; + treeModel_.addTreeModelListener(this); + setEnabled(true); + } + + private void applyConf(){ + treeModel_.getRootCalque().apply(new BCalqueVisitor(){ + public boolean visit(BCalque _cq) { + if(_cq instanceof ZCalqueLigneBrisee) + ((ZCalqueLigneBrisee) _cq).setShowLineOrientation(isSelected()); + return true; + } + }); + } + + /* (non-Javadoc) + * @see javax.swing.event.TreeModelListener#treeNodesChanged(javax.swing.event.TreeModelEvent) + */ + public void treeNodesChanged(TreeModelEvent e) { + } + + /* (non-Javadoc) + * @see javax.swing.event.TreeModelListener#treeNodesInserted(javax.swing.event.TreeModelEvent) + */ + public void treeNodesInserted(TreeModelEvent e) { + applyConf(); + } + + /* (non-Javadoc) + * @see javax.swing.event.TreeModelListener#treeNodesRemoved(javax.swing.event.TreeModelEvent) + */ + public void treeNodesRemoved(TreeModelEvent e) { + } + + /* (non-Javadoc) + * @see javax.swing.event.TreeModelListener#treeStructureChanged(javax.swing.event.TreeModelEvent) + */ + public void treeStructureChanged(TreeModelEvent e) { + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.commun.EbliActionChangeState#changeAction() + */ + @Override + public void changeAction() { + applyConf(); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native 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 2008-11-16 20:34:00 UTC (rev 4220) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -29,6 +29,7 @@ import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.action.SceneDecimationAction; import org.fudaa.fudaa.modeleur.action.SceneInterpolationAction; +import org.fudaa.fudaa.modeleur.action.SceneInvertAction; import org.fudaa.fudaa.modeleur.action.SceneMoveInLayerAction; import org.fudaa.fudaa.modeleur.action.SceneProjectionAction; import org.fudaa.fudaa.modeleur.action.SceneRefinementAction; @@ -70,6 +71,7 @@ acts.add(new SceneMoveInLayerAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneDecimationAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneRefinementAction((MdlSceneEditor)sceneEditor_)); + acts.add(new SceneInvertAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneProjectionAction((MdlSceneEditor)sceneEditor_)); getSceneEditor().setActions(acts.toArray(new EbliActionAbstract[0])); } 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 2008-11-16 20:34:00 UTC (rev 4220) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -19,7 +19,9 @@ import javax.swing.JDialog; import javax.swing.JPanel; +import org.fudaa.ctulu.CtuluCommand; import org.fudaa.ctulu.CtuluCommandComposite; +import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.gis.GISAttributeConstants; @@ -454,4 +456,20 @@ } } } + + /** + * Inverse le sens de la polyligne. + */ + public void invertOrientationSelectedGeometries() { + CtuluCommandComposite cmd=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); + } + super.getScene().clearSelection(); + if (getMng()!=null) + getMng().addCmd(cmd.getSimplify()); + } } 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 2008-11-16 20:34:00 UTC (rev 4220) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -9,11 +9,16 @@ import javax.swing.Action; +import org.fudaa.ebli.calque.BArbreCalque; import org.fudaa.ebli.calque.BGroupeCalque; import org.fudaa.ebli.calque.ZSelectionEvent; import org.fudaa.ebli.calque.ZSelectionListener; +import org.fudaa.ebli.calque.action.SceneSelectNextAction; +import org.fudaa.ebli.calque.action.SceneSelectPreviousAction; +import org.fudaa.ebli.calque.action.SceneShowOrientationAction; import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.ebli.commun.EbliActionMap; +import org.fudaa.ebli.commun.EbliComponentFactory; import org.fudaa.ebli.ressource.EbliResource; import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.commun.impl.FudaaCommonImplementation; @@ -39,6 +44,8 @@ import org.fudaa.fudaa.sig.layer.FSigVisuPanel; import org.fudaa.fudaa.tr.common.TrResource; +import com.memoire.bu.BuMenu; + /** * Le panneau de visu 2D des donn\xE9es du modeleur au travers des calques. Contient le composant vue * des calques + le composant d'affichage des coordonn\xE9es + le composant d'affichage du mode de selection @@ -70,6 +77,15 @@ mng_=editor.getMng(); return editor; } + + protected EbliActionInterface[] getActionsInterface(){ + EbliActionInterface[] actions=super.getActionsInterface(); + EbliActionInterface[] allActions=new EbliActionInterface[actions.length+1]; + for(int i=0;i<actions.length;i++) + allActions[i]=actions[i]; + allActions[allActions.length-1]=new SceneShowOrientationAction(gisEditor_.getPanel().getArbreCalqueModel()); + return allActions; + } public FSigLayerGroup getGroupGIS() { return /*parent_*/null; Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -0,0 +1,66 @@ +/* + * @creation 14 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.fudaa.modeleur.action; + +import java.awt.event.ActionEvent; + +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZSelectionEvent; +import org.fudaa.ebli.calque.ZSelectionListener; +import org.fudaa.ebli.calque.ZScene.SceneSelectionHelper; +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.fudaa.modeleur.MdlSceneEditor; +import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine; + +/** + * Action permettant le changement de sens des polylignes selectionn\xE9es. + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class SceneInvertAction extends EbliActionSimple implements ZSelectionListener { + + protected MdlSceneEditor sceneEditor_; + + public SceneInvertAction(MdlSceneEditor _sceneEditor){ + super(EbliResource.EBLI.getString("Inverser"), null, "INVERSER"); + sceneEditor_=_sceneEditor; + sceneEditor_.getScene().addSelectionListener(this); + } + + public void actionPerformed(final ActionEvent _e) { + sceneEditor_.invertOrientationSelectedGeometries(); + } + + /** + * Autoris\xE9e si 1 ou plusieurs g\xE9om\xE9tries sont compl\xE8tes. + */ + public void updateForSelectionChanged() { + ZScene scn=sceneEditor_.getScene(); + SceneSelectionHelper hlp=sceneEditor_.getScene().getSelectionHelper(); + + boolean mdlLayer2dLine=true; + int i=-1; + int[] geom=hlp.getSelectedIndexes(); + while(mdlLayer2dLine&&++i<geom.length) + mdlLayer2dLine=scn.getLayerForId(geom[i]) instanceof MdlLayer2dLine; + + super.setEnabled(!scn.isSelectionEmpty()&&!scn.isAtomicMode()&&mdlLayer2dLine); + } + + public String getEnableCondition() { + return EbliResource.EBLI.getString("<p>En mode global, un ou plusieurs objet(s) de type polyligne ou polygone.</p>"); + } + + /* (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/SceneInvertAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native 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 2008-11-16 20:34:00 UTC (rev 4220) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -15,11 +15,14 @@ import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; +import org.fudaa.ctulu.CtuluNamedCommand; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; import org.fudaa.ebli.calque.ZModelGeometryListener; +import org.fudaa.ebli.calque.ZModelListener; import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; +import org.fudaa.fudaa.commun.FudaaLib; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; @@ -252,4 +255,33 @@ _cmd.addCmd(cmd.getSimplify()); return true; } + + /** + * Inverse le sens de la polyligne. + * @param _idxGeom index de la g\xE9om\xE9trie \xE0 inverser. + * @param _cmd Le container de commandes. + */ + public void invertOrientation(final int _idxGeom, CtuluCommandContainer _cmd){ + LineString geom=(LineString)getGeomData().getGeometry(_idxGeom); + CoordinateSequence seq=geom.getCoordinateSequence(); + for(int i=0;i<seq.size()/2;i++) + for(int j=0;j<3;j++){ + double valTmp=seq.getOrdinate(i, j); + seq.setOrdinate(i, j, seq.getOrdinate(seq.size()-1-i, j)); + seq.setOrdinate(seq.size()-1-i, j, valTmp); + } + fireModelAction(_idxGeom, geom, ZModelListener.GEOMETRY_ACTION_MODIFY); + if (_cmd!=null) + _cmd.addCmd(new CtuluNamedCommand() { + public void redo() { + invertOrientation(_idxGeom, null); + } + public void undo() { + invertOrientation(_idxGeom, null); + } + public String getName() { + return FudaaLib.getS("Inversion de l'orientation"); + } + }); + } } 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 2008-11-16 20:34:00 UTC (rev 4220) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java 2008-11-17 14:54:27 UTC (rev 4221) @@ -14,12 +14,9 @@ import javax.swing.JComponent; -import com.memoire.bu.BuMenu; - import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluUndoRedoInterface; - import org.fudaa.ebli.calque.BArbreCalque; import org.fudaa.ebli.calque.BGroupeCalque; import org.fudaa.ebli.calque.ZCalqueGrille; @@ -29,8 +26,9 @@ import org.fudaa.ebli.calque.action.EditVisibilityAction; import org.fudaa.ebli.calque.action.SceneDeplacementAction; import org.fudaa.ebli.calque.action.SceneRotationAction; +import org.fudaa.ebli.calque.action.SceneSelectNextAction; import org.fudaa.ebli.calque.action.SceneSelectPreviousAction; -import org.fudaa.ebli.calque.action.SceneSelectNextAction; +import org.fudaa.ebli.calque.action.SceneShowOrientationAction; import org.fudaa.ebli.calque.edition.ZCalqueDeplacement; import org.fudaa.ebli.calque.edition.ZCalqueEditionGroup; import org.fudaa.ebli.calque.edition.ZEditorDefault; @@ -38,10 +36,11 @@ import org.fudaa.ebli.commun.EbliComponentFactory; import org.fudaa.ebli.commun.EbliFormatter; import org.fudaa.ebli.commun.EbliSelectionMode; - import org.fudaa.fudaa.commun.impl.FudaaCommonImplementation; import org.fudaa.fudaa.sig.FSigAttibuteTypeManager; +import com.memoire.bu.BuMenu; + /** * Le panneau de visualisation 2D g\xE9rant les calques. Cette classe ajoute la gestion * les calques SIG et des services associ\xE9s. @@ -120,16 +119,24 @@ return editor; } + /** + * @return un tableau contenant les actions sp\xE9cifiques \xE0 l'application qui + * seront dans le menu Vue2D. + */ + protected EbliActionInterface[] getActionsInterface(){ + return new EbliActionInterface[] { + null, + new SceneSelectPreviousAction(gisEditor_.getSceneEditor()), + new SceneSelectNextAction(gisEditor_.getSceneEditor()) + }; + } + protected BuMenu[] createSpecificMenus(final String _title) { final BuMenu[] res = new BuMenu[2]; res[0] = new BuMenu(_title, "LAYER"); res[0].setIcon(null); res[0].add(BArbreCalque.buildZNormalMenu(modelArbre_)); - EbliComponentFactory.INSTANCE.addActionsToMenu(new EbliActionInterface[] { - null, - new SceneSelectPreviousAction(gisEditor_.getSceneEditor()), - new SceneSelectNextAction(gisEditor_.getSceneEditor()) - },res[0]); + EbliComponentFactory.INSTANCE.addActionsToMenu(getActionsInterface(),res[0]); fillMenuWithToolsActions(res[0]); res[1] = getThemeMenu(); res[1].setMnemonic(res[1].getText().charAt(0)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-18 17:19:48
|
Revision: 4222 http://fudaa.svn.sourceforge.net/fudaa/?rev=4222&view=rev Author: emmanuel_martin Date: 2008-11-18 17:19:43 +0000 (Tue, 18 Nov 2008) Log Message: ----------- Tache #24 :"Outil de distance inexistant." Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/curseur_distance.gif Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java 2008-11-18 17:19:43 UTC (rev 4222) @@ -0,0 +1,88 @@ +/* + * @creation 17 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.ebli.calque.action; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.event.InternalFrameEvent; + +import org.fudaa.ebli.calque.BCalqueInteraction; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.calque.edition.BPaletteDistance; +import org.fudaa.ebli.calque.edition.ZCalqueDistanceInteraction; +import org.fudaa.ebli.calque.edition.ZEditorDefault; +import org.fudaa.ebli.commun.BPalettePanelInterface; +import org.fudaa.ebli.commun.EbliActionPaletteSpecAbstract; +import org.fudaa.ebli.commun.EbliFormatterInterface; +import org.fudaa.ebli.ressource.EbliResource; + +/** + * Une action pour afficher une palette indiquant la distance entre une s\xE9rie de + * points. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class SceneShowDistanceAction extends EbliActionPaletteSpecAbstract implements PropertyChangeListener { + + private ZEbliCalquesPanel calquesPanel_; + // Calque ne fermant pas l'edition \\ + private BCalqueInteraction calqueZoom_; + private BCalqueInteraction calqueDeplacementVue_; + /** Le calque contenant les informations de distance. */ + private ZCalqueDistanceInteraction calqueDistance_; + protected EbliFormatterInterface formatter_; + + public SceneShowDistanceAction(final ZEditorDefault _editor, EbliFormatterInterface _formatter) { + super(EbliResource.EBLI.getString("Distance"), EbliResource.EBLI.getToolIcon("bu_scrollpane_corner"), "PALETTE_DISTANCE"); + formatter_=_formatter; + calquesPanel_=_editor.getPanel(); + calquesPanel_.getController().addPropertyChangeListener("gele", this); + calqueZoom_=calquesPanel_.getController().getCalqueInteraction("cqAGRANDIR"); + calqueDeplacementVue_=calquesPanel_.getController().getCalqueInteraction("cqDEPLACEMENT_VUE-I"); + calqueDistance_=new ZCalqueDistanceInteraction(); + calqueDistance_.setGele(true); + calquesPanel_.addCalqueInteraction(calqueDistance_); + calqueDistance_.addPropertyChangeListener("gele", this); + setResizable(true); + setEnabled(true); + } + + @Override + public void changeAction() { + super.changeAction(); + if (isSelected()) + calquesPanel_.setCalqueInteractionActif(calqueDistance_); + else{ + calqueDistance_.cancelEdition(); + calquesPanel_.unsetCalqueInteractionActif(calqueDistance_); + if (calquesPanel_.getController().getCqSelectionI()!=null) + calquesPanel_.getController().getCqSelectionI().setGele(false); + } + } + + protected BPalettePanelInterface buildPaletteContent() { + return new BPaletteDistance(calqueDistance_, formatter_, calquesPanel_); + } + + public void propertyChange(PropertyChangeEvent _evt) { + // Cas un autre calque que celui du zoom, du deplacement de vue et d'edition + // est d\xE9gel\xE9 donc on ferme le pannel d'edition si il \xE9tait ouvert. + if (_evt.getSource()!=calqueZoom_&&_evt.getSource()!=calqueDeplacementVue_&&_evt.getSource()!=calqueDistance_ + &&!((Boolean)_evt.getNewValue()).booleanValue()) { + calqueDistance_.cancelEdition(); + } + } + + public void internalFrameClosing(InternalFrameEvent e) { + calqueDistance_.cancelEdition(); + if (calquesPanel_.getController().getCqSelectionI()!=null) + calquesPanel_.getController().getCqSelectionI().setGele(false); + } +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowDistanceAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java 2008-11-18 17:19:43 UTC (rev 4222) @@ -0,0 +1,110 @@ +/* + * @creation 18 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.ebli.calque.edition; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.BorderFactory; +import javax.swing.JComponent; + +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.commun.BPalettePanelInterface; +import org.fudaa.ebli.commun.EbliFormatterInterface; +import org.fudaa.ebli.commun.EbliLib; + +import com.memoire.bu.BuButton; +import com.memoire.bu.BuLabel; +import com.memoire.bu.BuPanel; + +/** + * Palette affichant les informations de distances. + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class BPaletteDistance extends BuPanel implements ActionListener, BPalettePanelInterface, PropertyChangeListener { + + /** Label affichant la distance cumul\xE9e. */ + protected BuLabel lblDistanceCumulee_=new BuLabel(); + /** Label affichant la distance en cours. */ + protected BuLabel lblDistanceEnCours_=new BuLabel(); + /** Le calque qui contient les informations de distance. */ + protected ZCalqueDistanceInteraction calqueDistance_; + /** Le bouton 'continuer'. */ + protected BuButton btContinuer_=new BuButton(EbliLib.getS("Continuer")); + protected EbliFormatterInterface formatter_; + private ZEbliCalquesPanel calquesPanel_; + + public BPaletteDistance(ZCalqueDistanceInteraction _calqueDistance, EbliFormatterInterface _formatter, ZEbliCalquesPanel _calquesPanel){ + calquesPanel_=_calquesPanel; + calqueDistance_=_calqueDistance; + calqueDistance_.addDistanceChangeListener(this); + calqueDistance_.addPropertyChangeListener("gele", this); + formatter_=_formatter; + // Construction du panel \\ + setLayout(new BorderLayout()); + // Titre + BuLabel lblTitre=new BuLabel("<html><b>"+EbliLib.getS("Distance")+"</b></html>"); + lblTitre.setHorizontalAlignment(BuLabel.CENTER); + add(lblTitre, BorderLayout.NORTH); + // Contenu + Container body=new Container(); + body.setLayout(new GridLayout(2, 2, 2, 2)); + body.add(new BuLabel("En cours : ")); + body.add(lblDistanceEnCours_); + body.add(new BuLabel("Cumul\xE9e : ")); + body.add(lblDistanceCumulee_); + add(body, BorderLayout.CENTER); + // Bouton reprise + add(btContinuer_, BorderLayout.SOUTH); + btContinuer_.addActionListener(this); + // Affichage + setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); + setVisible(true); + // Valeurs \\ + updateValues(); + } + + /** Met \xE0 jours les valeurs des labels de distance. */ + protected void updateValues(){ + lblDistanceEnCours_.setText(formatter_.getXYFormatter().format(calqueDistance_.getDistanceVariable())); + lblDistanceCumulee_.setText(formatter_.getXYFormatter().format(calqueDistance_.getDistanceCumulee())); + } + + public JComponent getComponent() { + return this; + } + + public boolean setPalettePanelTarget(Object _target) { + return false; + } + + public void paletteDeactivated() {} + + public void doAfterDisplay() {} + + public void propertyChange(PropertyChangeEvent evt) { + if(evt.getPropertyName().equals("gele")) + btContinuer_.setEnabled((Boolean) evt.getNewValue()); + else if(evt.getPropertyName().equals("distance")) + updateValues(); + } + + /* (non-Javadoc) + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + public void actionPerformed(ActionEvent e) { + calquesPanel_.setCalqueInteractionActif(calqueDistance_); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteDistance.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java 2008-11-18 17:19:43 UTC (rev 4222) @@ -0,0 +1,234 @@ +/* + * @creation 17 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.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 java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.List; + +import org.fudaa.ebli.calque.BCalqueInteraction; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.ebli.trace.TraceLigne; + +import com.memoire.bu.BuResource; +import com.vividsolutions.jts.geom.Coordinate; + +/** + * Permet de visionner des distances. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class ZCalqueDistanceInteraction extends BCalqueInteraction implements MouseListener, MouseMotionListener { + + /** Liste des points composant le chemin affich\xE9. Se sont des coordonn\xE9s r\xE9els. */ + protected List<Coordinate> chemin_=new ArrayList<Coordinate>(); + /** La coordonn\xE9e correspondant \xE0 la position de la souris. C'est une coordonn\xE9s \xE9cran. */ + protected Coordinate coordSouris_=new Coordinate(); + /** Indique si un chemin est dessin\xE9 \xE0 l'\xE9cran. */ + private boolean cheminIsPaint_=false; + /** Indique si la partie variable (du dernier point \xE0 la souris) est dessin\xE9e \xE0 l'\xE9cran. */ + private boolean variableIsPaint_=false; + /** Traceur de ligne. */ + private TraceLigne traceLigne_=new TraceLigne(TraceLigne.LISSE, 1.5f, Color.RED); + /** Indique si la saisie du chemin est termin\xE9e. */ + protected boolean cheminComplet_=false; + /** Indique si la touche 'CTRL' est active. */ + protected boolean ctrlActif_=false; + /** Listener des distances. */ + private List<PropertyChangeListener> listeners_=new ArrayList<PropertyChangeListener>(); + + public ZCalqueDistanceInteraction(){ + setName("cqInteractifDistance"); + } + + // M\xE9thodes utilitaires \\ + + /** Converti une coordonn\xE9e reel en coordonn\xE9e \xE9cran. */ + protected Coordinate reelToEcran(Coordinate coord){ + GrPoint tmp=new GrPoint(coord.x, coord.y, 0); + tmp.autoApplique(getVersEcran()); + return new Coordinate(tmp.x_, tmp.y_); + } + + /** Converti une coordonn\xE9e reel en coordonn\xE9e \xE9cran. */ + protected Coordinate ecranToReel(Coordinate coord){ + GrPoint tmp=new GrPoint(coord.x, coord.y, 0); + tmp.autoApplique(getVersReel()); + return new Coordinate(tmp.x_, tmp.y_); + } + + /** Dessine un trait en mode XOR \xE0 l'\xE9cran entre les deux coordonn\xE9es fournies. */ + private void dessineTrait(Graphics2D _g, Coordinate coor1, Coordinate coord2){ + _g.setXORMode(getBackground()); + traceLigne_.dessineTrait(_g, coor1.x, coor1.y, coord2.x, coord2.y); + } + + // M\xE9thodes d\xE9riv\xE9es \\ + + public Cursor getSpecificCursor() { + return EbliResource.EBLI.getCursor("curseur_distance", -1, new Point(2, 2)); + } + + public boolean alwaysPaint() { + return true; + } + + public String getDescription() { + return BuResource.BU.getString("Distance"); + } + + public void paintComponent(final Graphics _g) { + effaceChemin(); + super.paintComponent(_g); + // Affichage du chemin avec le graphics pass\xE9 en param\xE8tre + if(chemin_.size()>1){ + for(int i=1; i<chemin_.size();i++) + dessineTrait((Graphics2D) _g, reelToEcran(chemin_.get(i-1)), reelToEcran(chemin_.get(i))); + cheminIsPaint_=true; + } + } + + // M\xE9thodes de base de dessin du chemin \\ + + /** Dessine tout le chemin \xE0 l'\xE9cran sauf la partie variable (du dernier point \xE0 la souris). */ + protected void afficheChemin(){ + if(!cheminIsPaint_&&chemin_.size()>1){ + for(int i=1; i<chemin_.size();i++) + dessineTrait((Graphics2D) getGraphics(), reelToEcran(chemin_.get(i-1)), reelToEcran(chemin_.get(i))); + cheminIsPaint_=true; + } + } + /** Efface tout le chemin \xE0 l'\xE9cran sauf la partie cariable (du dernier point \xE0 la souris).*/ + protected void effaceChemin(){ + if(cheminIsPaint_&&chemin_.size()>1){ + for(int i=1; i<chemin_.size();i++) + dessineTrait((Graphics2D) getGraphics(), reelToEcran(chemin_.get(i-1)), reelToEcran(chemin_.get(i))); + cheminIsPaint_=false; + } + } + /** Dessine la partie variable (du dernier point \xE0 la souris) \xE0 l'\xE9cran. */ + protected void afficheVariable(){ + if(!variableIsPaint_&&chemin_.size()>=1){ + dessineTrait((Graphics2D) getGraphics(), reelToEcran(chemin_.get(chemin_.size()-1)), coordSouris_); + variableIsPaint_=true; + } + } + /** Efface la partie variable (du dernier point \xE0 la souris) \xE0 l'\xE9cran. */ + protected void effaceVariable(){ + if(variableIsPaint_&&chemin_.size()>=1){ + dessineTrait((Graphics2D) getGraphics(), reelToEcran(chemin_.get(chemin_.size()-1)), coordSouris_); + variableIsPaint_=false; + } + } + + // M\xE9thodes de controle ext\xE9rieur et de r\xE9cup\xE9ration d'informations. \\ + + /** Annule l'\xE9dition en cours. */ + public void cancelEdition() { + effaceChemin(); + effaceVariable(); + chemin_.clear(); + cheminComplet_=true; + repaint(); + } + + /** @return retourne la distance totale. */ + public double getDistanceCumulee(){ + double distance=getDistanceVariable(); + for(int i=1; i<chemin_.size();i++) + distance+=chemin_.get(i-1).distance(chemin_.get(i)); + return distance; + } + + /** @return retourne la distance variable (du dernier point \xE0 la souris). */ + public double getDistanceVariable(){ + if(chemin_.size()>=1) + return chemin_.get(chemin_.size()-1).distance(ecranToReel(coordSouris_)); + else + return 0; + } + + public void addDistanceChangeListener(PropertyChangeListener _listener){ + if(!listeners_.contains(_listener)) + listeners_.add(_listener); + } + + public void removeDistanceChangeListener(PropertyChangeListener _listener){ + if(listeners_.contains(_listener)) + listeners_.remove(_listener); + } + + protected void fireDistanceChangeListener(){ + for(PropertyChangeListener listener:listeners_) + listener.propertyChange(new PropertyChangeEvent(this, "distance", null, null)); + } + + // M\xE9thodes g\xE9rant les \xE9v\xE9nements. \\ + + public void mouseClicked(final MouseEvent _evt) { + } + + public void mouseEntered(final MouseEvent _evt) { + // Affichage du chemin sans XOR pour r\xE9afficher correctement la forme apr\xE8s un d\xE9placement des fen\xEAtre + for(int i=1; i<chemin_.size();i++) + traceLigne_.dessineTrait((Graphics2D) getGraphics(), reelToEcran(chemin_.get(i-1)).x, reelToEcran(chemin_.get(i-1)).y, reelToEcran(chemin_.get(i)).x, reelToEcran(chemin_.get(i)).y); + } + + public void mousePressed(final MouseEvent _evt) { + } + + public void mouseDragged(final MouseEvent _evt) { + mouseMoved(_evt); + } + + public void mouseExited(final MouseEvent _evt) { + effaceVariable(); + } + + /** Met \xE0 jour la partie variable du chemin. */ + public void mouseMoved(final MouseEvent _evt) { + if(!isGele()&&!cheminComplet_){ + effaceVariable(); + coordSouris_.x=_evt.getX(); + coordSouris_.y=_evt.getY(); + afficheVariable(); + fireDistanceChangeListener(); + } + } + + public void mouseReleased(final MouseEvent _evt) { + if (!isGele()&&_evt.getButton()==MouseEvent.BUTTON1) { + effaceChemin(); + effaceVariable(); + coordSouris_.x=_evt.getX(); + coordSouris_.y=_evt.getY(); + // Si le chemin \xE9tait d\xE9j\xE0 complet, on reprend \xE0 0 + if(cheminComplet_){ + chemin_.clear(); + cheminComplet_=false; + repaint(); + } + chemin_.add(ecranToReel(new Coordinate(_evt.getX(), _evt.getY()))); + // Si c'est le dernier point, le chemin est termin\xE9 + cheminComplet_=chemin_.size()>1&&getDistanceCumulee()>0&&(_evt.getClickCount()>=2||_evt.isControlDown()); + afficheChemin(); + fireDistanceChangeListener(); + } + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/curseur_distance.gif =================================================================== (Binary files differ) Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/ressource/curseur_distance.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: svn:keywords + Id 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 2008-11-17 14:54:27 UTC (rev 4221) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java 2008-11-18 17:19:43 UTC (rev 4222) @@ -28,7 +28,7 @@ import org.fudaa.ebli.calque.action.SceneRotationAction; import org.fudaa.ebli.calque.action.SceneSelectNextAction; import org.fudaa.ebli.calque.action.SceneSelectPreviousAction; -import org.fudaa.ebli.calque.action.SceneShowOrientationAction; +import org.fudaa.ebli.calque.action.SceneShowDistanceAction; import org.fudaa.ebli.calque.edition.ZCalqueDeplacement; import org.fudaa.ebli.calque.edition.ZCalqueEditionGroup; import org.fudaa.ebli.calque.edition.ZEditorDefault; @@ -179,6 +179,7 @@ arrayList.add(new SceneRotationAction(getArbreCalqueModel().getTreeSelectionModel(), gisEditor_, gisEditor_.getSceneEditor(),getEbliFormatter())); arrayList.add(new SceneDeplacementAction(getArbreCalqueModel().getTreeSelectionModel(), gisEditor_.getSceneEditor(),getEbliFormatter(), getCalqueDeplacement())); arrayList.add(new EditVisibilityAction(getArbreCalqueModel(), getScene(), mng_)); + arrayList.add(new SceneShowDistanceAction(gisEditor_, getEbliFormatter())); return (EbliActionInterface[]) arrayList.toArray(new EbliActionInterface[arrayList.size()]); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-18 17:25:36
|
Revision: 4223 http://fudaa.svn.sourceforge.net/fudaa/?rev=4223&view=rev Author: bmarchan Date: 2008-11-18 17:25:33 +0000 (Tue, 18 Nov 2008) Log Message: ----------- Enregistrement du num?\195?\169ro de version software dans le fichier projet. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.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/commun/save/FudaaSaveProject.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigProjectPersistence.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/test/org/fudaa/fudaa/all/TestJProjectSave.java 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 2008-11-18 17:19:43 UTC (rev 4222) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2008-11-18 17:25:33 UTC (rev 4223) @@ -706,9 +706,6 @@ * @param _calque Peut \xEAtre null. */ public void setCalqueActif(BCalque _calque) { - if (FuLog.isTrace()) { - FuLog.trace("EBL: calque actif=" + (_calque == null ? "null" : _calque.getTitle())); - } boolean sendEvent=false; @@ -804,7 +801,6 @@ * @see javax.swing.event.TreeModelListener#treeNodesInserted(javax.swing.event.TreeModelEvent) */ public void treeNodesInserted(TreeModelEvent e) { - FuLog.warning("ZScene.treeNodesInserted"); refreshRequested(); } @@ -812,7 +808,6 @@ * @see javax.swing.event.TreeModelListener#treeNodesRemoved(javax.swing.event.TreeModelEvent) */ public void treeNodesRemoved(TreeModelEvent e) { - FuLog.warning("ZScene.treeNodesRemoved"); refreshRequested(); } @@ -820,7 +815,6 @@ * @see javax.swing.event.TreeModelListener#treeStructureChanged(javax.swing.event.TreeModelEvent) */ public void treeStructureChanged(TreeModelEvent e) { - FuLog.warning("ZScene.treeStructureChanged"); refreshRequested(); } 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 2008-11-18 17:19:43 UTC (rev 4222) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2008-11-18 17:25:33 UTC (rev 4223) @@ -704,9 +704,6 @@ } updatePalette(); activeCurrentState(); - if (FuLog.isTrace()) { - FuLog.trace("EBL:target=" + _o); - } } public final void setDesktop(final BuDesktop _desktop) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/save/FudaaSaveProject.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/save/FudaaSaveProject.java 2008-11-18 17:19:43 UTC (rev 4222) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/save/FudaaSaveProject.java 2008-11-18 17:25:33 UTC (rev 4223) @@ -22,6 +22,7 @@ import com.memoire.bu.BuIcon; import com.memoire.bu.BuInformationsDocument; +import com.memoire.bu.BuInformationsSoftware; import com.memoire.bu.BuLib; import com.memoire.fu.FuLog; @@ -45,10 +46,10 @@ private FudaaSaveProject() {} /** - * Enregistre les informations fichier (version, format, etc.) sur le flux courant. + * Enregistre les informations li\xE9es au syst\xE8me de mod\xE9lisation (syst\xE8me, version, etc.) sur le flux courant. * * @param _writer Le flux pour l'ecriture. - * @param _soft Les informations fichier. + * @param _soft Les informations syst\xE8me de mod\xE9lisation. Peut \xEAtre null. * @throws IOException En cas d'erreur d'\xE9criture dans le zip. */ public static void saveIn(final FudaaSaveZipWriter _writer, final FileFormatSoftware _soft) throws IOException { @@ -64,15 +65,17 @@ } } + /** - * Enregistre les donn\xE9es g\xE9n\xE9rales du projet sur le flux courant. Le nom de l'auteur, le titre, etc. + * Enregistre les donn\xE9es g\xE9n\xE9rales du document sur le flux courant. Le nom de l'auteur, le titre, etc. * @param _writer Le flux pour l'ecriture. - * @param _soft Les donn\xE9es g\xE9n\xE9rales. + * @param _doc Les donn\xE9es g\xE9n\xE9rales du document. Peut \xEAtre null. + * @param _soft Les infos du soft qui a g\xE9n\xE9r\xE9 le document. Peut \xEAtre null. * @throws IOException En cas d'erreur d'\xE9criture dans le zip. */ - public static void saveIn(final FudaaSaveZipWriter _writer, final BuInformationsDocument _soft) throws IOException { - if (_soft != null) { + public static void saveIn(final FudaaSaveZipWriter _writer, final BuInformationsDocument _doc, final BuInformationsSoftware _soft) throws IOException { + if (_doc != null) { String logo = null; _writer.startEntry("project.xml"); final CtuluXmlWriter writer = new CtuluXmlWriter(_writer.getOutStream()); @@ -81,38 +84,51 @@ writer.setMainTag("document"); writer.writeComment("Dernier enregistrement"); writer.writeComment("Last save session"); - writer.writeEntry("date", FudaaLib.getDefaultDateFormat().format(new Date())); - if (_soft.name != null) { + + // Infos sur le software. + if (_soft!=null) { + if (_soft.name!=null) { + writer.writeComment("Nom de l'application"); + writer.writeComment("Software name"); + writer.writeEntry("software.name", _soft.name); + } + if (_soft.version!=null) { + writer.writeComment("Version de l'application"); + writer.writeComment("Software version"); + writer.writeEntry("software.version", _soft.version); + } + } + if (_doc.name != null) { writer.writeComment("Le nom du projet"); writer.writeComment("The title of the project"); - writer.writeEntry("title", _soft.name); + writer.writeEntry("title", _doc.name); } writer.write(CtuluLibString.LINE_SEP); writer.writeComment("Le responsable"); writer.writeComment("The author"); writer.write(CtuluLibString.LINE_SEP); - if (_soft.author != null) { + if (_doc.author != null) { writer.writeComment("Le responsable du projet"); writer.writeComment("The responsable of the author"); - writer.writeEntry("author", _soft.author); + writer.writeEntry("author", _doc.author); } - if (_soft.organization != null) { + if (_doc.organization != null) { writer.writeComment("L'organisation du responsable"); writer.writeComment("The author's organization"); - writer.writeEntry("organization", _soft.organization); + writer.writeEntry("organization", _doc.organization); } - if (_soft.department != null) { + if (_doc.department != null) { writer.writeComment("Le d\xE9partement du responsable"); writer.writeComment("The author's department"); - writer.writeEntry("department", _soft.department); + writer.writeEntry("department", _doc.department); } - if (_soft.contact != null) { + if (_doc.contact != null) { writer.writeComment("Un contact pour le responsable (email, tel, ..)"); writer.writeComment("how to contact the author (email, phone, ...)"); - writer.writeEntry("contact", _soft.contact); + writer.writeEntry("contact", _doc.contact); } - if (_soft.logo != null) { + if (_doc.logo != null) { writer.writeComment("Le nom du fichier image contenant le logo ( present dans l'archive)"); writer.writeComment("The filename of the logo"); logo = "author-logo.png"; @@ -121,20 +137,21 @@ writer.write(CtuluLibString.LINE_SEP); writer.writeComment("Description du projet"); writer.writeComment("Project's description"); - if (_soft.comment != null) { + if (_doc.comment != null) { writer.writeComment("Description g\xE9n\xE9ral sur le projet"); writer.writeComment("General description of the project"); - writer.writeEntry("description", _soft.comment); + writer.writeEntry("description", _doc.comment); } writer.write(CtuluLibString.LINE_SEP); - final Object o = _soft.data; + final Object o = _doc.data; if (o != null && o instanceof FudaaCommentModel) { ((FudaaCommentModel) o).writeIn(writer); } writer.finish(); + if (logo != null) { _writer.startEntry(logo); - ImageIO.write(BuLib.convert(_soft.logo.getImage()), "png", _writer.getOutStream()); + ImageIO.write(BuLib.convert(_doc.logo.getImage()), "png", _writer.getOutStream()); _writer.getOutStream().flush(); } } @@ -185,6 +202,40 @@ } /** + * Charge les infos software du projet depuis le flux courant. Le nom de l'application, la version, etc. + * @param _loader Le flux pour le chargement. + * @return Les infos software. + * @throws IOException En cas d'erreur de lecture, si le fichier n'est pas pr\xE9sent dans le zip. + */ + public static BuInformationsSoftware getSoftwareInfos(final FudaaSaveZipLoader _loader) throws IOException { + if (_loader == null) { + return null; + } + final InputStream in = _loader.getInputStream("project.xml"); + if (in == null) { + return null; + } + CtuluXmlReaderHelper reader = null; + try { + reader = new CtuluXmlReaderHelper(in); + } catch (final SAXException _evt) { + FuLog.error(_evt); + + } catch (final ParserConfigurationException _evt) { + FuLog.error(_evt); + + } + if (reader == null) { + return null; + } + final BuInformationsSoftware soft = new BuInformationsSoftware(); + soft.name = reader.getTrimTextFor("software.name"); + soft.version = reader.getTrimTextFor("software.version"); + return soft; + + } + + /** * Charge les informations fichier (version, format, etc.) depuis le flux courant. * @param _loader Le flux pour le chargement. * @return Les informations fichier. Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java 2008-11-18 17:19:43 UTC (rev 4222) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java 2008-11-18 17:25:33 UTC (rev 4223) @@ -46,6 +46,7 @@ import org.fudaa.fudaa.commun.impl.FudaaLookPreferencesPanel; import org.fudaa.fudaa.commun.impl.FudaaStartupExitPreferencesPanel; import org.fudaa.fudaa.commun.save.FudaaSaveLib; +import org.fudaa.fudaa.commun.save.FudaaSaveProject; import org.fudaa.fudaa.commun.save.FudaaSaveZipLoader; import org.fudaa.fudaa.sig.FSigLib; import org.fudaa.fudaa.sig.FSigProjectPersistence; @@ -86,7 +87,7 @@ protected static BuInformationsSoftware isMdl_ = new BuInformationsSoftware(); static { isMdl_.name = "Modeleur"; - isMdl_.version = "0.07"; + isMdl_.version = "0.08-alpha"; isMdl_.date = "2008-11-12"; isMdl_.rights = "Tous droits r\xE9serv\xE9s. CETMEF (c)1999-2008"; isMdl_.license = "GPL2"; @@ -156,8 +157,6 @@ * Mise \xE0 jour de l'\xE9tat des boutons. */ void updateActionsState() { - FuLog.trace("Project state change"); - boolean bprjOpen=project_!=null; boolean bprjModPar=bprjOpen && project_.getProjectState().isParamsModified(); boolean buiMod=bprjOpen && project_.getProjectState().isUIModified(); @@ -346,7 +345,18 @@ project_.setOpening(true); Runnable r = null; try { - r = FudaaSaveLib.restoreFille(MdlImplementation.this, currentFrame_, _proj, f); + try { + FudaaSaveZipLoader loader=new FudaaSaveZipLoader(f); + // Recup des infos pour utilisateur. + BuInformationsSoftware is=FudaaSaveProject.getSoftwareInfos(loader); + FuLog.warning("File version : "+(is.version==null ? "Undefined":is.version)); + + r= FudaaSaveLib.restoreFille(MdlImplementation.this, currentFrame_, _proj,loader); + } catch (final IOException _evt) { + FuLog.error(_evt); + + } + project_.setParamFile(f); } finally { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigProjectPersistence.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigProjectPersistence.java 2008-11-18 17:19:43 UTC (rev 4222) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigProjectPersistence.java 2008-11-18 17:25:33 UTC (rev 4223) @@ -68,7 +68,7 @@ writer = new FudaaSaveZipWriter(zipFile); FSigLib.addReadmeFile(writer); FudaaSaveProject.saveIn(writer, _proj.getSystemVersion()); - FudaaSaveProject.saveIn(writer, _proj.getInformationsDocument()); + FudaaSaveProject.saveIn(writer, _proj.getInformationsDocument(), _impl.getInformationsSoftware()); final ObjectContainer cont = writer.getDb(); // final FudaaSaveMainData data = new FudaaSaveMainData(); // data.infoDoc_ = _proj.getInformationsDocument(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/test/org/fudaa/fudaa/all/TestJProjectSave.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/test/org/fudaa/fudaa/all/TestJProjectSave.java 2008-11-18 17:19:43 UTC (rev 4222) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/test/org/fudaa/fudaa/all/TestJProjectSave.java 2008-11-18 17:25:33 UTC (rev 4223) @@ -13,6 +13,7 @@ import junit.framework.TestCase; import com.memoire.bu.BuInformationsDocument; +import com.memoire.bu.BuInformationsSoftware; import org.fudaa.ctulu.CtuluXmlReaderHelper; import org.fudaa.ctulu.CtuluXmlWriter; @@ -64,12 +65,15 @@ f = File.createTempFile("toto", ".fzip"); assertNotNull(f); final BuInformationsDocument doc = new BuInformationsDocument(null); + final BuInformationsSoftware soft=new BuInformationsSoftware(); + soft.name="TesterSoft"; + soft.version="0.01"; doc.author = "Auteur"; doc.comment = "commentaires\n sur des lignes"; // doc.logo = FudaaResource.FUDAA.getIcon("fudaa-logo.png"); doc.data = createComment(); final FudaaSaveZipWriter writer = new FudaaSaveZipWriter(f); - FudaaSaveProject.saveIn(writer, doc); + FudaaSaveProject.saveIn(writer, doc,soft); writer.close(); final FudaaSaveZipLoader loader = new FudaaSaveZipLoader(f); final BuInformationsDocument doc2 = FudaaSaveProject.loadInfo(loader); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-19 09:52:17
|
Revision: 4225 http://fudaa.svn.sourceforge.net/fudaa/?rev=4225&view=rev Author: emmanuel_martin Date: 2008-11-19 09:52:12 +0000 (Wed, 19 Nov 2008) Log Message: ----------- bugfix #88 Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.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 2008-11-18 21:54:47 UTC (rev 4224) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueLigneBrisee.java 2008-11-19 09:52:12 UTC (rev 4225) @@ -574,45 +574,55 @@ if (nbPoints <= 0) { continue; } - - final GrPoint ptOri = new GrPoint(); - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); if (!isRapide()) initTrace(ligneModel, i); - final GrPoint ptDest = new GrPoint(); - // Dessine le premier segment avec une fleche si l'option est activ\xE9e - if(nbPoints>=2){ - modele_.point(ptDest, i, nbPoints - 2); - ptDest.autoApplique(versEcran); - // Pour les polygone \xE7a se passe plus loin - if(showLineOrientation_&&!modele_.isGeometryFermee(i)) - tl.dessineFleche(_g, (int)ptDest.x_, (int)ptDest.y_, (int)ptOri.x_, (int)ptOri.y_, 5, 3); - else - tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); - ptOri.initialiseAvec(ptDest); + + if(nbPoints <2) + continue; + + // Affichage de la polyligne ou polygone \\ + /* + * On part de la fin pour commencer \xE0 afficher la fleche si l'option est + * activ\xE9e. Pour \xEAtre sur que la fleche s'affiche correctement, on + * recherche deux points non confondus. + */ + 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)){ + modele_.point(ptDest, i, 0); + modele_.point(ptOrig, i, nbPoints-1); + j=nbPoints-1; } - // Dessine le reste - for (int j = nbPoints - 3; j >= 0; j--) { - // le point de dest est initialise - modele_.point(ptDest, i, j); - ptDest.autoApplique(versEcran); - tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); - ptOri.initialiseAvec(ptDest); + else { + modele_.point(ptDest, i, nbPoints-1); + modele_.point(ptOrig, i, nbPoints-2); + j=nbPoints-2; } - if (modele_.isGeometryFermee(i)) { - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); - // La fl\xE8che pour les polygone - if(showLineOrientation_) - tl.dessineFleche(_g, (int)ptOri.x_, (int)ptOri.y_, (int)ptDest.x_, (int)ptDest.y_, 5, 3); - else - tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_); + // Recherche du point pr\xE9c\xE9dent non identique + while(ptOrig.x_==ptDest.x_&&ptOrig.y_==ptDest.y_&&j>0) + 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_) + tl.dessineFleche(_g, (int)ptOrig.x_, (int)ptOrig.y_, (int)ptDest.x_, (int)ptDest.y_, 11, 5); + else + tl.dessineTrait(_g, ptOrig.x_, ptOrig.y_, ptDest.x_, ptDest.y_); + // Dessin du reste de la ligne + j--; + 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_); } - modele_.point(ptOri, i, nbPoints - 1); - ptOri.autoApplique(versEcran); } - + // 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--) { 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 2008-11-18 21:54:47 UTC (rev 4224) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModel2dLine.java 2008-11-19 09:52:12 UTC (rev 4225) @@ -16,6 +16,7 @@ import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluNamedCommand; +import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; @@ -262,6 +263,8 @@ * @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(); for(int i=0;i<seq.size()/2;i++) @@ -270,9 +273,21 @@ seq.setOrdinate(i, j, seq.getOrdinate(seq.size()-1-i, j)); seq.setOrdinate(seq.size()-1-i, j, valTmp); } + // Inversion des attributs + for(int i=0;i<getAttributeNb();i++) + if(getAttribute(i).isAtomicValue()){ + 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); + } + } + // Fires fireModelAction(_idxGeom, geom, ZModelListener.GEOMETRY_ACTION_MODIFY); - if (_cmd!=null) - _cmd.addCmd(new CtuluNamedCommand() { + fireAttributeValueChangeAction(this, -1, null, _idxGeom, null); + if (_cmd!=null){ + cmd.addCmd(new CtuluNamedCommand() { public void redo() { invertOrientation(_idxGeom, null); } @@ -283,5 +298,7 @@ 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...> - 2008-11-20 13:21:27
|
Revision: 4228 http://fudaa.svn.sourceforge.net/fudaa/?rev=4228&view=rev Author: bmarchan Date: 2008-11-20 13:21:24 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Report correctif pour une selection multicalques sur FudaaPrepro depuis branche trunk. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalqueModel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalqueModel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalqueModel.java 2008-11-20 13:15:57 UTC (rev 4227) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BArbreCalqueModel.java 2008-11-20 13:21:24 UTC (rev 4228) @@ -97,7 +97,7 @@ */ public BArbreCalqueModel(final BGroupeCalque _calque, final boolean _listener) { selection_ = new DefaultTreeSelectionModel(); - setSelectionMultiCalques(false); + setSelectionMultiCalques(true); mustListen_ = _listener; calque_ = _calque; if ((calque_ != null) && (calque_.isGroupeCalque())) { 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 2008-11-20 13:15:57 UTC (rev 4227) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2008-11-20 13:21:24 UTC (rev 4228) @@ -67,6 +67,7 @@ */ public MdlVisuPanel(FudaaCommonImplementation _impl/*, boolean _createDefault*/) { super(_impl); + modelArbre_.setSelectionMultiCalques(false); initCalques(true); installLayerActions(); getScene().setRestrictedToCalqueActif(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-11-20 13:41:22
|
Revision: 4230 http://fudaa.svn.sourceforge.net/fudaa/?rev=4230&view=rev Author: bmarchan Date: 2008-11-20 13:41:12 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Labels d'actions modifi?\195?\169s. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java 2008-11-20 13:31:40 UTC (rev 4229) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneShowOrientationAction.java 2008-11-20 13:41:12 UTC (rev 4230) @@ -22,14 +22,14 @@ /** * Une action pour montrer l'orientation des lignes dans les calques. * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class SceneShowOrientationAction extends EbliActionChangeState implements TreeModelListener { protected BArbreCalqueModel treeModel_; public SceneShowOrientationAction(BArbreCalqueModel _treeModel) { - super(EbliLib.getS("Affichage du sens des lignes"), BuResource.BU.getIcon("fleche"), "SHOW_ORIENTATION"); + super(EbliLib.getS("Afficher l'orientation des lignes"), null/*BuResource.BU.getIcon("fleche")*/, "SHOW_ORIENTATION"); treeModel_=_treeModel; treeModel_.addTreeModelListener(this); setEnabled(true); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java 2008-11-20 13:31:40 UTC (rev 4229) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneInvertAction.java 2008-11-20 13:41:12 UTC (rev 4230) @@ -21,14 +21,14 @@ /** * Action permettant le changement de sens des polylignes selectionn\xE9es. * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class SceneInvertAction extends EbliActionSimple implements ZSelectionListener { protected MdlSceneEditor sceneEditor_; public SceneInvertAction(MdlSceneEditor _sceneEditor){ - super(EbliResource.EBLI.getString("Inverser"), null, "INVERSER"); + super(EbliResource.EBLI.getString("Inverser l'orientation"), null, "INVERSER"); sceneEditor_=_sceneEditor; sceneEditor_.getScene().addSelectionListener(this); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-21 16:29:43
|
Revision: 4234 http://fudaa.svn.sourceforge.net/fudaa/?rev=4234&view=rev Author: emmanuel_martin Date: 2008-11-21 16:29:32 +0000 (Fri, 21 Nov 2008) Log Message: ----------- tache #90 :"Calculer un abscisse curviligne" Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java 2008-11-20 14:48:50 UTC (rev 4233) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java 2008-11-21 16:29:32 UTC (rev 4234) @@ -32,7 +32,7 @@ * Permet de visionner des distances. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class ZCalqueDistanceInteraction extends BCalqueInteraction implements MouseListener, MouseMotionListener { @@ -66,7 +66,7 @@ return new Coordinate(tmp.x_, tmp.y_); } - /** Converti une coordonn\xE9e reel en coordonn\xE9e \xE9cran. */ + /** Converti une coordonn\xE9e \xE9cran en coordonn\xE9e r\xE9el. */ protected Coordinate ecranToReel(Coordinate coord){ GrPoint tmp=new GrPoint(coord.x, coord.y, 0); tmp.autoApplique(getVersReel()); 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 2008-11-20 14:48:50 UTC (rev 4233) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-11-21 16:29:32 UTC (rev 4234) @@ -27,6 +27,7 @@ import org.fudaa.ebli.commun.EbliActionAbstract; import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.fudaa.commun.FudaaLib; +import org.fudaa.fudaa.modeleur.action.SceneAbscisseCurviligneAction; import org.fudaa.fudaa.modeleur.action.SceneDecimationAction; import org.fudaa.fudaa.modeleur.action.SceneInterpolationAction; import org.fudaa.fudaa.modeleur.action.SceneInvertAction; @@ -73,6 +74,7 @@ acts.add(new SceneRefinementAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneInvertAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneProjectionAction((MdlSceneEditor)sceneEditor_)); + acts.add(new SceneAbscisseCurviligneAction(this)); getSceneEditor().setActions(acts.toArray(new EbliActionAbstract[0])); } Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-11-21 16:29:32 UTC (rev 4234) @@ -0,0 +1,188 @@ +/* + * @creation 20 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.fudaa.modeleur.action; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.JComponent; +import javax.swing.event.InternalFrameEvent; + +import org.fudaa.ctulu.gis.GISGeometryFactory; +import org.fudaa.ctulu.gis.GISPolygone; +import org.fudaa.ctulu.gis.GISPolyligne; +import org.fudaa.ebli.calque.BCalqueInteraction; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +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.edition.ZEditorDefault; +import org.fudaa.ebli.commun.EbliActionPaletteAbstract; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.fudaa.modeleur.layer.BPaletteAbscisseCurviligne; +import org.fudaa.fudaa.modeleur.layer.ZCalqueAbscisseCurviligneInteraction; +import org.fudaa.fudaa.sig.layer.FSigVisuPanel; + +import com.memoire.bu.BuPalette; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryFactory; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.Point; + +/** + * Une action pour afficher une palette indiquant l'abscisse curviligne d'un axe + * hydaulique. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class SceneAbscisseCurviligneAction extends EbliActionPaletteAbstract implements PropertyChangeListener, ZSelectionListener { + + private ZEbliCalquesPanel calquesPanel_; + private ZScene scene_; + // Calque ne fermant pas l'edition \\ + private BCalqueInteraction calqueZoom_; + private BCalqueInteraction calqueDeplacementVue_; + /** Le calque contenant les informations de distance. */ + private ZCalqueAbscisseCurviligneInteraction calqueAbscisseCurviligne_; + /** La geometrie selectionn\xE9 sur laquelle le calcul de l'abcisse curviligne est effectu\xE9.*/ + private LineString selectedGeometry_; + /** La palette affichant la donn\xE9e curviligne. */ + private BPaletteAbscisseCurviligne palette_; + /** La internalFrame*/ + private BuPalette interFrame_; + + public SceneAbscisseCurviligneAction(final ZEditorDefault _editor) { + super(EbliResource.EBLI.getString("Abscisse curviligne"), null, "PALETTE_ABSCISSE_CURVILIGNE"); + scene_=_editor.getSceneEditor().getScene(); + scene_.addSelectionListener(this); + calquesPanel_=_editor.getPanel(); + calquesPanel_.getController().addPropertyChangeListener("gele", this); + calqueZoom_=calquesPanel_.getController().getCalqueInteraction("cqAGRANDIR"); + calqueDeplacementVue_=calquesPanel_.getController().getCalqueInteraction("cqDEPLACEMENT_VUE-I"); + calqueAbscisseCurviligne_=new ZCalqueAbscisseCurviligneInteraction(this); + calqueAbscisseCurviligne_.setGele(true); + calquesPanel_.addCalqueInteraction(calqueAbscisseCurviligne_); + calqueAbscisseCurviligne_.addPropertyChangeListener("gele", this); + setEnabled(false); + } + + public String getEnableCondition() { + return EbliResource.EBLI.getString("<p>selectionner une polyligne ou un polygone.</p>"); + } + + @Override + public void changeAction() { + if (isSelected()) { + calquesPanel_.setCalqueInteractionActif(calqueAbscisseCurviligne_); + if (palette_==null) + // Cr\xE9ation de l'internal frame affichant l'information curviligne + palette_=new BPaletteAbscisseCurviligne(calqueAbscisseCurviligne_, calquesPanel_.getController().getEbliFormatter(), + calquesPanel_); + if(interFrame_==null){ + interFrame_=new BuPalette(); + interFrame_.setResizable(true); + interFrame_.setContent((BPaletteAbscisseCurviligne)palette_); + interFrame_.setClosable(true); + interFrame_.pack(); + interFrame_.addInternalFrameListener(this); + } + ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().addInternalFrame(interFrame_); + } + else { + calquesPanel_.unsetCalqueInteractionActif(calqueAbscisseCurviligne_); + ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().removeInternalFrame(interFrame_); + if (calquesPanel_.getController().getCqSelectionI()!=null) + calquesPanel_.getController().getCqSelectionI().setGele(false); + } + } + + public void propertyChange(PropertyChangeEvent _evt) { + // Cas un autre calque que celui du zoom, du deplacement de vue et d'edition + // est d\xE9gel\xE9 donc on ferme le pannel d'edition si il \xE9tait ouvert. + if (_evt.getSource()!=calqueZoom_&&_evt.getSource()!=calqueDeplacementVue_&&_evt.getSource()!=calqueAbscisseCurviligne_ + &&!((Boolean)_evt.getNewValue()).booleanValue()&&isSelected()) { + setSelected(false); + ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().removeInternalFrame(interFrame_); + } + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent) + */ + public void selectionChanged(ZSelectionEvent _evt) { + /* + * Si une seule g\xE9om\xE9trie est selectionn\xE9e et que cette g\xE9om\xE9trie est une + * polyligne ou un polygone, alors l'action de calcul d'abcisses curvilignes + * est activable et un ref\xE9rence sur cette g\xE9om\xE9trie est concerv\xE9e dans + * 'selectedGeometry_'. + */ + if (scene_.isOnlyOneObjectSelected()) { + int idxGeom=scene_.getSelectionHelper().getUniqueSelectedIdx(); + ZCalqueAffichageDonneesInterface calque=scene_.getLayerForId(idxGeom); + Geometry geom=((ZModeleGeometry)calque.modeleDonnees()).getGeomData().getGeometry(scene_.sceneId2LayerId(idxGeom)); + setEnabled(calque.isOnlyOneObjectSelected()&&(geom instanceof GISPolyligne||geom instanceof GISPolygone)); + if (isEnabled()) + selectedGeometry_=((LineString)geom); + else + selectedGeometry_=null; + } + else { + setEnabled(false); + selectedGeometry_=null; + } + } + + /** + * Est appel\xE9 par le calque d'interaction pour indiquer le point click\xE9. + * @param _coord la coordonn\xE9 r\xE9el. + */ + public void coordinateClicked(Coordinate _coord, double tolerance){ + Point ptClick=new GeometryFactory().createPoint(_coord); + if (selectedGeometry_!=null&&selectedGeometry_.distance(ptClick)<tolerance) { + // Recherche de l'index du dernier point de la polyligne \xE0 prendre en + // compte. + boolean fini=false; + int i=-1; + CoordinateSequence coordSeq=selectedGeometry_.getCoordinateSequence(); + while (!fini&&++i<selectedGeometry_.getNumPoints()-1) + fini=(GISGeometryFactory.INSTANCE + .createLineString(new Coordinate[]{coordSeq.getCoordinate(i), coordSeq.getCoordinate(i+1)})).distance(ptClick)<tolerance; + // Calcule de l'abscisse curviligne + double valueCurviligne=0; + for (int j=1; j<=i; j++) + valueCurviligne+=Math.sqrt(Math.pow(coordSeq.getOrdinate(j, 0)-coordSeq.getOrdinate(j-1, 0), 2) + +Math.pow(coordSeq.getOrdinate(j, 1)-coordSeq.getOrdinate(j-1, 1), 2)); + valueCurviligne+=Math.sqrt(Math.pow(coordSeq.getOrdinate(i, 0)-ptClick.getX(), 2) + +Math.pow(coordSeq.getOrdinate(i, 1)-ptClick.getY(), 2)); + ((BPaletteAbscisseCurviligne)palette_).setAbcisseCurviligne(valueCurviligne); + } + } + + public void internalFrameClosed(InternalFrameEvent e){ + // Lorsque la palette est ferm\xE9e, on d\xE9selectionne l'action, d\xE9active le + // calque, supprime l'internal frame et active la selection + setSelected(false); + calquesPanel_.unsetCalqueInteractionActif(calqueAbscisseCurviligne_); + ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().removeInternalFrame(interFrame_); + if (calquesPanel_.getController().getCqSelectionI()!=null) + calquesPanel_.getController().getCqSelectionI().setGele(false); + } + + /** + * M\xE9thode non utilis\xE9 dans cette classe : l'impl\xE9mentation de changeAction() ne fait pas de super. + */ + @Override + public JComponent buildContentPane() { + return null; + } +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java 2008-11-21 16:29:32 UTC (rev 4234) @@ -0,0 +1,106 @@ +/* + * @creation 20 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.fudaa.modeleur.layer; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.BorderFactory; +import javax.swing.JComponent; + +import org.fudaa.ctulu.gui.CtuluDialogPanel; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.commun.BPalettePanelInterface; +import org.fudaa.ebli.commun.EbliFormatterInterface; +import org.fudaa.ebli.commun.EbliLib; + +import com.memoire.bu.BuButton; +import com.memoire.bu.BuLabel; + +/** + * Palette affichant un abscisse curviligne. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class BPaletteAbscisseCurviligne extends CtuluDialogPanel implements ActionListener, BPalettePanelInterface, PropertyChangeListener { + + /** Label affichant l'abscisse curviligne. */ + protected BuLabel lblCoordonneeCurviligne_=new BuLabel(); + /** Le calque qui contient les informations curvilignes. */ + protected ZCalqueAbscisseCurviligneInteraction calqueAbscisseCurviligne_; + /** Le bouton 'reprise'. */ + protected BuButton btReprise_=new BuButton(EbliLib.getS("Reprise")); + protected EbliFormatterInterface formatter_; + private ZEbliCalquesPanel calquesPanel_; + + public BPaletteAbscisseCurviligne(ZCalqueAbscisseCurviligneInteraction _calqueAbscisseCurviligne, EbliFormatterInterface _formatter, ZEbliCalquesPanel _calquesPanel){ + calquesPanel_=_calquesPanel; + calqueAbscisseCurviligne_=_calqueAbscisseCurviligne; + calqueAbscisseCurviligne_.addPropertyChangeListener("gele", this); + formatter_=_formatter; + // Construction du panel \\ + setLayout(new BorderLayout()); + // Titre + BuLabel lblTitre=new BuLabel("<html><b>"+EbliLib.getS("Abscisse curviligne")+"</b></html>"); + lblTitre.setHorizontalAlignment(BuLabel.CENTER); + add(lblTitre, BorderLayout.NORTH); + // Contenu + Container body=new Container(); + body.setLayout(new GridLayout(1, 2, 2, 2)); + body.add(new BuLabel("Valeur curviligne : ")); + body.add(lblCoordonneeCurviligne_); + add(body, BorderLayout.CENTER); + // Bouton reprise + add(btReprise_, BorderLayout.SOUTH); + btReprise_.addActionListener(this); + btReprise_.setEnabled(false); + // Affichage + setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); + setVisible(true); + // Valeurs \\ + setAbcisseCurviligne(0); + } + + public boolean valide(){ + return true; + } + + public JComponent getComponent() { + return this; + } + + public boolean setPalettePanelTarget(Object _target) { + return false; + } + + public void paletteDeactivated() {} + + public void doAfterDisplay() {} + + public void propertyChange(PropertyChangeEvent evt) { + if(evt.getPropertyName().equals("gele")) + btReprise_.setEnabled((Boolean) evt.getNewValue()); + } + + /* (non-Javadoc) + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + public void actionPerformed(ActionEvent e) { + calquesPanel_.setCalqueInteractionActif(calqueAbscisseCurviligne_); + } + + public void setAbcisseCurviligne(double _value){ + lblCoordonneeCurviligne_.setText(formatter_.getXYFormatter().format(_value)); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java 2008-11-21 16:29:32 UTC (rev 4234) @@ -0,0 +1,82 @@ +/* + * @creation 20 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.fudaa.modeleur.layer; + +import java.awt.Cursor; +import java.awt.Point; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +import org.fudaa.ebli.calque.BCalqueInteraction; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.fudaa.modeleur.action.SceneAbscisseCurviligneAction; + +import com.memoire.bu.BuResource; +import com.vividsolutions.jts.geom.Coordinate; + +/** + * Permet de capter des \xE9v\xE9nements souris pour calculer un abscisse curviligne. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class ZCalqueAbscisseCurviligneInteraction extends BCalqueInteraction implements MouseListener { + + /** L'action g\xE9rant le calcule de l'abcisse curviligne. */ + private SceneAbscisseCurviligneAction controller_; + + public ZCalqueAbscisseCurviligneInteraction(SceneAbscisseCurviligneAction _controller){ + setName("cqInteractifAbscisseCurviligne"); + controller_=_controller; + } + + /** Converti une coordonn\xE9e \xE9cran en coordonn\xE9e r\xE9el. */ + protected Coordinate ecranToReel(Coordinate coord){ + GrPoint tmp=new GrPoint(coord.x, coord.y, 0); + tmp.autoApplique(getVersReel()); + return new Coordinate(tmp.x_, tmp.y_); + } + + public Cursor getSpecificCursor() { + return EbliResource.EBLI.getCursor("curseur_distance", -1, new Point(2, 2)); + } + + public boolean alwaysPaint() { + return true; + } + + public String getDescription() { + return BuResource.BU.getString("Calculer un abscisse curviligne."); + } + + // M\xE9thodes g\xE9rant les \xE9v\xE9nements. \\ + + public void mouseClicked(final MouseEvent _evt) {} + + public void mouseEntered(final MouseEvent _evt) {} + + public void mousePressed(final MouseEvent _evt) {} + + public void mouseExited(final MouseEvent _evt) {} + + public void mouseReleased(final MouseEvent _evt) { + if (!isGele()&&_evt.getButton()==MouseEvent.BUTTON1){ + // Calcule de la tol\xE9rance au click + double tolerance; + GrPoint p1=new GrPoint(0, 0, 0); + GrPoint p2=new GrPoint(1, 1, 0); + tolerance=p1.distance(p2)*5; + p1.autoApplique(getVersEcran()); + p2.autoApplique(getVersEcran()); + tolerance/=p1.distance(p2); + // Mise a jour de l'action + controller_.coordinateClicked(ecranToReel(new Coordinate(_evt.getX(), _evt.getY())), tolerance); + } + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.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...> - 2008-11-23 21:43:52
|
Revision: 4237 http://fudaa.svn.sourceforge.net/fudaa/?rev=4237&view=rev Author: bmarchan Date: 2008-11-23 21:43:45 +0000 (Sun, 23 Nov 2008) Log Message: ----------- Javadoc + correction sur calcul d'abscisse curviligne. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionChangeState.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionChangeState.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionChangeState.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionChangeState.java 2008-11-23 19:03:34 UTC (rev 4236) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionChangeState.java 2008-11-23 21:43:45 UTC (rev 4237) @@ -1,6 +1,6 @@ /* * @creation 2 oct. 2003 - * @modification $Date: 2006-09-19 14:55:55 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne */ @@ -13,7 +13,7 @@ /** * @author deniger - * @version $Id: EbliActionChangeState.java,v 1.9 2006-09-19 14:55:55 deniger Exp $ + * @version $Id$ */ public abstract class EbliActionChangeState extends EbliActionAbstract { @@ -46,6 +46,9 @@ } } + /** + * Appel\xE9 quand l'\xE9tat s\xE9lectionn\xE9 ou non de l'action est modifi\xE9 + */ public abstract void changeAction(); public boolean isSelected() { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionChangeState.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java 2008-11-23 19:03:34 UTC (rev 4236) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java 2008-11-23 21:43:45 UTC (rev 4237) @@ -1,6 +1,6 @@ /* * @creation 2 oct. 2003 - * @modification $Date: 2007-06-13 12:57:45 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne */ @@ -31,9 +31,14 @@ import com.memoire.bu.BuPalette; /** - * Une action d\xE9clenchant l'affichage d'une palette. + * Une action d\xE9clenchant l'affichage d'une palette. Une palette est un panneau non modal. + * Elle peut \xEAtre associ\xE9e :<p> + * - Soit \xE0 la JInternalFrame active du Desktop donn\xE9 par {@link #setDesktop(BuDesktop)}. Elle + * apparait et disparait en m\xEAme temps qu'elle. Elle est visualis\xE9e sous forme de Palette interne.<p> + * - Soit a l'application par {@link #setParent(Component)}. Dans ce cas, elle est visualis\xE9e sous forme de dialogue externe. + * * @author deniger - * @version $Id: EbliActionPaletteAbstract.java,v 1.21 2007-06-13 12:57:45 deniger Exp $ + * @version $Id$ */ public abstract class EbliActionPaletteAbstract extends EbliActionChangeState implements InternalFrameListener { @@ -42,24 +47,42 @@ Point loc_; + /** Le desktop sur lequel est affich\xE9 la palette si non null. */ protected BuDesktop desktop_; - + /** Le parent utilis\xE9 pour une palette externe */ protected Component parent_; - + /** La palette est resizable */ protected boolean resizable_; - + /** La palette, contenant un composant sp\xE9cifique pour l'action */ protected transient BuPalette window_; + /** + * Construction de l'action. + * @param _name Le nom de l'action. + * @param _icon L'icone de l'action + * @param _actionName La commande de l'action. + */ public EbliActionPaletteAbstract(final String _name, final Icon _icon, final String _actionName) { super(_name, _icon, _actionName); } + /** + * Construction de l'action en pr\xE9cisant le caract\xE8re "resizable" la palette. + * @param _name Le nom de l'action. + * @param _icon L'icone de l'action + * @param _actionName La commande de l'action. + * @param _resizable True Retaillable, false sinn. + */ public EbliActionPaletteAbstract(final String _name, final Icon _icon, final String _actionName, final boolean _resizable) { super(_name, _icon, _actionName); resizable_ = _resizable; } + /** + * Construit la palette, en incluant le composant sp\xE9cifique de l'action. L'action \xE9coute + * les evenements sur la palette. + */ protected void buildWindow() { if (window_ == null) { window_ = new BuPalette() { @@ -88,12 +111,21 @@ } } + /** + * A surcharger pour une op\xE9ration faite apr\xE8s que la palette apparaisse. + */ protected void doAfterDisplay() {} + /** + * @return La palette associ\xE9e \xE0 l'action. + */ protected BuPalette getWindow() { return window_; } + /** + * Fait disparaitre la palette. + */ protected void hideWindow() { if (dial_ != null) { dial_.dispose(); @@ -133,6 +165,9 @@ } + /** + * Fait apparaitre la palette, apr\xE8s l'avoir construite si elle n'existe pas encore. + */ protected void showWindow() { final boolean first = window_ == null; buildWindow(); @@ -235,6 +270,10 @@ return resizable_; } + /** + * Definit le desktop pour une palette associ\xE9e \xE0 l'InternalFrame active. + * @param _desktop Le desktop, null si pas d'association avec une fenetre active. + */ public void setDesktop(final BuDesktop _desktop) { desktop_ = _desktop; } @@ -267,6 +306,10 @@ } } + /** + * Le parent de la palette pour une palette externe. Ne sert pas si la palette est interne. + * @param _parent Le parent. Peut \xEAtre null. + */ public void setParent(Component _parent) { parent_ = _parent; } @@ -290,7 +333,9 @@ /* (non-Javadoc) * @see javax.swing.event.InternalFrameListener#internalFrameClosed(javax.swing.event.InternalFrameEvent) */ - public void internalFrameClosed(InternalFrameEvent e) {} + public void internalFrameClosed(InternalFrameEvent e) { + + } /* (non-Javadoc) * @see javax.swing.event.InternalFrameListener#internalFrameClosing(javax.swing.event.InternalFrameEvent) Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/commun/EbliActionPaletteAbstract.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-11-23 19:03:34 UTC (rev 4236) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-11-23 21:43:45 UTC (rev 4237) @@ -11,7 +11,7 @@ import java.beans.PropertyChangeListener; import javax.swing.JComponent; -import javax.swing.event.InternalFrameEvent; +import javax.swing.SwingUtilities; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISPolygone; @@ -28,9 +28,8 @@ import org.fudaa.ebli.ressource.EbliResource; import org.fudaa.fudaa.modeleur.layer.BPaletteAbscisseCurviligne; import org.fudaa.fudaa.modeleur.layer.ZCalqueAbscisseCurviligneInteraction; -import org.fudaa.fudaa.sig.layer.FSigVisuPanel; -import com.memoire.bu.BuPalette; +import com.memoire.bu.BuDesktop; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.Geometry; @@ -39,11 +38,10 @@ import com.vividsolutions.jts.geom.Point; /** - * Une action pour afficher une palette indiquant l'abscisse curviligne d'un axe - * hydaulique. + * Une action pour afficher une palette indiquant l'abscisse curviligne d'une polyligne. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class SceneAbscisseCurviligneAction extends EbliActionPaletteAbstract implements PropertyChangeListener, ZSelectionListener { @@ -58,11 +56,9 @@ private LineString selectedGeometry_; /** La palette affichant la donn\xE9e curviligne. */ private BPaletteAbscisseCurviligne palette_; - /** La internalFrame*/ - private BuPalette interFrame_; public SceneAbscisseCurviligneAction(final ZEditorDefault _editor) { - super(EbliResource.EBLI.getString("Abscisse curviligne"), null, "PALETTE_ABSCISSE_CURVILIGNE"); + super(EbliResource.EBLI.getString("Calcul de l'abscisse curviligne"), null, "PALETTE_ABSCISSE_CURVILIGNE"); scene_=_editor.getSceneEditor().getScene(); scene_.addSelectionListener(this); calquesPanel_=_editor.getPanel(); @@ -79,32 +75,6 @@ public String getEnableCondition() { return EbliResource.EBLI.getString("<p>selectionner une polyligne ou un polygone.</p>"); } - - @Override - public void changeAction() { - if (isSelected()) { - calquesPanel_.setCalqueInteractionActif(calqueAbscisseCurviligne_); - if (palette_==null) - // Cr\xE9ation de l'internal frame affichant l'information curviligne - palette_=new BPaletteAbscisseCurviligne(calqueAbscisseCurviligne_, calquesPanel_.getController().getEbliFormatter(), - calquesPanel_); - if(interFrame_==null){ - interFrame_=new BuPalette(); - interFrame_.setResizable(true); - interFrame_.setContent((BPaletteAbscisseCurviligne)palette_); - interFrame_.setClosable(true); - interFrame_.pack(); - interFrame_.addInternalFrameListener(this); - } - ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().addInternalFrame(interFrame_); - } - else { - calquesPanel_.unsetCalqueInteractionActif(calqueAbscisseCurviligne_); - ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().removeInternalFrame(interFrame_); - if (calquesPanel_.getController().getCqSelectionI()!=null) - calquesPanel_.getController().getCqSelectionI().setGele(false); - } - } public void propertyChange(PropertyChangeEvent _evt) { // Cas un autre calque que celui du zoom, du deplacement de vue et d'edition @@ -112,10 +82,25 @@ if (_evt.getSource()!=calqueZoom_&&_evt.getSource()!=calqueDeplacementVue_&&_evt.getSource()!=calqueAbscisseCurviligne_ &&!((Boolean)_evt.getNewValue()).booleanValue()&&isSelected()) { setSelected(false); - ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().removeInternalFrame(interFrame_); + hideWindow(); } } + public void showWindow() { + // Necessaire, sinon la palette est visualis\xE9e en externe. Ne peut \xEAtre fait avant, car le desktop n'est pas + // encore existant. + setDesktop((BuDesktop)SwingUtilities.getAncestorOfClass(BuDesktop.class,calquesPanel_)); + calquesPanel_.setCalqueInteractionActif(calqueAbscisseCurviligne_); + super.showWindow(); + } + + public void hideWindow() { + calquesPanel_.unsetCalqueInteractionActif(calqueAbscisseCurviligne_); + if (calquesPanel_.getController().getCqSelectionI()!=null) + calquesPanel_.getController().getCqSelectionI().setGele(false); + super.hideWindow(); + } + /* (non-Javadoc) * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent) */ @@ -167,22 +152,13 @@ ((BPaletteAbscisseCurviligne)palette_).setAbcisseCurviligne(valueCurviligne); } } - - public void internalFrameClosed(InternalFrameEvent e){ - // Lorsque la palette est ferm\xE9e, on d\xE9selectionne l'action, d\xE9active le - // calque, supprime l'internal frame et active la selection - setSelected(false); - calquesPanel_.unsetCalqueInteractionActif(calqueAbscisseCurviligne_); - ((FSigVisuPanel)calquesPanel_).getImpl().getMainPanel().getDesktop().removeInternalFrame(interFrame_); - if (calquesPanel_.getController().getCqSelectionI()!=null) - calquesPanel_.getController().getCqSelectionI().setGele(false); - } - /** - * M\xE9thode non utilis\xE9 dans cette classe : l'impl\xE9mentation de changeAction() ne fait pas de super. - */ @Override public JComponent buildContentPane() { - return null; + if (palette_==null) + // Cr\xE9ation de l'internal frame affichant l'information curviligne + palette_=new BPaletteAbscisseCurviligne(calqueAbscisseCurviligne_, calquesPanel_.getController().getEbliFormatter(), + calquesPanel_); + return palette_.getComponent(); } } \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java ___________________________________________________________________ Modified: svn:keywords - Id + Date Revision Author URL Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-25 15:54:16
|
Revision: 4238 http://fudaa.svn.sourceforge.net/fudaa/?rev=4238&view=rev Author: emmanuel_martin Date: 2008-11-25 15:54:12 +0000 (Tue, 25 Nov 2008) Log Message: ----------- correction d'un plantage concernant le panel de distance ; ajout d'une sonde pour le panel curviligne ; correction de la r?\195?\169duction du panel curviligne ; correction de la mise ?\195?\160 jour du panel de propri?\195?\169t?\195?\169s dans le pr?\195?\169pro concernant l'interpolation des valeurs des points ; am?\195?\169lioration du calcul de l'abcisse curviligne ; affichage d'un message si le le click n'est pas sur la forme et remise ?\195?\160 0 quand on quitte le panel curviligne. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoLayerDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoModelAbstract.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java 2008-11-23 21:43:45 UTC (rev 4237) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePaletteInfo.java 2008-11-25 15:54:12 UTC (rev 4238) @@ -8,18 +8,15 @@ package org.fudaa.ebli.calque; import java.util.ArrayList; -import java.util.HashSet; +import java.util.List; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.CtuluLibString; -import org.fudaa.ctulu.CtuluListSelection; -import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ebli.commun.EbliLib; -import org.fudaa.ebli.commun.EbliListeSelectionMultiInterface; import org.fudaa.ebli.palette.BPaletteInfo; import com.vividsolutions.jts.geom.Geometry; @@ -30,9 +27,11 @@ */ public class BCalquePaletteInfo extends BPaletteInfo implements TreeSelectionListener, ZSelectionListener, ZModelGeometryListener { - private ArrayList<ZCalqueAffichageDonneesInterface> calqueWithGeometriesSelected_; + private List<ZCalqueAffichageDonneesInterface> calqueWithGeometriesSelected_; private BArbreCalqueModel treeModel_; private ZScene scene_; + /** Le calque selectionn\xE9 dans l'arbre. */ + private ZCalqueAffichageDonnees calqueSelected_; /** * Cr\xE9ation de la palette. @@ -54,6 +53,10 @@ * Met \xE0 jour les informations contenues dans le tableau. */ private void updateTableModel(){ + BCalque calque=treeModel_.getSelectedCalque(); + updateCalqueWithSelection(); + if(calqueSelected_==null||calque!=calqueSelected_) + updateCalqueSelected(); // Suppression des anciennes informations txtTitle_.setText(CtuluLibString.EMPTY_STRING); tableModel_.clear(); @@ -81,18 +84,38 @@ } updateSize(); } - + + /** Met \xE0 jour la liste des calques poss\xE9dant une selection. */ + private void updateCalqueWithSelection() { + // Supression de l'\xE9coute sur tout les models sauf celui selectionn\xE9 + for (ZCalqueAffichageDonneesInterface calque : calqueWithGeometriesSelected_) + if(calque != calqueSelected_) + if (calque.modeleDonnees() instanceof ZModeleGeometry) + ((ZModeleGeometry)calque.modeleDonnees()).removeModelListener(this); + else + ((ZModeleDonnesAbstract)calque.modeleDonnees()).removeModelListener(this); + // Nombre de calques ayant des selections (atomiques ou globales) + calqueWithGeometriesSelected_.clear(); + ZCalqueAffichageDonneesInterface[] cqs=scene_.getAllLayers(); + for (ZCalqueAffichageDonneesInterface cq : cqs) { + if (cq.getLayerSelection()!=null&&cq.getLayerSelection().getNbSelectedIndex()>0||cq.getLayerSelectionMulti()!=null + &&cq.getLayerSelectionMulti().getNbSelectedItem()>0) { + if (!calqueWithGeometriesSelected_.contains(cq)) + calqueWithGeometriesSelected_.add(cq); + } + } + // Ajout des \xE9coutes + for (ZCalqueAffichageDonneesInterface calque : calqueWithGeometriesSelected_) + if (calque.modeleDonnees() instanceof ZModeleGeometry) + ((ZModeleGeometry)calque.modeleDonnees()).addModelListener(this); + else if (calque.modeleDonnees() instanceof ZModeleDonnesAbstract) + ((ZModeleDonnesAbstract)calque.modeleDonnees()).addModelListener(this); + } + + // Changement de geometries selectionn\xE9es. \\ public void selectionChanged(final ZSelectionEvent _evt) { - if (isAvailable()) { - // Nombre de calques ayant des selections (atomiques ou globales) - calqueWithGeometriesSelected_.clear(); - ZCalqueAffichageDonneesInterface[] cqs=scene_.getAllLayers(); - for (ZCalqueAffichageDonneesInterface cq: cqs) { - if (cq.getLayerSelection()!=null && cq.getLayerSelection().getNbSelectedIndex()>0 || - cq.getLayerSelectionMulti()!=null && cq.getLayerSelectionMulti().getNbSelectedItem()>0) { - if (!calqueWithGeometriesSelected_.contains(cq)) calqueWithGeometriesSelected_.add(cq); - } - } + if (isAvailable()){ + updateCalqueWithSelection(); updateTableModel(); } } @@ -103,8 +126,28 @@ updateTableModel(); } + public void updateCalqueSelected(){ + // Supression de l'\xE9coute sur l'ancien calque + if(calqueSelected_!=null&&!calqueWithGeometriesSelected_.contains(calqueSelected_)) + if(calqueSelected_.modeleDonnees() instanceof ZModeleGeometry) + ((ZModeleGeometry) calqueSelected_.modeleDonnees()).removeModelListener(this); + else if(calqueSelected_.modeleDonnees() instanceof ZModeleDonnesAbstract) + ((ZModeleDonnesAbstract) calqueSelected_.modeleDonnees()).removeModelListener(this); + // M\xE9morisation du calque et ajout de l'acoute + if(treeModel_.getSelectedCalque() instanceof ZCalqueAffichageDonnees){ + calqueSelected_=(ZCalqueAffichageDonnees)treeModel_.getSelectedCalque(); + if(calqueSelected_.modeleDonnees() instanceof ZModeleGeometry) + ((ZModeleGeometry) calqueSelected_.modeleDonnees()).addModelListener(this); + else if(calqueSelected_.modeleDonnees() instanceof ZModeleDonnesAbstract) + ((ZModeleDonnesAbstract) calqueSelected_.modeleDonnees()).addModelListener(this); + } + } + + // Changement de selection dans l'arbre. \\ public void valueChanged(final TreeSelectionEvent _e) { - if (isAvailable()&& calqueWithGeometriesSelected_.size()==0) // Seulement pour l'info sur calque. + updateCalqueSelected(); + // Si aucune selection n'est faite, affiche les donn\xE9es du calque selectionn\xE9 dans l'arbre + if (isAvailable()&& calqueWithGeometriesSelected_.size()==0) updateTableModel(); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java 2008-11-23 21:43:45 UTC (rev 4237) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueDistanceInteraction.java 2008-11-25 15:54:12 UTC (rev 4238) @@ -75,8 +75,10 @@ /** Dessine un trait en mode XOR \xE0 l'\xE9cran entre les deux coordonn\xE9es fournies. */ private void dessineTrait(Graphics2D _g, Coordinate coor1, Coordinate coord2){ - _g.setXORMode(getBackground()); - traceLigne_.dessineTrait(_g, coor1.x, coor1.y, coord2.x, coord2.y); + if(_g!=null){ + _g.setXORMode(getBackground()); + traceLigne_.dessineTrait(_g, coor1.x, coor1.y, coord2.x, coord2.y); + } } // M\xE9thodes d\xE9riv\xE9es \\ Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-11-23 21:43:45 UTC (rev 4237) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-11-25 15:54:12 UTC (rev 4238) @@ -1,17 +1,21 @@ /* * @creation 20 nov. 2008 - * @modification $Date:$ + * @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.fudaa.modeleur.action; +import java.awt.Container; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JComponent; +import javax.swing.JInternalFrame; import javax.swing.SwingUtilities; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISPolygone; @@ -26,6 +30,7 @@ import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.commun.EbliActionPaletteAbstract; import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.layer.BPaletteAbscisseCurviligne; import org.fudaa.fudaa.modeleur.layer.ZCalqueAbscisseCurviligneInteraction; @@ -57,6 +62,21 @@ /** La palette affichant la donn\xE9e curviligne. */ private BPaletteAbscisseCurviligne palette_; + /** + * Classe g\xE9rant la disparition et la r\xE9apparition du panel quand la fen\xEAtre + * principale est r\xE9duite. + */ + class AbcisseFrameListener extends InternalFrameAdapter { + public void internalFrameActivated(final InternalFrameEvent _e) { + if(window_!=null) + window_.setVisible(true); + } + public void internalFrameDeactivated(final InternalFrameEvent _e) { + if(window_!=null) + window_.setVisible(false); + } + } + public SceneAbscisseCurviligneAction(final ZEditorDefault _editor) { super(EbliResource.EBLI.getString("Calcul de l'abscisse curviligne"), null, "PALETTE_ABSCISSE_CURVILIGNE"); scene_=_editor.getSceneEditor().getScene(); @@ -77,12 +97,14 @@ } public void propertyChange(PropertyChangeEvent _evt) { - // Cas un autre calque que celui du zoom, du deplacement de vue et d'edition - // est d\xE9gel\xE9 donc on ferme le pannel d'edition si il \xE9tait ouvert. + // Cas o\xF9 un autre calque que celui du zoom, du deplacement de vue et d'edition + // est d\xE9gel\xE9 donc on ferme le pannel d'edition si il est ouvert. if (_evt.getSource()!=calqueZoom_&&_evt.getSource()!=calqueDeplacementVue_&&_evt.getSource()!=calqueAbscisseCurviligne_ &&!((Boolean)_evt.getNewValue()).booleanValue()&&isSelected()) { setSelected(false); - hideWindow(); + calqueAbscisseCurviligne_.stopEdition(); + ((BPaletteAbscisseCurviligne)palette_).setAbcisseCurviligne(0); + super.hideWindow(); } } @@ -96,8 +118,10 @@ public void hideWindow() { calquesPanel_.unsetCalqueInteractionActif(calqueAbscisseCurviligne_); + calqueAbscisseCurviligne_.stopEdition(); if (calquesPanel_.getController().getCqSelectionI()!=null) calquesPanel_.getController().getCqSelectionI().setGele(false); + ((BPaletteAbscisseCurviligne)palette_).setAbcisseCurviligne(0); super.hideWindow(); } @@ -130,12 +154,15 @@ /** * Est appel\xE9 par le calque d'interaction pour indiquer le point click\xE9. * @param _coord la coordonn\xE9 r\xE9el. + * @return true si le click est consid\xE9r\xE9 comme sur la g\xE9om\xE9trie, false sinon */ - public void coordinateClicked(Coordinate _coord, double tolerance){ + public boolean coordinateClicked(Coordinate _coord, double tolerance){ Point ptClick=new GeometryFactory().createPoint(_coord); + boolean returnValue=false; if (selectedGeometry_!=null&&selectedGeometry_.distance(ptClick)<tolerance) { // Recherche de l'index du dernier point de la polyligne \xE0 prendre en // compte. + returnValue=true; boolean fini=false; int i=-1; CoordinateSequence coordSeq=selectedGeometry_.getCoordinateSequence(); @@ -147,18 +174,28 @@ for (int j=1; j<=i; j++) valueCurviligne+=Math.sqrt(Math.pow(coordSeq.getOrdinate(j, 0)-coordSeq.getOrdinate(j-1, 0), 2) +Math.pow(coordSeq.getOrdinate(j, 1)-coordSeq.getOrdinate(j-1, 1), 2)); - valueCurviligne+=Math.sqrt(Math.pow(coordSeq.getOrdinate(i, 0)-ptClick.getX(), 2) - +Math.pow(coordSeq.getOrdinate(i, 1)-ptClick.getY(), 2)); + // th de Pythagore + valueCurviligne+=Math.sqrt(Math.pow((Math.sqrt(Math.pow(coordSeq.getOrdinate(i, 0)-ptClick.getX(), 2) + +Math.pow(coordSeq.getOrdinate(i, 1)-ptClick.getY(), 2))), 2) + -Math.pow(selectedGeometry_.distance(ptClick), 2)); ((BPaletteAbscisseCurviligne)palette_).setAbcisseCurviligne(valueCurviligne); } + else if(selectedGeometry_!=null) + ((BPaletteAbscisseCurviligne)palette_).setMessage(FudaaLib.getS("pas de valeur")); + return returnValue; } - + @Override public JComponent buildContentPane() { - if (palette_==null) + if (palette_==null){ // Cr\xE9ation de l'internal frame affichant l'information curviligne palette_=new BPaletteAbscisseCurviligne(calqueAbscisseCurviligne_, calquesPanel_.getController().getEbliFormatter(), calquesPanel_); + // Ecoute de la fen\xEAtre principale pour pouvoir se r\xE9duire avec elle + final Container c = SwingUtilities.getAncestorOfClass(JInternalFrame.class, calquesPanel_); + if (c instanceof JInternalFrame) + ((JInternalFrame) c).addInternalFrameListener(new AbcisseFrameListener()); + } return palette_.getComponent(); } } \ No newline at end of file Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java 2008-11-23 21:43:45 UTC (rev 4237) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/BPaletteAbscisseCurviligne.java 2008-11-25 15:54:12 UTC (rev 4238) @@ -31,7 +31,7 @@ * Palette affichant un abscisse curviligne. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class BPaletteAbscisseCurviligne extends CtuluDialogPanel implements ActionListener, BPalettePanelInterface, PropertyChangeListener { @@ -103,4 +103,9 @@ public void setAbcisseCurviligne(double _value){ lblCoordonneeCurviligne_.setText(formatter_.getXYFormatter().format(_value)); } + + public void setMessage(String _message){ + lblCoordonneeCurviligne_.setText(_message); + } + } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java 2008-11-23 21:43:45 UTC (rev 4237) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java 2008-11-25 15:54:12 UTC (rev 4238) @@ -7,7 +7,10 @@ */ package org.fudaa.fudaa.modeleur.layer; +import java.awt.Color; +import java.awt.Component; import java.awt.Cursor; +import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -15,6 +18,7 @@ import org.fudaa.ebli.calque.BCalqueInteraction; import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.ebli.trace.TraceIcon; import org.fudaa.fudaa.modeleur.action.SceneAbscisseCurviligneAction; import com.memoire.bu.BuResource; @@ -24,18 +28,79 @@ * Permet de capter des \xE9v\xE9nements souris pour calculer un abscisse curviligne. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class ZCalqueAbscisseCurviligneInteraction extends BCalqueInteraction implements MouseListener { /** L'action g\xE9rant le calcule de l'abcisse curviligne. */ private SceneAbscisseCurviligneAction controller_; + /** Le dernier click effectu\xE9. */ + private Coordinate lastClick_; + /** La sonde \xE0 afficher \xE0 l'endroit du click. */ + private TraceIcon sonde_; + /** Indique si la sonde est affich\xE9e. */ + private boolean sondePainted_; public ZCalqueAbscisseCurviligneInteraction(SceneAbscisseCurviligneAction _controller){ setName("cqInteractifAbscisseCurviligne"); controller_=_controller; + sondePainted_=false; + sonde_=new TraceIcon(TraceIcon.RIEN, 6) { + public void paintIconCentre(Component _c, Graphics _g, int _x, int _y) { + Color old=null; + if (getCouleur()!=null) { + old=_g.getColor(); + _g.setColor(getCouleur()); + } + final int taille=super.getTaille(); + final int demiTaille=taille/2; + _g.drawLine(_x-demiTaille, _y, _x-taille, _y+1); + _g.drawLine(_x-demiTaille, _y, _x-taille, _y-1); + _g.drawLine(_x+demiTaille, _y, _x+taille, _y+1); + _g.drawLine(_x+demiTaille, _y, _x+taille, _y-1); + _g.drawLine(_x, _y-demiTaille, _x+1, _y-taille); + _g.drawLine(_x, _y-demiTaille, _x-1, _y-taille); + _g.drawLine(_x, _y+demiTaille, _x+1, _y+taille); + _g.drawLine(_x, _y+demiTaille, _x-1, _y+taille); + _g.drawLine(_x, _y-taille, _x, _y+taille); + _g.drawLine(_x-taille, _y, _x+taille, _y); + if (super.getCouleur()!=null) { + _g.setColor(old); + } + } + }; + sonde_.setCouleur(Color.BLACK); } + private void drawSonde(Graphics g){ + if (lastClick_!=null) { + Coordinate c=reelToEcran(lastClick_); + sonde_.paintIconCentre(this, g, (int)c.x, (int)c.y); + } + } + + protected void afficheSonde(){ + if(!sondePainted_){ + Graphics g=getGraphics(); + if(g!=null){ + g.setXORMode(getBackground()); + drawSonde(g); + } + sondePainted_=true; + } + } + + protected void effaceSonde(){ + if(sondePainted_){ + Graphics g=getGraphics(); + if(g!=null){ + g.setXORMode(getBackground()); + drawSonde(g); + } + sondePainted_=false; + } + } + /** Converti une coordonn\xE9e \xE9cran en coordonn\xE9e r\xE9el. */ protected Coordinate ecranToReel(Coordinate coord){ GrPoint tmp=new GrPoint(coord.x, coord.y, 0); @@ -43,8 +108,15 @@ return new Coordinate(tmp.x_, tmp.y_); } + /** converti une coordonn\xE9e \xE9cran en coordonn\xE9e r\xE9el. */ + protected Coordinate reelToEcran(Coordinate coord){ + GrPoint tmp=new GrPoint(coord.x, coord.y, 0); + tmp.autoApplique(getVersEcran()); + return new Coordinate(tmp.x_, tmp.y_); + } + public Cursor getSpecificCursor() { - return EbliResource.EBLI.getCursor("curseur_distance", -1, new Point(2, 2)); + return EbliResource.EBLI.getCursor("curseur_distance", -1, new Point(6, 6)); } public boolean alwaysPaint() { @@ -59,14 +131,22 @@ public void mouseClicked(final MouseEvent _evt) {} - public void mouseEntered(final MouseEvent _evt) {} + public void mouseEntered(final MouseEvent _evt) { + if(!isGele()) + afficheSonde(); + } public void mousePressed(final MouseEvent _evt) {} - public void mouseExited(final MouseEvent _evt) {} + public void mouseExited(final MouseEvent _evt) { + if(!isGele()) + effaceSonde(); + } public void mouseReleased(final MouseEvent _evt) { if (!isGele()&&_evt.getButton()==MouseEvent.BUTTON1){ + effaceSonde(); + lastClick_=ecranToReel(new Coordinate(_evt.getX(), _evt.getY())); // Calcule de la tol\xE9rance au click double tolerance; GrPoint p1=new GrPoint(0, 0, 0); @@ -76,7 +156,21 @@ p2.autoApplique(getVersEcran()); tolerance/=p1.distance(p2); // Mise a jour de l'action - controller_.coordinateClicked(ecranToReel(new Coordinate(_evt.getX(), _evt.getY())), tolerance); + if(controller_.coordinateClicked(lastClick_, tolerance)) + afficheSonde(); } } + + /** Indique au calque qu'il faut s'arr\xEAter. */ + public void stopEdition(){ + lastClick_=null; + } + + public void setGele(boolean _gele){ + if(_gele) + effaceSonde(); + else + afficheSonde(); + super.setGele(_gele); + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoLayerDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoLayerDefault.java 2008-11-23 21:43:45 UTC (rev 4237) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoLayerDefault.java 2008-11-25 15:54:12 UTC (rev 4238) @@ -412,7 +412,7 @@ repaint(); } // pour le panel d'info - fireSelectionEvent(); + getIsoModelAbstract().fireModelAction(); return sondeSelectedElement_ >= 0; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoModelAbstract.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoModelAbstract.java 2008-11-23 21:43:45 UTC (rev 4237) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/post/TrIsoModelAbstract.java 2008-11-25 15:54:12 UTC (rev 4238) @@ -9,13 +9,9 @@ import javax.swing.ListModel; -import com.memoire.bu.BuTable; -import com.memoire.fu.FuLog; - import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ctulu.CtuluNumberFormatI; import org.fudaa.ctulu.CtuluRange; - import org.fudaa.dodico.ef.EfData; import org.fudaa.dodico.ef.EfElement; import org.fudaa.dodico.ef.EfFilterTime; @@ -23,21 +19,23 @@ import org.fudaa.dodico.ef.EfLib; import org.fudaa.dodico.ef.impl.EfGrid; import org.fudaa.dodico.h2d.type.H2dVariableType; - import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZModelListener; import org.fudaa.ebli.commun.EbliUIProperties; import org.fudaa.ebli.find.EbliFindExpressionComposite; import org.fudaa.ebli.find.EbliFindExpressionContainerInterface; import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.ebli.geometrie.GrPolygone; import org.fudaa.ebli.palette.BPaletteInfo.InfoData; - import org.fudaa.fudaa.meshviewer.model.MvElementModelDefault; import org.fudaa.fudaa.meshviewer.model.MvExpressionSupplierElement; import org.fudaa.fudaa.meshviewer.model.MvExpressionSupplierNode; import org.fudaa.fudaa.meshviewer.model.MvInfoDelegate; import org.fudaa.fudaa.meshviewer.model.MvNodeModel; +import com.memoire.bu.BuTable; +import com.memoire.fu.FuLog; + /** * @author Fred Deniger * @version $Id: TrIsoModelAbstract.java,v 1.24 2007-05-04 14:01:51 deniger Exp $ @@ -110,6 +108,10 @@ return -1; } + public void fireModelAction() { + super.fireModelAction(-1, null, ZModelListener.GEOMETRY_ACTION_MODIFY); + } + /** * @param _s la source * @param _varModel le modele contenant les variables This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-11-28 17:01:36
|
Revision: 4252 http://fudaa.svn.sourceforge.net/fudaa/?rev=4252&view=rev Author: emmanuel_martin Date: 2008-11-28 17:01:34 +0000 (Fri, 28 Nov 2008) Log Message: ----------- Tache #89 : "Calculer un profil a partir d'un nuage de points". Un algorithme d'essai (InterpolationProfilTest) est temporairement int?\195?\169gr?\195?\169 en attendant l'algo final. Modified Paths: -------------- 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/ProfileCalculatorWindow.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/MdlSceneEditor.java Added Paths: ----------- 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/InterpolationProfilTest.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/action/SceneProfilInterpolation.java Added: 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 (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/GISDataModelToPointCloudAdapter.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -0,0 +1,88 @@ +/* + * @creation 27 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.ctulu.interpolation.profile; + +import java.util.HashMap; +import java.util.Map; + +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISMultiPoint; + +import org.fudaa.ctulu.collection.CtuluCollection; + +/** + * Prend une GISDataModel, ne tient compte que des GISMultiPoints et montre le + * tout sous forme d'un nuage de points. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class GISDataModelToPointCloudAdapter implements PointCloudI{ + + /** + * Table de correspondance entre les indices virtuels et r\xE9els. La clef est + * l'indice virtuel, le tableau contient en premi\xE8re valeur l'indice du + * multipoint et en seconde valeur l'indice du point r\xE9el dans le mutipoint. + */ + private Map<Integer, Integer[]> correspondance_=new HashMap<Integer, Integer[]>(); + /** Le model de r\xE9f\xE9rence. */ + private GISDataModel model_; + /** L'attribut contenant le z. */ + private GISAttributeInterface attributeZ_; + + /** + * @param _model le mod\xE8le a adapter + * @param l'attribut contenant le z. Si null le z des points sera prit. + */ + public GISDataModelToPointCloudAdapter(GISDataModel _model, GISAttributeInterface _attrZ){ + int idxCorrespondance=0; + model_=_model; + 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++) + correspondance_.put(idxCorrespondance++, new Integer[]{i, j}); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.interpolation.profile.PointCloudI#getNbPoints() + */ + public int getNbPoints() { + return correspondance_.size(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.interpolation.profile.PointCloudI#getX(int) + */ + public double getX(int _idx) { + return ((GISMultiPoint)model_.getGeometry(correspondance_.get(_idx)[0])).getCoordinateSequence().getX(correspondance_.get(_idx)[1]); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.interpolation.profile.PointCloudI#getY(int) + */ + public double getY(int _idx) { + return ((GISMultiPoint)model_.getGeometry(correspondance_.get(_idx)[0])).getCoordinateSequence().getY(correspondance_.get(_idx)[1]); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.interpolation.profile.PointCloudI#getZ(int) + */ + public double getZ(int _idx) { + if (attributeZ_==null) + return ((GISMultiPoint)model_.getGeometry(correspondance_.get(_idx)[0])).getCoordinateSequence().getOrdinate(correspondance_.get(_idx)[1], 2); + else { + Object value=model_.getValue(model_.getIndiceOf(attributeZ_), correspondance_.get(_idx)[0]); + if (!attributeZ_.isAtomicValue()) + return ((Double)value).doubleValue(); + else + return ((Double)((CtuluCollection)value).getObjectValueAt(correspondance_.get(_idx)[1])).doubleValue(); + } + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/GISDataModelToPointCloudAdapter.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -0,0 +1,236 @@ +/* + * @creation 28 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.ctulu.interpolation.profile; + +import java.util.ArrayList; +import java.util.List; + +import org.fudaa.ctulu.gis.GISPoint; + +import com.vividsolutions.jts.geom.Coordinate; + +/** + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class InterpolationProfilTest { + + private GISPoint[] ptsTrace_; + private PointCloudI cloud_; + + public InterpolationProfilTest(GISPoint[] _ptsTrace, PointCloudI _cloud) { + ptsTrace_=_ptsTrace; + cloud_=_cloud; + } + + public GISPoint[] process() { + GISPoint ptTrace1=ptsTrace_[0]; + GISPoint ptTrace2=ptsTrace_[ptsTrace_.length-1]; + List<GISPoint> profil=new ArrayList<GISPoint>(); + // 1 : Cr\xE9ation de la liste des points projet\xE9s et clacul de la distance + // entre le point d'origine et le point projet\xE9. \\ + /* + * Le point projet\xE9, son indice dans le nuage et la distance entre les deux + * points, distance entre le point projet\xE9 et l'origine de la trace, et si + * il se trouve en haut de la trace. + */ + List<Object[]> pointProj=new ArrayList<Object[]>(cloud_.getNbPoints()); + for (int i=0; i<cloud_.getNbPoints(); i++) { + double x=cloud_.getX(i); + double y=cloud_.getY(i); + double z=cloud_.getZ(i); + Coordinate proj=projection(ptTrace1, ptTrace2, x, y, z); + pointProj.add(new Object[]{proj, i, dist(proj.x, proj.y, proj.z, x, y, z), dist(ptTrace1.getCoordinate(), proj), + enHaut(ptTrace1, ptTrace2, x, y, z)}); + } + // Tri des points projet\xE9s par rapport \xE0 la distance entre le point proj et + // l'origine de la trace + for (int i=0; i<pointProj.size(); i++) + for (int j=0; j<pointProj.size()-1; j++) + if ((Double)pointProj.get(j)[3]>(Double)pointProj.get(j+1)[3]) { + Object[] tmp=pointProj.get(j); + pointProj.set(j, pointProj.get(j+1)); + pointProj.set(j+1, tmp); + } + + // 2 : Suppression des points trop \xE9loign\xE9s + // Boucle sur les points en haut de la droite; cr\xE9ation d'une table de + // correspondance ne gardant que les points au dessus + List<Integer> pHaut=new ArrayList<Integer>(); + for (int i=0; i<pointProj.size(); i++) + if ((Boolean)pointProj.get(i)[4]) + pHaut.add(i); + + List<Integer> ptSuppr=new ArrayList<Integer>(); + int i=1; + while (i<pHaut.size()-1) { + int iProjPre=pHaut.get(i-1); + int iProj=pHaut.get(i); + int iProjPost=pHaut.get(i+1); + int iNuagePre=(Integer)pointProj.get(iProjPre)[1]; + int iNuagePost=(Integer)pointProj.get(iProjPost)[1]; + + if ((Double)pointProj.get(iProj)[2]>dist(cloud_.getX(iNuagePre), cloud_.getY(iNuagePre), cloud_.getZ(iNuagePre), cloud_ + .getX(iNuagePost), cloud_.getY(iNuagePost), cloud_.getZ(iNuagePost)) + &&(Double)pointProj.get(iProj)[2]>(Double)pointProj.get(iProjPre)[2] + &&(Double)pointProj.get(iProj)[2]>(Double)pointProj.get(iProjPost)[2]) { + pHaut.remove(i); + ptSuppr.add(iProj); + if (i>1) + i--; // reteste le point pr\xE9c\xE9dent, sont suivant ayant chang\xE9. + } + else + i++; + } + // supression des points inutils en haut. + for (i=0; i<ptSuppr.size(); i++) { + for (int j=0; j<ptSuppr.size()-1; j++) + if (ptSuppr.get(j)>ptSuppr.get(j+1)) { + Integer tmp=ptSuppr.get(j); + ptSuppr.set(j, ptSuppr.get(j+1)); + ptSuppr.set(j+1, tmp); + } + } + for (int j=ptSuppr.size()-1; j>=0; j--) + pointProj.remove(((Integer)ptSuppr.get(j)).intValue()); + + // Boucle sur les points en bas de la droite + ptSuppr.clear(); + List<Integer> pBas=new ArrayList<Integer>(); + for (i=0; i<pointProj.size(); i++) + if (!(Boolean)pointProj.get(i)[4]) + pBas.add(i); + + i=1; + while (i<pBas.size()-1) { + int iProjPre=pBas.get(i-1); + int iProj=pBas.get(i); + int iProjPost=pBas.get(i+1); + int iNuagePre=(Integer)pointProj.get(iProjPre)[1]; + int iNuagePost=(Integer)pointProj.get(iProjPost)[1]; + + if ((Double)pointProj.get(iProj)[2]>dist(cloud_.getX(iNuagePre), cloud_.getY(iNuagePre), cloud_.getZ(iNuagePre), cloud_ + .getX(iNuagePost), cloud_.getY(iNuagePost), cloud_.getZ(iNuagePost)) + &&(Double)pointProj.get(iProj)[2]>(Double)pointProj.get(iProjPre)[2] + &&(Double)pointProj.get(iProj)[2]>(Double)pointProj.get(iProjPost)[2]) { + pBas.remove(i); + ptSuppr.add(iProj); + if (i>1) + i--; // reteste le point pr\xE9c\xE9dent, sont suivant ayant chang\xE9. + } + else + i++; + } + // Supression des points inutils en bas. + for (i=0; i<ptSuppr.size(); i++) { + for (int j=0; j<ptSuppr.size()-1; j++) + if (ptSuppr.get(j)>ptSuppr.get(j+1)) { + Integer tmp=ptSuppr.get(j); + ptSuppr.set(j, ptSuppr.get(j+1)); + ptSuppr.set(j+1, tmp); + } + } + for (int j=ptSuppr.size()-1; j>=0; j--) + pointProj.remove(((Integer)ptSuppr.get(j)).intValue()); + + // 3 : Cr\xE9ation des points du profil + // premier point mis d'office + profil.add(new GISPoint(((Coordinate)pointProj.get(0)[0]).x, ((Coordinate)pointProj.get(0)[0]).y, cloud_ + .getZ(((Integer)pointProj.get(0)[1]).intValue()))); + for (i=1; i<pointProj.size()-1; i++) { + int iNuage=((Integer)pointProj.get(i)[1]).intValue(); + double distTpIpre=(Double)pointProj.get(i-1)[2]; + double distTpI=(Double)pointProj.get(i)[2]; + double distTpIpost=(Double)pointProj.get(i+1)[2]; + double sommeDist=distTpIpre+distTpI+distTpIpost; + profil.add(new GISPoint( + (((Coordinate)pointProj.get(i-1)[0]).x*distTpIpre+((Coordinate)pointProj.get(i)[0]).x*distTpI+((Coordinate)pointProj + .get(i+1)[0]).x + *distTpIpost) + /sommeDist, + (((Coordinate)pointProj.get(i-1)[0]).y*distTpIpre+((Coordinate)pointProj.get(i)[0]).y*distTpI+((Coordinate)pointProj + .get(i+1)[0]).y + *distTpIpost) + /sommeDist, (cloud_.getZ(iNuage)*distTpIpre+cloud_.getZ(iNuage)*distTpI+cloud_.getZ(iNuage)*distTpIpost)/sommeDist)); + } + // Dernier point mis d'office + profil.add(new GISPoint(((Coordinate)pointProj.get(pointProj.size()-1)[0]).x, + ((Coordinate)pointProj.get(pointProj.size()-1)[0]).y, cloud_.getZ(((Integer)pointProj.get(pointProj.size()-1)[1]) + .intValue()))); + + // 4 : Suppression des points trop proches entre eux + /* + * Cr\xE9ation du seuil pour la suppression des points lorsqu'ils sont trop + * proches. + */ + double SEUIL; + double minZ=profil.get(0).getZ(); + double maxZ=profil.get(profil.size()-1).getZ(); + for (i=0; i<profil.size(); i++) { + if (profil.get(i).getZ()<minZ) + minZ=profil.get(i).getZ(); + else if (profil.get(i).getZ()>maxZ) + minZ=profil.get(i).getZ(); + } + /* Cast en float car en double \xE7a conne des fois des r\xE9sultat incoh\xE9rent... */ + SEUIL=((float)(maxZ-minZ))/((float)100); + // Suppression des points trop proches + i=1; + while (i<profil.size()) + if (Math.abs(profil.get(i-1).getZ()-profil.get(i).getZ())<=SEUIL&&profil.size()>2) + profil.remove(i); + else + i++; + // 5 : Fin de l'algo + return profil.toArray(new GISPoint[0]); + } + + /** Projection de a(x, y, z) sur la droite passant par o et e. */ + private Coordinate projection(GISPoint o, GISPoint e, double x, double y, double z) { + // Calcul de vecteur u=vec oe et normalisation + Coordinate vecU=new Coordinate(e.getX()-o.getX(), e.getY()-o.getY(), e.getZ()-o.getZ()); + double normeU=Math.sqrt(vecU.x*vecU.x+vecU.y*vecU.y+vecU.z*vecU.z); + vecU.x=vecU.x/normeU; + vecU.y=vecU.y/normeU; + vecU.z=vecU.z/normeU; + // Calcul du produit scalaire u et oa =k + double k=(x-o.getX())*vecU.x+(y-o.getY())*vecU.y+(z-o.getZ())*vecU.z; + // OP=ku + return new Coordinate(k*vecU.x+o.getX(), k*vecU.y+o.getY(), k*vecU.z+o.getZ()); + } + + /** + * Retourne vrai si le point a(x, y, z) est au dessus de la droite passant par + * o et e. Faux sinon. On part du principe que a et e on des valeurs de z=0 + */ + private boolean enHaut(GISPoint o, GISPoint e, double x, double y, double z) { + // Calcul de vecteur u=vec oe et normalisation + Coordinate vecU=new Coordinate(e.getX()-o.getX(), e.getY()-o.getY(), e.getZ()-o.getZ()); + double normeU=Math.sqrt(vecU.x*vecU.x+vecU.y*vecU.y+vecU.z*vecU.z); + vecU.x=vecU.x/normeU; + vecU.y=vecU.y/normeU; + vecU.z=vecU.z/normeU; + // Calcul du produit scalaire u et oa =k + double k=(x-o.getX())*vecU.x+(y-o.getY())*vecU.y+(z-o.getZ())*vecU.z; + // OP=ku + Coordinate p=new Coordinate(k*vecU.x+o.getX(), k*vecU.y+o.getY(), k*vecU.z+o.getZ()); + // Calcul du vecteur normal + Coordinate vecNormal=new Coordinate(vecU.y, -vecU.x); + // Calcul de l tq vecN*l=AP avec a projet\xE9 sur le plan z=0 + double l=(p.x-x)/vecNormal.x; + return l>0; + } + + private double dist(Coordinate a, Coordinate b) { + return dist(a.x, a.y, a.z, b.x, b.y, b.z); + } + + private double dist(double x2, double y2, double z2, double x, double y, double z) { + return Math.sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2)+(z-z2)*(z-z2)); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/InterpolationProfilTest.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 2008-11-28 16:49:12 UTC (rev 4251) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculator.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -6,11 +6,17 @@ */ package org.fudaa.ctulu.interpolation.profile ; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibGeometrie; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISPoint; +import org.fudaa.ctulu.gis.GISPolyligne; import com.memoire.fu.FuLog; import com.vividsolutions.jts.geom.Coordinate; @@ -19,7 +25,7 @@ * Calculateur de profil en travers \xE0 partir d'un nuage de points. * @author J.B. Faure * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ public class ProfileCalculator { @@ -121,7 +127,7 @@ double pente=10/dist; return pente; } - + /** * 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 @@ -133,46 +139,52 @@ FuLog.debug("CTU:Cloud Nb points="+cloud_.getNbPoints()); FuLog.debug("CTU:Fenetre selection Nb points="+window_.select(cloud_).getNbPoints()); - // Un algo tout a fait basique - - double x; - double y; - double[] zh=new double[3]; + if(_algo==0) + return new InterpolationProfilTest(ptsTrace_, cloud_).process(); + else if (_algo==1) { + // Un algo tout a fait basique + double x; + double y; + double[] zh=new double[3]; - // 3 fenetres de m\xEAme dimension, et calcul d'une hauteur moyenne sur chaque. - for (int i=0; i<3; i++) { - GISPoint[] pts=new GISPoint[4]; - x=window_.getCorner(0).getX()+(window_.getCorner(3).getX()-window_.getCorner(0).getX())*i/3.; - y=window_.getCorner(0).getY()+(window_.getCorner(3).getY()-window_.getCorner(0).getY())*i/3.; - pts[0]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); - x=window_.getCorner(1).getX()+(window_.getCorner(2).getX()-window_.getCorner(1).getX())*i/3.; - y=window_.getCorner(1).getY()+(window_.getCorner(2).getY()-window_.getCorner(1).getY())*i/3.; - pts[1]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); - x=window_.getCorner(1).getX()+(window_.getCorner(2).getX()-window_.getCorner(1).getX())*(i+1)/3.; - y=window_.getCorner(1).getY()+(window_.getCorner(2).getY()-window_.getCorner(1).getY())*(i+1)/3.; - pts[2]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); - x=window_.getCorner(0).getX()+(window_.getCorner(3).getX()-window_.getCorner(0).getX())*(i+1)/3.; - y=window_.getCorner(0).getY()+(window_.getCorner(3).getY()-window_.getCorner(0).getY())*(i+1)/3.; - pts[3]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); - - ProfileCalculatorWindow win=new ProfileCalculatorWindow(pts); - PointCloudI cloudwin=win.select(cloud_); - // Calcul de la hauteur moyenne. - zh[i]=0; - for (int j=0; j<cloudwin.getNbPoints(); j++) { - zh[i]+=cloudwin.getZ(j); + // 3 fenetres de m\xEAme dimension, et calcul d'une hauteur moyenne sur + // chaque. + for (int i=0; i<3; i++) { + GISPoint[] pts=new GISPoint[4]; + x=window_.getCorner(0).getX()+(window_.getCorner(3).getX()-window_.getCorner(0).getX())*i/3.; + y=window_.getCorner(0).getY()+(window_.getCorner(3).getY()-window_.getCorner(0).getY())*i/3.; + pts[0]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); + x=window_.getCorner(1).getX()+(window_.getCorner(2).getX()-window_.getCorner(1).getX())*i/3.; + y=window_.getCorner(1).getY()+(window_.getCorner(2).getY()-window_.getCorner(1).getY())*i/3.; + pts[1]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); + x=window_.getCorner(1).getX()+(window_.getCorner(2).getX()-window_.getCorner(1).getX())*(i+1)/3.; + y=window_.getCorner(1).getY()+(window_.getCorner(2).getY()-window_.getCorner(1).getY())*(i+1)/3.; + pts[2]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); + x=window_.getCorner(0).getX()+(window_.getCorner(3).getX()-window_.getCorner(0).getX())*(i+1)/3.; + y=window_.getCorner(0).getY()+(window_.getCorner(3).getY()-window_.getCorner(0).getY())*(i+1)/3.; + pts[3]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(x, y, 0); + + ProfileCalculatorWindow win=new ProfileCalculatorWindow(pts); + PointCloudI cloudwin=win.select(cloud_); + // Calcul de la hauteur moyenne. + zh[i]=0; + for (int j=0; j<cloudwin.getNbPoints(); j++) { + zh[i]+=cloudwin.getZ(j); + } + zh[i]/=cloudwin.getNbPoints(); + + FuLog.debug("CTU:Sous fenetre "+(i+1)+" Nb points="+cloudwin.getNbPoints()+", Zh="+zh[i]); } - zh[i]/=cloudwin.getNbPoints(); - FuLog.debug("CTU:Sous fenetre "+(i+1)+" Nb points="+cloudwin.getNbPoints()+", Zh="+zh[i]); + GISPoint[] prof=new GISPoint[ptsTrace_.length]; + for (int i=0; i<ptsTrace_.length; i++) { + double z=zh[(i*3)/ptsTrace_.length]; + prof[i]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(ptsTrace_[i].getX(), ptsTrace_[i].getY(), z); + } + + return prof; } - - GISPoint[] prof=new GISPoint[ptsTrace_.length]; - for (int i=0; i<ptsTrace_.length; i++) { - double z=zh[(i*3)/ptsTrace_.length]; - prof[i]=(GISPoint)GISGeometryFactory.INSTANCE.createPoint(ptsTrace_[i].getX(),ptsTrace_[i].getY(),z); - } - - return prof; + else + return null; } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculatorWindow.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculatorWindow.java 2008-11-28 16:49:12 UTC (rev 4251) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculatorWindow.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -22,7 +22,7 @@ * * @author J.B. Faure * @author Bertrand Marchand - * @version $Id:$ + * @version $Id$ */ public class ProfileCalculatorWindow { @@ -39,7 +39,7 @@ */ public ProfileCalculatorWindow(GISPoint[] _points) { - // TODO : Verifier que les 4 points forment bien un carr\xE9. + // TODO : Verifier que les 4 points forment bien un rectangle. Coordinate[] coords=new Coordinate[5]; for (int i=0; i<_points.length; i++) { coords[i]=(Coordinate)_points[i].getCoordinate().clone(); 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 2008-11-28 16:49:12 UTC (rev 4251) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -32,6 +32,7 @@ import org.fudaa.fudaa.modeleur.action.SceneInterpolationAction; import org.fudaa.fudaa.modeleur.action.SceneInvertAction; import org.fudaa.fudaa.modeleur.action.SceneMoveInLayerAction; +import org.fudaa.fudaa.modeleur.action.SceneProfilInterpolation; import org.fudaa.fudaa.modeleur.action.SceneProjectionAction; import org.fudaa.fudaa.modeleur.action.SceneRefinementAction; import org.fudaa.fudaa.sig.layer.FSigEditor; @@ -74,6 +75,7 @@ acts.add(new SceneRefinementAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneInvertAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneProjectionAction((MdlSceneEditor)sceneEditor_)); + acts.add(new SceneProfilInterpolation((MdlSceneEditor)sceneEditor_)); acts.add(new SceneAbscisseCurviligneAction(this)); getSceneEditor().setActions(acts.toArray(new EbliActionAbstract[0])); } Added: 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 (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -0,0 +1,240 @@ +/* + * @creation 8 sept. 06 + * @modification $Date: 2008-10-07 16:14:47 +0200 (mar., 07 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.fudaa.modeleur; + +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.util.HashMap; +import java.util.Map; + +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.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.ebli.calque.BArbreCalqueModel; +import org.fudaa.ebli.calque.CalqueGISTreeModel; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesAbstract; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZCalqueGeometry; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.edition.ZModeleGeometryDefault; +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.commun.FudaaLib; +import org.fudaa.fudaa.sig.FSigLib; +import org.fudaa.fudaa.tr.common.TrResource; + +import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuComboBox; +import com.memoire.bu.BuLabel; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Polygon; + +/** + * Un panneau de saisie des g\xE9om\xE9tries supports de projection suivant Z. + * @author Bertrand Marchand, Emmanuel MARTIN + * @version $Id$ + */ +public class MdlInterpolateProfilePanel extends CtuluDialogPanel { + + private ZEbliCalquesPanel pn_; + private GrBoite initZoom_; + private JTree trLayers_; + private ZCalqueGeometry cqTmp_; + private GISZoneCollection support_; + /** List des calques acceptant les profils avec pour clef leur nom. */ + private Map<String, ZCalqueAffichageDonneesInterface> calquesProfil_=new HashMap<String, ZCalqueAffichageDonneesInterface>(); + /** La comboBox contenant le calque de destination du profil. */ + private BuComboBox cbProfil_; + + public MdlInterpolateProfilePanel(ZEbliCalquesPanel _pn) { + pn_=_pn; + setLayout(new BuBorderLayout(5, 5)); + + BuLabel lbTitle=new BuLabel(FSigLib.getS("S\xE9lectionnez les semis")); + add(lbTitle, BuBorderLayout.NORTH); + + 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, BuBorderLayout.CENTER); + + // Liste des calques disponibles pour le profil r\xE9sultant \\ + ZCalqueAffichageDonneesInterface[] calques=pn_.getScene().getAllLayers(); + for(int i=0;i<calques.length;i++){ + if(calques[i].modeleDonnees() instanceof ZModeleGeometry){ + Object value=((ZModeleGeometry)calques[i].modeleDonnees()).getGeomData().getFixedAttributValue(GISAttributeConstants.NATURE); + if(value!=null&&value.equals(GISAttributeConstants.ATT_NATURE_PF)) + calquesProfil_.put(calques[i].getTitle(), calques[i]); + } + } + // Remplissage de la comboBox + cbProfil_=new BuComboBox(); + for(Map.Entry<String, ZCalqueAffichageDonneesInterface> entry:calquesProfil_.entrySet()) + cbProfil_.addItem(entry.getKey()); + // Selection par defaut + if(calquesProfil_.containsKey(pn_.getScene().getCalqueActif().getTitle())) + cbProfil_.setSelectedItem(pn_.getScene().getCalqueActif().getTitle()); + if(calquesProfil_.size()==0) + setErrorText(TrResource.getS("Aucun calque de profil n'a \xE9t\xE9 trouv\xE9, l'interpolation est impossible.")); + Container cont=new Container(); + cont.setLayout(new GridLayout(1, 2, 2, 2)); + cont.add(new BuLabel(FudaaLib.getS("Calque de destination : "))); + cont.add(cbProfil_); + add(cont, BuBorderLayout.SOUTH); + } + + public ZCalqueAffichageDonneesInterface getCalqueProfileDestination(){ + return calquesProfil_.get(cbProfil_.getSelectedItem()); + } + + /** + * Retourne les g\xE9ometries s\xE9lectionn\xE9es de l'arbre. Les g\xE9om\xE9tries transportent le Z en chaque point si un Z existe. + * @return Les g\xE9om\xE9tries, de taille = 0 si rien de selectionn\xE9. + */ + private Geometry[] getSelectedGeomInTree() { + if (trLayers_.isSelectionEmpty()) { + return null; + } + TreePath[] selpaths=trLayers_.getSelectionPaths(); + Geometry[] geoms=new Geometry[selpaths.length]; + for (int i=0; i<selpaths.length; i++) { + final CalqueGISTreeModel.LayerNode node=(CalqueGISTreeModel.LayerNode)selpaths[i].getLastPathComponent(); + final ZCalqueAffichageDonneesAbstract cq = (ZCalqueAffichageDonneesAbstract) node.getUserObject(); + GISZoneCollection col=((ZModeleGeometry)cq.modeleDonnees()).getGeomData(); + // Pour le transport du Z. + col.initZCoordinate(node.getIdxGeom()); + geoms[i]=col.getGeometry(node.getIdxGeom()); + } + + return geoms; + } + + /** + * 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 Geometry[] _geoms, final boolean _zoom) { + if (pn_==null) { + return; + } + if (_geoms == null || _geoms.length==0) { + if (cqTmp_ != null) { + cqTmp_.setVisible(false); + } + return; + } + + ZModeleGeometryDefault mdl=new ZModeleGeometryDefault(); + support_=mdl.getGeomData(); + + for (int i=0; i<_geoms.length; i++) { + support_.addGeometry(_geoms[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(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(TrResource.getS("Vous devez s\xE9lectionner au moins 1 semis")); + return false; + } + return true; + } + + /** + * Retourne le modele des g\xE9om\xE9tries supports (les g\xE9om\xE9tries s\xE9l\xE9ectionn\xE9es dans l'arbre). + * @return Le mod\xE8le. + */ + public GISZoneCollection 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(); + } + +} \ No newline at end of file Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlInterpolateProfilePanel.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native 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 2008-11-28 16:49:12 UTC (rev 4251) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -19,9 +19,7 @@ import javax.swing.JDialog; import javax.swing.JPanel; -import org.fudaa.ctulu.CtuluCommand; import org.fudaa.ctulu.CtuluCommandComposite; -import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.gis.GISAttributeConstants; @@ -32,6 +30,8 @@ import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISMultiPoint; +import org.fudaa.ctulu.gis.GISPoint; +import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gis.GISZoneCollectionGeometry; import org.fudaa.ctulu.interpolation.InterpolationParameters; @@ -40,6 +40,9 @@ import org.fudaa.ctulu.interpolation.InterpolationTarget; import org.fudaa.ctulu.interpolation.InterpolationTargetGISAdapter; import org.fudaa.ctulu.interpolation.bilinear.InterpolatorBilinear; +import org.fudaa.ctulu.interpolation.profile.GISDataModelToPointCloudAdapter; +import org.fudaa.ctulu.interpolation.profile.ProfileCalculator; +import org.fudaa.ctulu.interpolation.profile.ProfileCalculatorWindow; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; import org.fudaa.ebli.calque.ZModeleDonnees; import org.fudaa.ebli.calque.ZModeleGeometry; @@ -377,6 +380,76 @@ } /** + * Interpole un profil \xE0 partir d'un nuage de point. + */ + public void interpolateProfile() { + MdlInterpolateProfilePanel pnInterpolateProfile=new MdlInterpolateProfilePanel(pn_); + if (pnInterpolateProfile.afficheModaleOk(pn_.getFrame(), FudaaLib.getS("Interpolation d'un profil"))&&pnInterpolateProfile.getCalqueProfileDestination()!=null) { + 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)})); + // R\xE9cup\xE9ration des points de la trace du profil + int idGeom=scene_.getSelectionHelper().getUniqueSelectedIdx(); + if(idGeom==-1||!(scene_.getObject(idGeom) instanceof Geometry)){ + ui_.error(FudaaLib.getS("L'interpolation n'est pas possible \xE0 partir de cette selection.")); + return; + } + Coordinate[] coords=((Geometry) scene_.getObject(idGeom)).getCoordinates(); + GISPoint[] points=new GISPoint[coords.length]; + 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++) + attrs[i]=mdl.getAttribute(i); + int nbMultiPoint=0; + for(int i=0;i<mdl.getNumGeometries();i++) + if(mdl.getGeometry(i) instanceof GISMultiPoint) + nbMultiPoint++; + int[] idxMultiPoint=new int[nbMultiPoint]; + int j=0; + for(int i=0;i<mdl.getNumGeometries();i++) + 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); + // Ajout du r\xE9sultat dans le calque cible + GISZoneCollection zone=((ZModeleGeometry)pnInterpolateProfile.getCalqueProfileDestination().modeleDonnees()).getGeomData(); + coords=new Coordinate[profil.length]; + for(int i=0;i<coords.length;i++) + coords[i]=new Coordinate(profil[i].getX(),profil[i].getY(),profil[i].getZ()); + GISPolyligne poly=GISGeometryFactory.INSTANCE.createLineString(coords); + Object[] data=new Object[zone.getNbAttributes()]; + if(zone.getAttributeIsZ()!=null){ + int idxZattr=zone.getIndiceOf(zone.getAttributeIsZ()); + data[idxZattr]=new Object[coords.length]; + for(int i=0;i<coords.length;i++) + ((Object[])data[idxZattr])[i]=profil[i].getZ(); + } + ((ZModeleGeometry)pnInterpolateProfile.getCalqueProfileDestination().modeleDonnees()).getGeomData().addGeometry(poly, data, mng_); + } + } + + /** * Projete une g\xE9om\xE9trie sur un ensemble de points d'un ou plusieurs semis. */ public void projectSelectedObject() { Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProfilInterpolation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProfilInterpolation.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProfilInterpolation.java 2008-11-28 17:01:34 UTC (rev 4252) @@ -0,0 +1,70 @@ +/* + * @creation 26 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.fudaa.modeleur.action; + +import java.awt.event.ActionEvent; + +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +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.ZScene.SceneSelectionHelper; +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.fudaa.modeleur.MdlSceneEditor; + +import com.memoire.bu.BuResource; + +/** + * Une action pour projeter une g\xE9om\xE9trie sur un ou des semis de points. + * @author Emmanuel MARTIN + */ +public class SceneProfilInterpolation extends EbliActionSimple implements ZSelectionListener { + MdlSceneEditor sceneEditor_; + + public SceneProfilInterpolation(MdlSceneEditor _sceneEditor) { + super(BuResource.BU.getString("Interpoler un profil"), null, "INTERPOLE_PROFIL"); + sceneEditor_=_sceneEditor; + sceneEditor_.getScene().addSelectionListener(this); + } + + public void actionPerformed(final ActionEvent _e) { + sceneEditor_.interpolateProfile(); + } + + public void updateForSelectionChanged() { + ZScene scn=sceneEditor_.getScene(); + SceneSelectionHelper hlp=sceneEditor_.getScene().getSelectionHelper(); + boolean b=false; + // Si la selection est en mode globale et qu'une seule g\xE9om\xE9trie est selectionn\xE9e. + if(!scn.isAtomicMode()&&hlp.getUniqueSelectedIdx()!=-1){ + int idGeom=scn.sceneId2LayerId(hlp.getUniqueSelectedIdx()); + ZCalqueAffichageDonneesInterface calque=scn.getLayerForId(hlp.getUniqueSelectedIdx()); + // La nature de la g\xE9om\xE9trie est bien trace profil + if(calque.modeleDonnees() instanceof ZModeleGeometry){ + GISZoneCollection zone=((ZModeleGeometry) calque.modeleDonnees()).getGeomData(); + b=zone.getValue(zone.getIndiceOf(GISAttributeConstants.NATURE), idGeom).equals(GISAttributeConstants.ATT_NATURE_TP); + } + } + setEnabled(b); + } + + public String getEnableCondition() { + return CtuluLib.getS("S\xE9lectionner une trace de profil."); + } + + /* (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/SceneProfilInterpolation.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...> - 2008-12-01 10:20:32
|
Revision: 4253 http://fudaa.svn.sourceforge.net/fudaa/?rev=4253&view=rev Author: bmarchan Date: 2008-12-01 10:20:16 +0000 (Mon, 01 Dec 2008) Log Message: ----------- Debut de mise en place des menus pour acc?\195?\168s au 1D. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.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/MdlImplementation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjet.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow1DFrameAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow2DFrameAction.java Property Changed: ---------------- 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/MdlImplementation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjet.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java 2008-11-28 17:01:34 UTC (rev 4252) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/com/memoire/bu/BuCommonImplementation.java 2008-12-01 10:20:16 UTC (rev 4253) @@ -88,6 +88,9 @@ protected boolean buildMainPanel_ = true; + /** + * @return Si false, le desktop n'a pas de scrollbar. + */ protected boolean useScrollInBuDesktop() { return true; } 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 2008-11-28 17:01:34 UTC (rev 4252) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java 2008-12-01 10:20:16 UTC (rev 4253) @@ -1,6 +1,6 @@ /** * @creation 12 juin 2003 - * @modification $Date: 2008-03-18 11:05:42 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -95,7 +95,7 @@ /** * @author deniger - * @version $Id: FudaaCommonImplementation.java,v 1.10.4.1 2008-03-18 11:05:42 bmarchan Exp $ + * @version $Id$ */ public abstract class FudaaCommonImplementation extends BuCommonImplementation implements FudaaUI { @@ -220,6 +220,10 @@ } } + /** + * Ajoute un composant d'acc\xE8s a la liste des InternalFrame a gauche du frame + * principal. + */ protected void addFrameListLeft() { if (getMainPanel() != null) { final BuColumn left = getMainPanel().getLeftColumn(); @@ -321,7 +325,7 @@ /** * Methode a surcharger pour ajouter ces propres panneaux de pref. */ - protected void buildPreferences(final List _frAddTab) { + protected void buildPreferences(final List<BuAbstractPreferencesPanel> _frAddTab) { _frAddTab.add(new BuUserPreferencesPanel(this)); _frAddTab.add(new BuLanguagePreferencesPanel(this)); _frAddTab.add(new BuDesktopPreferencesPanel(this)); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/commun/impl/FudaaCommonImplementation.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java 2008-11-28 17:01:34 UTC (rev 4252) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java 2008-12-01 10:20:16 UTC (rev 4253) @@ -1,6 +1,6 @@ /* * @creation 7 juin 07 - * @modification $Date: 2008/05/13 12:10:12 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -50,6 +50,9 @@ import org.fudaa.fudaa.commun.save.FudaaSaveLib; import org.fudaa.fudaa.commun.save.FudaaSaveProject; import org.fudaa.fudaa.commun.save.FudaaSaveZipLoader; +import org.fudaa.fudaa.modeleur.action.MdlShow1DFrameAction; +import org.fudaa.fudaa.modeleur.action.MdlShow2DFrameAction; +import org.fudaa.fudaa.ressource.FudaaResource; import org.fudaa.fudaa.sig.FSigLib; import org.fudaa.fudaa.sig.FSigProjectPersistence; import org.fudaa.fudaa.sig.FSigResource; @@ -58,10 +61,12 @@ import org.fudaa.fudaa.tr.common.TrProjectPersistence; import org.fudaa.fudaa.tr.common.TrResource; +import com.memoire.bu.BuAbstractPreferencesPanel; import com.memoire.bu.BuBrowserPreferencesPanel; import com.memoire.bu.BuColumn; import com.memoire.bu.BuDesktopPreferencesPanel; import com.memoire.bu.BuInformationsSoftware; +import com.memoire.bu.BuInternalFrame; import com.memoire.bu.BuLanguagePreferencesPanel; import com.memoire.bu.BuLib; import com.memoire.bu.BuMainPanel; @@ -82,7 +87,7 @@ * actions, des \xE9tats de l'interface, etc. * * @author Bertrand Marchand - * @version $Id: MdlImplementation.java,v 1.1.2.9 2008/05/13 12:10:12 bmarchan Exp $ + * @version $Id$ */ public class MdlImplementation extends FudaaCommonImplementation implements FudaaProjectStateListener { @@ -127,15 +132,23 @@ return isMdl_; } - MdlFille2d currentFrame_; - MdlProjet project_; public final static FileFilter FILTER = new MdlFileFilter(); + /** Fenetre interne pour le modeleur 2D. */ + MdlFille2d mdl2dFrame_; + /** Projet modeleur. */ + MdlProjet project_; + public MdlImplementation() { super(); useNewHelp_ = false; } + /** + * Retourne le fichier s\xE9lectionn\xE9 par boite de dialogue. + * @param _saveDialog true : Save dialog, test si fichier existant avant ecriture. + * @return LE fichier, ou null si op\xE9ration abort\xE9e. + */ private File chooseNewFile(boolean _saveDialog) { return getDestFile(chooseFile(_saveDialog)); } @@ -170,10 +183,20 @@ setEnabledForAction(CtuluExportDataInterface.EXPORT_CMD, bprjOpen); } - void createNewInternalFrame(/*boolean _add*/) { - currentFrame_ = new MdlFille2d(this); - /*if (_add) */addInternalFrame(currentFrame_); + /** + * Creation de la vue 2D, et ajout. + */ + void createNew2dFrame() { + mdl2dFrame_ = new MdlFille2d(this); + addInternalFrame(mdl2dFrame_); } + + /** + * @return La vue 2D, ou null si inexistante. + */ + public MdlFille2d get2dFrame() { + return mdl2dFrame_; + } protected boolean buildExportDataToolIcon() { return true; @@ -195,22 +218,25 @@ if (project_==null) return; project_.close(); try { - currentFrame_.setClosed(true); + mdl2dFrame_.setClosed(true); } catch (PropertyVetoException _evt) { FuLog.error(_evt); } removeInternalFrames(getAllInternalFrames()); -// removeInternalFrame(currentFrame_); - getMainMenuBar().repaint(); + getMainMenuBar().getMenu("mnPROJECT").setVisible(false); project_ = null; } + /** + * Cr\xE9e un nouveau projet, la fenetre 2D si necessaire. + * @param _add true : Recr\xE9e la fenetre. + */ protected void createProject(final boolean _add) { project_ = new MdlProjet(); project_.setOpening(true); - if (_add) createNewInternalFrame(); - else ((MdlVisuPanel)currentFrame_.getVisuPanel()).initCalques(false); + if (_add) createNew2dFrame(); + else ((MdlVisuPanel)mdl2dFrame_.getVisuPanel()).initCalques(false); project_.install(this); BuLib.invokeLater(new Runnable() { @@ -219,7 +245,7 @@ // changeSaveActions(false); updateActionsState(); project_.setSaved(); - getMainMenuBar().repaint(); + getMainMenuBar().getMenu("mnPROJECT").setVisible(true); } }); } @@ -293,6 +319,9 @@ return true; } + /** + * Action "Creer" un nouveau projet. + */ public void create() { saveAndCloseProjet(new Runnable() { public void run() { @@ -301,6 +330,9 @@ }); } + /** + * Action "Fermer" le projet en cours. + */ public void close() { saveAndCloseProjet(null); updateActionsState(); @@ -319,7 +351,7 @@ } /** - * Ouvre un nouveau projet. Peut demander la sauvegarde du projet pr\xE9c\xE9demment ouvert si + * Action "Ouvrir" un nouveau projet. Peut demander la sauvegarde du projet pr\xE9c\xE9demment ouvert si * existant. * @param _f Le fichier projet \xE0 ouvrir. null, si le fichier doit etre choisi par l'utilisateur. */ @@ -353,7 +385,7 @@ BuInformationsSoftware is=FudaaSaveProject.getSoftwareInfos(loader); FuLog.warning("File version : "+(is.version==null ? "Undefined":is.version)); - r= FudaaSaveLib.restoreFille(MdlImplementation.this, currentFrame_, _proj,loader); + r= FudaaSaveLib.restoreFille(MdlImplementation.this, mdl2dFrame_, _proj,loader); } catch (final IOException _evt) { FuLog.error(_evt); @@ -368,7 +400,7 @@ public void run() { try { - addInternalFrame(currentFrame_); + addInternalFrame(mdl2dFrame_); if (swingRun != null) swingRun.run(); // le projet a ete install\xE9: on enl\xE8ve les flag de modification @@ -395,6 +427,9 @@ }.run(); } + /** + * Action "Enregistrer" le projet. + */ public void save() { if (project_.getParamsFile() != null) { CtuluRunnable act = new CtuluRunnable(FudaaSaveLib.getActionSaveTitle(), this) { @@ -413,6 +448,9 @@ saveAs(); } + /** + * Action "Enregistrer sous" le projet. + */ public void saveAs() { final File f = chooseNewFile(true); if (f == null) return; @@ -452,7 +490,7 @@ // Probable pb de deadlock. // createTask.start(new Runnable() { // public void run() { - FudaaSaveLib.restoreAndLaunch(MdlImplementation.this, currentFrame_, createTask.getStateReceiver(), loader); + FudaaSaveLib.restoreAndLaunch(MdlImplementation.this, mdl2dFrame_, createTask.getStateReceiver(), loader); // } // }); @@ -532,11 +570,24 @@ } }; } + + /** + * Construit le menu projet. + * @return Le menu projet. + */ + protected BuMenu buildProjectMenu() { + BuMenu mn=new BuMenu(FudaaResource.FUDAA.getString("Projet"),"mnPROJECT"); + mn.add(new MdlShow2DFrameAction(this)); +// mnProject.add(new MdlShow1DFrameAction(this)); + + mn.setVisible(false); + return mn; + } /** * Methode surcharg\xE9e pour les panneau de pr\xE9f\xE9rence. */ - protected void buildPreferences(final List _frAddTab) { + protected void buildPreferences(final List<BuAbstractPreferencesPanel> _frAddTab) { _frAddTab.add(new BuUserPreferencesPanel(this)); _frAddTab.add(new BuLanguagePreferencesPanel(this)); _frAddTab.add(new BuDesktopPreferencesPanel(this)); @@ -648,6 +699,9 @@ super.initExportDataButton(itExportData); mnExport.add(itExportData); + BuMenu mnProject=buildProjectMenu(); + mb.addMenu(mnProject); + /* setEnabledForAction("RANGERICONES", true); if (!isSupervisor()) { final JComponent cp = getMainPanel().getMiddleComponent(); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjet.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjet.java 2008-11-28 17:01:34 UTC (rev 4252) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjet.java 2008-12-01 10:20:16 UTC (rev 4253) @@ -1,6 +1,6 @@ /* * @creation 7 juin 07 - * @modification $Date: 2008/02/01 14:39:36 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -27,7 +27,7 @@ /** * Une implementation de l'interface projet pour le modeleur. * @author Bertrand Marchand - * @version $Id: MdlProjet.java,v 1.1.2.1 2008/02/01 14:39:36 bmarchan Exp $ + * @version $Id$ */ public class MdlProjet implements FSigProjet, Observer { BuInformationsDocument doc_ = new BuInformationsDocument(); @@ -99,7 +99,7 @@ boolean isInstalled_; public void install(MdlImplementation _impl) { - _impl.currentFrame_.getArbreCalqueModel().getObservable().addObserver(this); + _impl.get2dFrame().getArbreCalqueModel().getObservable().addObserver(this); state_.addListener(new FudaaProjectStateFrameListener(_impl.getFrame(), this)); state_.addListener(_impl); state_.clearStates(); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjet.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow1DFrameAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow1DFrameAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow1DFrameAction.java 2008-12-01 10:20:16 UTC (rev 4253) @@ -0,0 +1,35 @@ +/* + * @creation 1 avr. 2005 + * @modification $Date$ + * @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.action; + +import java.awt.event.ActionEvent; + +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.fudaa.modeleur.MdlImplementation; + +/** + * Une action pour visualiser la fenetre 2D. + * @author Bertrand Marchand + * @version $Id$ + */ +public class MdlShow1DFrameAction extends EbliActionSimple { + MdlImplementation impl_; + + /** + * @param _m l'arbre des calques + */ + public MdlShow1DFrameAction(MdlImplementation _impl) { + super(EbliResource.EBLI.getString("Vue 1D"), null, "VUE1D"); + impl_=_impl; + } + + public void actionPerformed(final ActionEvent _e) { + impl_.warn("Pas impl\xE9ment\xE9","La fenetre 1D est a venir..."); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow1DFrameAction.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow2DFrameAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow2DFrameAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow2DFrameAction.java 2008-12-01 10:20:16 UTC (rev 4253) @@ -0,0 +1,35 @@ +/* + * @creation 1 avr. 2005 + * @modification $Date$ + * @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.action; + +import java.awt.event.ActionEvent; + +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.fudaa.modeleur.MdlImplementation; + +/** + * Une action pour visualiser la fenetre 2D. + * @author Bertrand Marchand + * @version $Id$ + */ +public class MdlShow2DFrameAction extends EbliActionSimple { + MdlImplementation impl_; + + /** + * @param _m l'arbre des calques + */ + public MdlShow2DFrameAction(MdlImplementation _impl) { + super(EbliResource.EBLI.getString("Vue 2D"), null, "VUE2D"); + impl_=_impl; + } + + public void actionPerformed(final ActionEvent _e) { + impl_.activateInternalFrame(impl_.get2dFrame()); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/MdlShow2DFrameAction.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL 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...> - 2008-12-01 11:02:33
|
Revision: 4254 http://fudaa.svn.sourceforge.net/fudaa/?rev=4254&view=rev Author: bmarchan Date: 2008-12-01 11:02:10 +0000 (Mon, 01 Dec 2008) Log Message: ----------- Mise en place du menu g?\195?\169om?\195?\169trie fenetre 2D. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneZoomOnSelectedAction.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/MdlSceneEditor.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/SceneProfilInterpolation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLinePersistence.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dMultiPointPersistence.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigImageImportAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerGroup.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/tr/data/TrVisuPanelEditor.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarDonneesBrutesLayerGroup.java Property Changed: ---------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneZoomOnSelectedAction.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/action/SceneProfilInterpolation.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLinePersistence.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dMultiPointPersistence.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigImageImportAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarDonneesBrutesLayerGroup.java 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 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquesPanel.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -408,7 +408,7 @@ /** * @return retourne le ZEditorDefault poss\xE9d\xE9. */ - public final ZEditorDefault getDefaultGisEditor() { + public ZEditorDefault getEditor() { return gisEditor_; } @@ -429,6 +429,12 @@ fillMenuWithToolsActions(contextTools_); } + /** + * Creation des menus sp\xE9cifiques. + * Les menus sp\xE9cifiques sont switch\xE9s d\xE9s que la fenetre passe de l'\xE9tat actif \xE0 inactif + * et inversement. Ils sont ajout\xE9s dans la barre de menus. + * @return Les menus sp\xE9cifiques. + */ protected BuMenu[] createSpecificMenus(final String _title) { final BuMenu[] res = new BuMenu[1]; res[0] = new BuMenu(_title, "LAYER"); @@ -622,8 +628,7 @@ /** * Retourne les menus sp\xE9cifiques pour la fenetre. - * Les menus sp\xE9cifiques sont switch\xE9s d\xE9s que la fenetre passe de l'\xE9tat actif \xE0 inactif - * et inversement. Ils sont ajout\xE9s dans la barre de menus. + * @see createSpecificMenus(String); * @return Les menus sp\xE9cifiques. */ public JMenu[] getSpecificMenus(final String _title) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneZoomOnSelectedAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneZoomOnSelectedAction.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneZoomOnSelectedAction.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -20,7 +20,7 @@ /** * Une action pour un zoom sur la s\xE9lection. Est active si des objets sont selectionn\xE9s. * @author Fred Deniger - * @version $Id: CalqueZoomOnSelectedAction.java,v 1.2.8.1 2008-02-27 17:16:12 bmarchan Exp $ + * @version $Id$ */ public class SceneZoomOnSelectedAction extends EbliActionSimple implements ZSelectionListener { @@ -40,7 +40,7 @@ * Effectue le zoom sur selection */ public void actionPerformed(final ActionEvent _arg) { - cqPn_.getDefaultGisEditor().getSceneEditor().zoomOnSelected(); + cqPn_.getEditor().getSceneEditor().zoomOnSelected(); } public void updateStateBeforeShow() { @@ -51,7 +51,7 @@ * Active le bouton de zoom sur selection. */ private void updateEnableState() { - setEnabled(!cqPn_.getDefaultGisEditor().getSceneEditor().getScene().isSelectionEmpty()); + setEnabled(!cqPn_.getEditor().getSceneEditor().getScene().isSelectionEmpty()); } public void selectionChanged(final ZSelectionEvent _evt) { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneZoomOnSelectedAction.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id 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 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -1,6 +1,6 @@ /* * @creation 20 janv. 08 - * @modification $Date: 2008/02/01 14:40:03 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -37,7 +37,7 @@ * * @author fred deniger * @author bertrand marchand - * @version $Id: MdlFille2d.java,v 1.1.2.1 2008/02/01 14:40:03 bmarchan Exp $ + * @version $Id$ */ public class MdlFille2d extends ZEbliFilleCalques implements BuUndoRedoInterface, CtuluExportDataInterface, CtuluImageImporter, CtuluUndoRedoInterface, FudaaSavable, BuCutCopyPasteInterface { @@ -76,7 +76,7 @@ } public void startExport(CtuluUI _impl) { - getMdlVisuPanel().getGisEditor().getExportAction().actionPerformed(null); + getMdlVisuPanel().getEditor().getExportAction().actionPerformed(null); } public void undo() { Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille2d.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id 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 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -233,7 +233,7 @@ else titre+=MdlResource.MDL.getString("sans nom"); // Instanciation de la popup - myDialogModal dialog =new myDialogModal(calquePanel_.getDefaultGisEditor().getFrame(), titre); + myDialogModal dialog =new myDialogModal(calquePanel_.getEditor().getFrame(), titre); dialog.setVisible(true); datadest[iatt]=dialog.getValue(); } 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 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -79,6 +79,19 @@ return editor; } + protected BuMenu[] createSpecificMenus(final String _title) { + BuMenu[] ret=new BuMenu[3]; + final BuMenu mnGeom = new BuMenu(FudaaResource.FUDAA.getString("G\xE9om\xE9trie"),"mnGEOM"); + EbliComponentFactory.INSTANCE.addActionsToMenu(gisEditor_.getSceneEditor().getActions(), mnGeom); + ret[1]=mnGeom; + + BuMenu[] mnsuper=super.createSpecificMenus(_title); + ret[0]=mnsuper[0]; + ret[2]=mnsuper[1]; + return ret; + } + + protected EbliActionInterface[] getActionsInterface(){ EbliActionInterface[] actions=super.getActionsInterface(); EbliActionInterface[] allActions=new EbliActionInterface[actions.length+1]; @@ -113,25 +126,25 @@ } protected void installLayerActions() { - EbliActionInterface actNewCloud=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque semis"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CLOUD,cqAlti_,getGisEditor()); - EbliActionInterface actNewLevel=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque courbes de niveaux"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_LEVEL,cqAlti_,getGisEditor()); - EbliActionInterface actNewProfile=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque profils"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_PROFILE,cqAlti_,getGisEditor()); + EbliActionInterface actNewCloud=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque semis"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CLOUD,cqAlti_,getEditor()); + EbliActionInterface actNewLevel=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque courbes de niveaux"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_LEVEL,cqAlti_,getEditor()); + EbliActionInterface actNewProfile=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque profils"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_PROFILE,cqAlti_,getEditor()); cqAlti_.setActions(new EbliActionInterface[] { actNewCloud, actNewLevel, actNewProfile }); - EbliActionInterface actNewZone=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque zones"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_ZONE,cqSing_,getGisEditor()); - EbliActionInterface actNewCnt=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque contours"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CONTOUR,cqSing_,getGisEditor()); - EbliActionInterface actNewConst=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque lignes de contraintes"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CONST_LINE,cqSing_,getGisEditor()); - EbliActionInterface actNewDir=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque lignes directions"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_DIR_LINE,cqSing_,getGisEditor()); + EbliActionInterface actNewZone=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque zones"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_ZONE,cqSing_,getEditor()); + EbliActionInterface actNewCnt=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque contours"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CONTOUR,cqSing_,getEditor()); + EbliActionInterface actNewConst=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque lignes de contraintes"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_CONST_LINE,cqSing_,getEditor()); + EbliActionInterface actNewDir=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque lignes directions"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER2D_DIR_LINE,cqSing_,getEditor()); cqSing_.setActions(new EbliActionInterface[] { actNewZone, actNewCnt, actNewConst, actNewDir}); - EbliActionInterface actNewTrace=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque trace de profils"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER1D_TRACE,cqMdl1d_,getGisEditor()); - EbliActionInterface actNewAxe=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque axes hydrauliques"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER1D_AXE,cqMdl1d_,getGisEditor()); + EbliActionInterface actNewTrace=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque trace de profils"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER1D_TRACE,cqMdl1d_,getEditor()); + EbliActionInterface actNewAxe=new CalqueNewCalqueAction(FudaaLib.getS("Nouveau calque axes hydrauliques"),FudaaResource.FUDAA.getIcon("ajouter"),MdlLayerFactory.LAYER1D_AXE,cqMdl1d_,getEditor()); cqMdl1d_.setActions(new EbliActionInterface[] { actNewTrace, actNewAxe}); EbliActionInterface actImport = new FSigImageImportAction(this, cqImg_); cqImg_.setActions(new EbliActionInterface[] { actImport }); - EbliActionInterface actDeleteLayer=new CalqueDeleteCalqueAction(getGisEditor(),this.getArbreCalqueModel()); + EbliActionInterface actDeleteLayer=new CalqueDeleteCalqueAction(getEditor(),this.getArbreCalqueModel()); this.getArbreCalqueModel().setActionDelete(actDeleteLayer); } @@ -159,15 +172,15 @@ if (!_build) return; - MdlLayer2dLevel cqLevel=new MdlLayer2dLevel(getGisEditor()); + MdlLayer2dLevel cqLevel=new MdlLayer2dLevel(getEditor()); cqLevel.setName(BGroupeCalque.findUniqueChildName(cqAlti_, cqLevel.getExtName())); cqAlti_.add(cqLevel); - MdlLayer2dCloud cqCloud=new MdlLayer2dCloud(getGisEditor()); + MdlLayer2dCloud cqCloud=new MdlLayer2dCloud(getEditor()); cqCloud.setName(BGroupeCalque.findUniqueChildName(cqAlti_, cqCloud.getExtName())); cqAlti_.add(cqCloud); - MdlLayer2dProfile cqProfile=new MdlLayer2dProfile(getGisEditor()); + MdlLayer2dProfile cqProfile=new MdlLayer2dProfile(getEditor()); cqProfile.setName(BGroupeCalque.findUniqueChildName(cqAlti_, cqProfile.getExtName())); cqAlti_.add(cqProfile); } @@ -185,19 +198,19 @@ if (!_build) return; - MdlLayer2dContour cqCnt=new MdlLayer2dContour(getGisEditor()); + MdlLayer2dContour cqCnt=new MdlLayer2dContour(getEditor()); cqCnt.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqCnt.getExtName())); cqSing_.add(cqCnt); - MdlLayer2dZone cqZone=new MdlLayer2dZone(getGisEditor()); + MdlLayer2dZone cqZone=new MdlLayer2dZone(getEditor()); cqZone.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqZone.getExtName())); cqSing_.add(cqZone); - MdlLayer2dConstraintLine cqConst=new MdlLayer2dConstraintLine(getGisEditor()); + MdlLayer2dConstraintLine cqConst=new MdlLayer2dConstraintLine(getEditor()); cqConst.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqConst.getExtName())); cqSing_.add(cqConst); - MdlLayer2dDirectionLine cqDirect=new MdlLayer2dDirectionLine(getGisEditor()); + MdlLayer2dDirectionLine cqDirect=new MdlLayer2dDirectionLine(getEditor()); cqDirect.setName(BGroupeCalque.findUniqueChildName(cqSing_, cqDirect.getExtName())); cqSing_.add(cqDirect); } @@ -215,11 +228,11 @@ if (!_build) return; - MdlLayer1dTrace cqTrace=new MdlLayer1dTrace(getGisEditor()); + MdlLayer1dTrace cqTrace=new MdlLayer1dTrace(getEditor()); cqTrace.setName(BGroupeCalque.findUniqueChildName(cqMdl1d_, cqTrace.getExtName())); cqMdl1d_.add(cqTrace); - MdlLayer1dAxe cqAxe=new MdlLayer1dAxe(getGisEditor()); + MdlLayer1dAxe cqAxe=new MdlLayer1dAxe(getEditor()); cqAxe.setName(BGroupeCalque.findUniqueChildName(cqMdl1d_, cqAxe.getExtName())); cqMdl1d_.add(cqAxe); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProfilInterpolation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProfilInterpolation.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProfilInterpolation.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -20,6 +20,7 @@ import org.fudaa.ebli.calque.ZScene.SceneSelectionHelper; import org.fudaa.ebli.commun.EbliActionSimple; import org.fudaa.fudaa.modeleur.MdlSceneEditor; +import org.fudaa.fudaa.ressource.FudaaResource; import com.memoire.bu.BuResource; @@ -31,7 +32,8 @@ MdlSceneEditor sceneEditor_; public SceneProfilInterpolation(MdlSceneEditor _sceneEditor) { - super(BuResource.BU.getString("Interpoler un profil"), null, "INTERPOLE_PROFIL"); + super(FudaaResource.FUDAA.getString("Cr\xE9er un profil depuis une trace"), null, "INTERPOLE_PROFIL"); + setDefaultToolTip(FudaaResource.FUDAA.getString("Cr\xE9e un profil par interpolation sur un nuage de points depuis une trace")); sceneEditor_=_sceneEditor; sceneEditor_.getScene().addSelectionListener(this); } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProfilInterpolation.java ___________________________________________________________________ Modified: svn:keywords - Id + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLinePersistence.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLinePersistence.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLinePersistence.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -1,6 +1,6 @@ /* * @creation 20 janv. 08 - * @modification $Date: 2008/05/13 12:10:56 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -39,7 +39,7 @@ protected BCalque findCalque(final BCalqueSaverInterface _cqName, final BCalqueSaverTargetInterface _pn, final BCalque _parent) { MdlVisuPanel pn=(MdlVisuPanel)_pn; - MdlLayer2dLine cq=createNewLayer(pn.getGisEditor()); + MdlLayer2dLine cq=createNewLayer(pn.getEditor()); cq.setName(BGroupeCalque.findUniqueChildName(_parent, cq.getExtName())); _parent.enDernier(cq); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dLinePersistence.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dMultiPointPersistence.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dMultiPointPersistence.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dMultiPointPersistence.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -1,6 +1,6 @@ /* * @creation 20 janv. 08 - * @modification $Date: 2008/05/13 12:10:58 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -45,7 +45,7 @@ protected BCalque findCalque(final BCalqueSaverInterface _cqName, final BCalqueSaverTargetInterface _pn, final BCalque _parent) { MdlVisuPanel pn=(MdlVisuPanel)_pn; - MdlLayer2dMultiPoint cq=createNewLayer(pn.getGisEditor()); + MdlLayer2dMultiPoint cq=createNewLayer(pn.getEditor()); cq.setName(BGroupeCalque.findUniqueChildName(_parent, cq.getExtName())); _parent.enDernier(cq); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/persistence/MdlLayer2dMultiPointPersistence.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigImageImportAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigImageImportAction.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigImageImportAction.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -1,6 +1,6 @@ /* * @creation 27 juil. 06 - * @modification $Date: 2008-01-17 11:38:59 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -36,7 +36,7 @@ /** * Une action "import d'image". * @author fred deniger - * @version $Id: FSigImageImportAction.java,v 1.1.6.1 2008-01-17 11:38:59 bmarchan Exp $ + * @version $Id$ */ public class FSigImageImportAction extends EbliActionSimple implements FSigImageWizardTask.CalqueFactory, ContainerListener { @@ -85,7 +85,7 @@ if (editAction_ == null) { editAction_ = new EditAction(); } - _res.setActions(new EbliActionInterface[] { visu_.getGisEditor().getEditAction()[0], editAction_ }); + _res.setActions(new EbliActionInterface[] { visu_.getEditor().getEditAction()[0], editAction_ }); } void afficheWizard(final FSigImageWizardTask _task) { @@ -150,7 +150,7 @@ public ZCalqueImageRaster createCalque(final ZModeleImageRaster _model) { // initImgLayer(res); final ZCalqueImageRaster res = new ZCalqueImageRaster(_model); - res.setEditor(visu_.getGisEditor()); + res.setEditor(visu_.getEditor()); return res; } Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigImageImportAction.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerGroup.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerGroup.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerGroup.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -139,7 +139,7 @@ actionAddPoint_ = _actPoint; actionModifyAtt_ = _modifyAttributes; setActions(new EbliActionInterface[] { actionAddPoly_, actionAddPoint_, null, actionModifyAtt_, null, - visu_.getGisEditor().getExportAction(), visu_.getGisEditor().getImportAction() }); + visu_.getEditor().getExportAction(), visu_.getEditor().getImportAction() }); } /** @@ -157,7 +157,7 @@ buildAddPoint(); buildAddPoly(); buildModifyAtt(); - setActions(new EbliActionInterface[] { actionAddGroup_, null, visu_.getGisEditor().getExportAction() }); + setActions(new EbliActionInterface[] { actionAddGroup_, null, visu_.getEditor().getExportAction() }); att_ = visu_.getAttributeMng(); attributes_ = _att; } @@ -192,7 +192,7 @@ } protected void updateEditor() { - visu_.getGisEditor().updatePalette(); + visu_.getEditor().updatePalette(); } @@ -249,14 +249,14 @@ private void finishActionCreation(final BCalque _parent, final CtuluCommandContainer _cmd, final ZCalqueAffichageDonnees _la, final boolean _addCancel) { final List action = new ArrayList(5); - action.addAll(Arrays.asList(visu_.getGisEditor().getEditAction())); - action.add(visu_.getGisEditor().getActionDelete()); + action.addAll(Arrays.asList(visu_.getEditor().getEditAction())); + action.add(visu_.getEditor().getActionDelete()); if (_addCancel) { - action.add(visu_.getGisEditor().getActionCancel()); + action.add(visu_.getEditor().getActionCancel()); } action.add(null); - action.add(visu_.getGisEditor().getExportAction()); - action.add(visu_.getGisEditor().getImportAction()); + action.add(visu_.getEditor().getExportAction()); + action.add(visu_.getEditor().getImportAction()); final EbliActionInterface[] act = new EbliActionInterface[action.size()]; action.toArray(act); _la.setActions(act); @@ -274,7 +274,7 @@ public ZCalqueLigneBrisee addLigneBriseeLayerAct(final String _title, final GISZoneCollectionLigneBrisee _zone, final CtuluCommandContainer _cmd) { final ZCalqueLigneBriseeEditable la = new FSigLayerLineEditable(new ZModeleLigneBriseeEditable(_zone), visu_ - .getGisEditor()); + .getEditor()); la.setName(BGroupeCalque.findUniqueChildName(this, "poly")); la.setTitle(_title); finishActionCreation(this, _cmd, la, true); @@ -287,7 +287,7 @@ public ZCalquePointEditable addPointLayerAct(final String _title, final GISZoneCollectionPoint _zone, final CtuluCommandContainer _cmd) { - final FSigLayerPointEditable la = new FSigLayerPointEditable(new ZModelePointEditable(_zone), visu_.getGisEditor()); + final FSigLayerPointEditable la = new FSigLayerPointEditable(new ZModelePointEditable(_zone), visu_.getEditor()); la.setName(BGroupeCalque.findUniqueChildName(this, "point")); la.setTitle(_title); finishActionCreation(this, _cmd, la, false); @@ -295,15 +295,15 @@ } public GISZoneCollectionLigneBrisee createLigneBriseeZone() { - return GISZoneAttributeFactory.createPolyligne(visu_.getGisEditor(), attributes_); + return GISZoneAttributeFactory.createPolyligne(visu_.getEditor(), attributes_); } public GISZoneCollectionPoint createPointZone() { - return GISZoneAttributeFactory.createPoint(visu_.getGisEditor(), attributes_); + return GISZoneAttributeFactory.createPoint(visu_.getEditor(), attributes_); } public FSigEditor getGisEditor() { - return visu_.getGisEditor(); + return visu_.getEditor(); } public final GISAttributeInterface[] getAttributes() { 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 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigVisuPanel.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -98,7 +98,7 @@ cqDep=new ZCalqueDeplacement(getCqSelectionI()); this.addCalqueInteraction(cqDep); cqDep.setGele(true); - cqDep.setTarget(getGisEditor()); + cqDep.setTarget(getEditor()); } return cqDep; } @@ -205,7 +205,7 @@ return getImpl().getFrame(); } - public final FSigEditor getGisEditor() { + public FSigEditor getEditor() { return (FSigEditor) gisEditor_; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrVisuPanelEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrVisuPanelEditor.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/data/TrVisuPanelEditor.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -361,7 +361,7 @@ protected void buildGroupSiLayers(final H2dSiSourceInterface _si) { final BGroupeCalque grSi = buildGroupSI(); final TrSiProfilModel poly = new TrSiProfilModel(getGrid(), getCmdMng()); - final ZCalqueLigneBriseeEditable si = new TrSiProfilLayer(poly, getCqLegend(), getGisEditor()); + final ZCalqueLigneBriseeEditable si = new TrSiProfilLayer(poly, getCqLegend(), getEditor()); grSi.add(si); final TrSiFlecheLayer fl = new TrSiFlecheLayer(_si); fl.setVisible(false); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarDonneesBrutesLayerGroup.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarDonneesBrutesLayerGroup.java 2008-12-01 10:20:16 UTC (rev 4253) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarDonneesBrutesLayerGroup.java 2008-12-01 11:02:10 UTC (rev 4254) @@ -1,6 +1,6 @@ /* * @creation 4 oct. 2004 - * @modification $Date: 2007-05-04 14:01:53 $ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... @@ -55,17 +55,17 @@ /** * @author Fred Deniger - * @version $Id: TrRubarDonneesBrutesLayerGroup.java,v 1.33 2007-05-04 14:01:53 deniger Exp $ + * @version $Id$ */ public final class TrRubarDonneesBrutesLayerGroup extends BGroupeCalque implements H2dRubarDonneesBrutesListener { protected EbliActionInterface[] getNuageActions(final TrRubarDonneesBrutesNuageLayer _layer) { final ArrayList acts = new ArrayList(); acts.add(new EditVarAction(panel_, _layer, _layer.getBr())); - acts.add(panel_.getGisEditor().getActionDelete()); + acts.add(panel_.getEditor().getActionDelete()); acts.add(null); - acts.add(panel_.getGisEditor().getExportAction()); - acts.add(panel_.getGisEditor().getImportAction()); + acts.add(panel_.getEditor().getExportAction()); + acts.add(panel_.getEditor().getImportAction()); if (_layer.getBr().getID() == H2dRubarDonneesBrutesMng.INI_ID) { acts.add(null); acts.add(new ActiveCoteDeau(_layer, true, mng_, panel_.getCmdMng())); @@ -167,7 +167,7 @@ /** * @author Fred Deniger - * @version $Id: TrRubarDonneesBrutesLayerGroup.java,v 1.33 2007-05-04 14:01:53 deniger Exp $ + * @version $Id$ */ private static class EditVarAllGrilleAction extends EditVarAction { @@ -208,7 +208,7 @@ /** * @author Fred Deniger - * @version $Id: TrRubarDonneesBrutesLayerGroup.java,v 1.33 2007-05-04 14:01:53 deniger Exp $ + * @version $Id$ */ private static class EditVarAction extends EbliActionSimple { @@ -537,7 +537,7 @@ _grLayer.add(c); _panel.addCalqueActions(c, _grLayer.getCalqueAction(_id)); // nuage - final TrRubarDonneesBrutesNuageLayer cn = new TrRubarDonneesBrutesNuageLayer(_mng, _id, _panel.getGisEditor()); + final TrRubarDonneesBrutesNuageLayer cn = new TrRubarDonneesBrutesNuageLayer(_mng, _id, _panel.getEditor()); cn.setTitle(title + " XY"); _grLayer.add(cn); _panel.addCalqueActions(cn, _grLayer.getNuageActions(cn)); Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarDonneesBrutesLayerGroup.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author URL Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-01 14:49:42
|
Revision: 4256 http://fudaa.svn.sourceforge.net/fudaa/?rev=4256&view=rev Author: emmanuel_martin Date: 2008-12-01 14:49:27 +0000 (Mon, 01 Dec 2008) Log Message: ----------- Tache #108 : "Palette de visibilit?\195?\169 visible: Ouverture d'un projet contenant une image impossible" Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculator.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 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 2008-12-01 14:06:00 UTC (rev 4255) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/profile/ProfileCalculator.java 2008-12-01 14:49:27 UTC (rev 4256) @@ -6,17 +6,10 @@ */ package org.fudaa.ctulu.interpolation.profile ; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibGeometrie; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISPoint; -import org.fudaa.ctulu.gis.GISPolyligne; import com.memoire.fu.FuLog; import com.vividsolutions.jts.geom.Coordinate; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-12-01 14:06:00 UTC (rev 4255) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-12-01 14:49:27 UTC (rev 4256) @@ -153,8 +153,8 @@ btCont.add(btDown_); add(btCont, BuBorderLayout.SOUTH); // Ajout des informations \\ + calque_.addActionListener(this); fillCalqueComboBox(); - calque_.addActionListener(this); cb.addChangeListener(this); fillTableGeometry(); updateBtMovement(); @@ -328,6 +328,7 @@ * choisis ainsi que l'entr\xE9e sp\xE9ciale 'tout les calques'. */ protected void fillCalqueComboBox(){ + calque_.removeActionListener(this); // Changement du contenu de la comboBox Object selectedItem=calque_.getSelectedItem(); calque_.removeAllItems(); @@ -341,6 +342,7 @@ calque_.setSelectedItem(selectedItem); else calque_.setSelectedIndex(0); + calque_.addActionListener(this); updateListen(); } @@ -350,7 +352,8 @@ protected void updateListen(){ // Suppression de l'\xE9coute de tout les models for(int i=0;i<listenModels_.length;i++) - listenModels_[i].removeModelListener(this); + if(listenModels_[i]!=null) + listenModels_[i].removeModelListener(this); // Mise a jour du tableau de listeners if(calque_.getSelectedItem()==allCalquesEntry_){ listenModels_=new ZModeleEditable[calques_.length]; @@ -369,7 +372,8 @@ } // Ajout de l'\xE9coute de tout les calques for(int i=0;i<listenModels_.length;i++){ - listenModels_[i].addModelListener(this); + if(listenModels_[i]!=null) + listenModels_[i].addModelListener(this); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-02 09:24:51
|
Revision: 4258 http://fudaa.svn.sourceforge.net/fudaa/?rev=4258&view=rev Author: emmanuel_martin Date: 2008-12-02 09:24:47 +0000 (Tue, 02 Dec 2008) Log Message: ----------- Tache #111 : "G?\195?\169rer correctement quand un fond de carte est manquant." 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/ZCalqueImageRaster.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalquePoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.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/MdlSceneEditor.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneMoveInLayerAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.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 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueAffichageDonnees.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -58,7 +58,10 @@ */ public void initSelection() { if (selection_ == null) { - selection_ = new CtuluListSelection(modeleDonnees().getNombre() / 2 + 1); + if(modeleDonnees()!=null) + selection_ = new CtuluListSelection(modeleDonnees().getNombre() / 2 + 1); + else + selection_ = new CtuluListSelection(0); // selection_.addListeSelectionListener(this); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -9,6 +9,7 @@ package org.fudaa.ebli.calque; import java.awt.AlphaComposite; +import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; @@ -156,20 +157,26 @@ * @param _y lieu cible de l'icone (y) */ public void paintIcon(final Component _c, final Graphics _g, final int _x, final int _y) { - // boolean attenue = isAttenue(); - if (getModelImage() == null) { - return; + final int w=getIconWidth()-1; + final int h=getIconHeight()-1; + if (getModelImage()==null) { + // Dessine une croix rouge indiquant une erreur. + Color c=_g.getColor(); + _g.setColor(Color.red); + _g.drawLine(0, 0, w, h); + _g.drawLine(0, h, w, 0); + _g.setColor(c); } - final int w = getIconWidth() - 1; - final int h = getIconHeight() - 1; - final Image im = getModelImage().getImage(); - if (im != null) { - final int wi = im.getWidth(this); - final int hi = im.getHeight(this); - final int r = Math.max(wi / w, hi / h); - final int wImage = wi / r - 1; - final int hImage = hi / r - 1; - _g.drawImage(im, (w - wImage) / 2 + 1, (h - hImage) / 2 + 1, wImage, hImage, _c); + else { + final Image im=getModelImage().getImage(); + if (im!=null) { + final int wi=im.getWidth(this); + final int hi=im.getHeight(this); + final int r=Math.max(wi/w, hi/h); + final int wImage=wi/r-1; + final int hImage=hi/r-1; + _g.drawImage(im, (w-wImage)/2+1, (h-hImage)/2+1, wImage, hImage, _c); + } } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalquePoint.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalquePoint.java 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalquePoint.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -350,7 +350,7 @@ } public CtuluListSelection selectionBasic(final LinearRing _poly, final int _mode) { - if (modele_.getNombre() == 0 || !isVisible()) { + if (modele_==null||modele_.getNombre() == 0 || !isVisible()) { return null; } final Envelope polyEnv = _poly.getEnvelopeInternal(); @@ -402,7 +402,7 @@ } protected CtuluListSelection selectionBasic(final GrPoint _pt, final int _tolerance) { - if (modele().getNombre() == 0 || (!isVisible())) { + if (modele()==null||modele().getNombre() == 0 || (!isVisible())) { return null; } final int i = getSelectedPoint(modele_, _pt, _tolerance, getVersReel(), getClipReel(getGraphics())); 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 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZScene.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -189,7 +189,8 @@ System.arraycopy(isels, 0, iglobsels, ipt, isels.length); ipt+=isels.length; } - idecal+=cqs[i].modeleDonnees().getNombre(); + if(cqs[i].modeleDonnees()!=null) + idecal+=cqs[i].modeleDonnees().getNombre(); } } // for (int i=0; i<lists_.length-1; i++) { @@ -543,7 +544,9 @@ */ public int getNombre() { int nb=0; - for (ZCalqueAffichageDonneesInterface cq : getTargetLayers()) nb+=cq.modeleDonnees().getNombre(); + for (ZCalqueAffichageDonneesInterface cq : getTargetLayers()) + if(cq.modeleDonnees()!=null) + nb+=cq.modeleDonnees().getNombre(); return nb; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEditVisibility.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -394,15 +394,19 @@ for(int i=0;i<calques_.length;i++){ if(calques_[i].getTitle().equals(calque_.getSelectedItem())||calque_.getSelectedItem()==allCalquesEntry_){ ZModeleEditable model = calques_[i].getModelEditable(); - // Extraction des donn\xE9es utiles - GISZoneCollection zone=model.getGeomData(); - int indexTitre=zone.getIndiceOf(GISAttributeConstants.TITRE); - int indexVisibility=zone.getIndiceOf(GISAttributeConstants.VISIBILITE); - if(indexTitre!=-1&&indexVisibility!=-1) - for(int j=0;j<zone.getNbGeometries();j++) - if(!onlyInvisible_||zone.getValue(indexVisibility, j)==GISAttributeConstants.ATT_VAL_FALSE) - if(j<zone.getModel(indexVisibility).getSize()&&j<zone.getModel(indexTitre).getSize()) - rows.add(new Object[]{zone.getValue(indexTitre, j), zone.getValue(indexVisibility, j).equals(GISAttributeConstants.ATT_VAL_TRUE)?true:false, model, scene_.layerId2SceneId(calques_[i], j)}); + if (model!=null) { + // Extraction des donn\xE9es utiles + GISZoneCollection zone=model.getGeomData(); + int indexTitre=zone.getIndiceOf(GISAttributeConstants.TITRE); + int indexVisibility=zone.getIndiceOf(GISAttributeConstants.VISIBILITE); + if (indexTitre!=-1&&indexVisibility!=-1) + for (int j=0; j<zone.getNbGeometries(); j++) + if (!onlyInvisible_||zone.getValue(indexVisibility, j)==GISAttributeConstants.ATT_VAL_FALSE) + if (j<zone.getModel(indexVisibility).getSize()&&j<zone.getModel(indexTitre).getSize()) + rows.add(new Object[]{zone.getValue(indexTitre, j), + zone.getValue(indexVisibility, j).equals(GISAttributeConstants.ATT_VAL_TRUE) ? true:false, model, + scene_.layerId2SceneId(calques_[i], j)}); + } } } table_.setModel(new GeomTableModel(new String[]{EbliLib.getS("Nom"), EbliLib.getS("Visibilit\xE9")}, rows.toArray(new Object[0][]))); @@ -567,7 +571,8 @@ public void doHide(){ // Suppression de l'\xE9coute de tout les calques for(int i=0;i<listenModels_.length;i++) - listenModels_[i].removeModelListener(this); + if(listenModels_[i]!=null) + listenModels_[i].removeModelListener(this); // Mise a jour du tableau de listeners listenModels_=new ZModeleEditable[0]; } 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 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -70,7 +70,7 @@ acts.add(new SceneSplitAction(sceneEditor_)); acts.add(new SceneInterpolationAction((MdlSceneEditor)sceneEditor_)); - acts.add(new SceneMoveInLayerAction((MdlSceneEditor)sceneEditor_)); + acts.add(new SceneMoveInLayerAction((MdlSceneEditor)sceneEditor_, getPanel().getArbreCalqueModel())); acts.add(new SceneDecimationAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneRefinementAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneInvertAction((MdlSceneEditor)sceneEditor_)); 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 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -138,8 +138,12 @@ */ public void moveInLayerSelectedGeometries() { ZModeleGeometry mdldest=(ZModeleGeometry)((ZCalqueAffichageDonneesInterface)getScene().getCalqueActif()).modeleDonnees(); + if(mdldest==null) + return; GISZoneCollection coldest=mdldest.getGeomData(); - + if(coldest==null) + return; + int[] idxGeom=getScene().getLayerSelection().getSelectedIndex(); Geometry[] geoms=new Geometry[idxGeom.length]; for (int i=0; i<idxGeom.length; i++) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneMoveInLayerAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneMoveInLayerAction.java 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneMoveInLayerAction.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -9,48 +9,36 @@ import java.awt.event.ActionEvent; -import javax.swing.tree.TreeSelectionModel; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; -import org.fudaa.ctulu.gis.GISPolyligne; -import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.ebli.calque.BArbreCalqueModel; import org.fudaa.ebli.calque.ZScene; import org.fudaa.ebli.calque.ZSelectionEvent; import org.fudaa.ebli.calque.ZSelectionListener; -import org.fudaa.ebli.calque.edition.BPaletteEdition; -import org.fudaa.ebli.calque.edition.ZCalqueEditable; -import org.fudaa.ebli.calque.edition.ZCalqueLigneBriseeEditable; -import org.fudaa.ebli.calque.edition.ZCalqueMultiPointEditable; -import org.fudaa.ebli.calque.edition.ZEditorInterface; -import org.fudaa.ebli.calque.edition.BPaletteRotation; -import org.fudaa.ebli.calque.edition.ZSceneEditor; -import org.fudaa.ebli.commun.BPalettePanelInterface; -import org.fudaa.ebli.commun.EbliActionPaletteTreeModel; import org.fudaa.ebli.commun.EbliActionSimple; -import org.fudaa.ebli.commun.EbliFormatterInterface; import org.fudaa.ebli.ressource.EbliResource; import org.fudaa.fudaa.modeleur.MdlSceneEditor; import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine; import org.fudaa.fudaa.modeleur.layer.MdlLayer2dMultiPoint; -import com.memoire.fu.Fu; -import com.memoire.fu.FuLog; - /** * Une action pour d\xE9placer un objet dans un autre calque, reagissant au changement de calque selectionn\xE9. * @author Fred Deniger * @version $Id: SceneMoveInLayerAction.java,v 1.1.2.1 2008-05-13 12:10:53 bmarchan Exp $ */ -public class SceneMoveInLayerAction extends EbliActionSimple implements ZSelectionListener { +public class SceneMoveInLayerAction extends EbliActionSimple implements ZSelectionListener, TreeSelectionListener { MdlSceneEditor sceneEditor_; /** * @param _m l'arbre des calques */ - public SceneMoveInLayerAction(MdlSceneEditor _sceneEditor) { + public SceneMoveInLayerAction(MdlSceneEditor _sceneEditor, BArbreCalqueModel _tree) { super(EbliResource.EBLI.getString("D\xE9placer dans le calque cible"), null/*EbliResource.EBLI.getToolIcon("draw-rotation")*/, "MOVE_IN_LAYER"); setSceneEditor(_sceneEditor); sceneEditor_.getScene().addSelectionListener(this); + _tree.addTreeSelectionListener(this); } public void actionPerformed(final ActionEvent _e) { @@ -89,4 +77,11 @@ public void selectionChanged(ZSelectionEvent _evt) { updateForSelectionChanged(); } + + /* (non-Javadoc) + * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent) + */ + public void valueChanged(TreeSelectionEvent e) { + updateForSelectionChanged(); + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java 2008-12-01 16:09:55 UTC (rev 4257) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java 2008-12-02 09:24:47 UTC (rev 4258) @@ -82,7 +82,7 @@ } public int getStepCount() { - return calqueToModify_ == null ? 2 : 1; + return calqueToModify_ == null || force2Step_ ? 2 : 1; } public void cancelTask() { @@ -94,6 +94,11 @@ BGroupeCalque dest_; ZCalqueImageRaster calqueToModify_; + /** + * boolean permettant de forcer des \xE9tapes au wizard. Utile lors de la + * modification de d'un calque image existant sans image. + */ + private boolean force2Step_=false; public void doTask() { if (calage_ == null) { @@ -115,7 +120,12 @@ } else { calqueToModify_.setTitle(img_.getCalqueTitle()); model = calqueToModify_.getModelImage(); - model.setImage(img_.getImg()); + if(model!=null) + model.setImage(img_.getImg()); + else { + calqueToModify_.setModele(new ZModeleStatiqueImageRaster(img_.getImg())); + model = calqueToModify_.getModelImage(); + } } model.setProj(res.ptImg_, res.ptReel_, res.transform_, res.error_); if (calqueToModify_ != null) { @@ -190,11 +200,17 @@ } public void setModelToModiy(final ZCalqueImageRaster _modelToModiy) { - calqueToModify_ = _modelToModiy; - final RasterDataInterface data = _modelToModiy.getModelImage().getData(); - img_.setData(data, _modelToModiy.getTitle()); - nextStep(); - + if (_modelToModiy!=null) { + calqueToModify_=_modelToModiy; + if (_modelToModiy.getModelImage()!=null) { + force2Step_=false; + final RasterDataInterface data=_modelToModiy.getModelImage().getData(); + img_.setData(data, _modelToModiy.getTitle()); + nextStep(); + } + else + force2Step_=true; + } } public CalqueFactory getFact() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-02 11:12:35
|
Revision: 4259 http://fudaa.svn.sourceforge.net/fudaa/?rev=4259&view=rev Author: emmanuel_martin Date: 2008-12-02 11:12:31 +0000 (Tue, 02 Dec 2008) Log Message: ----------- Modification de la gestion des erreurs lorque des chemins d'image sont invalides ?\195?\160 propos des calques d'images. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java 2008-12-02 09:24:47 UTC (rev 4258) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java 2008-12-02 11:12:31 UTC (rev 4259) @@ -76,6 +76,11 @@ if (imgFile != null && !imgFile.exists()) { imgFile = new File(dir_, imgFile.getName()); } + // On renseigne malgr\xE9 tout l'entr\xE9e file pour pouvoir afficher le chemin de + // l'image \xE0 l'utilisateur pour qu'il puisse le changer. + if (imgFile != null && !imgFile.exists()) { + _target.getUI().put(getImageFile(), _helper.getTrimTextFor("file")); + } if (imgFile == null || !imgFile.exists()) { FuLog.warning("ECQ: no file"); return; @@ -121,9 +126,19 @@ } } } + + protected void writeBodyData(final CtuluXmlWriter _out, final BCalque _cqToSave) throws IOException { + final ZModeleImageRaster img=((ZCalqueImageRaster)_cqToSave).getModelImage(); + File f; + boolean hasPoints=true; + if ((img==null||img.getData()==null)&&((ZCalqueImageRaster)_cqToSave).getImagePath()!=null) { + f=new File(((ZCalqueImageRaster)_cqToSave).getImagePath()); + hasPoints=false; + } + else + f=img.getData().getImgFile(); - protected void writeBodyData(final CtuluXmlWriter _out, final BCalque _cqToSave) throws IOException { - final ZModeleImageRaster img = ((ZCalqueImageRaster) _cqToSave).getModelImage(); + /* if (img == null) { FuLog.error("ECQ: no image"); return; @@ -133,6 +148,8 @@ return; } final File f = img.getData().getImgFile(); + */ + _out.write("<!--Le fichier contenant l'image: chemin absolu-->\n"); _out.write("<!--The absolute path of the image file-->\n"); _out.write("<file>\n"); @@ -143,25 +160,26 @@ _out.write("<relative-path>\n"); _out.write(CtuluLibFile.getRelativeFile(f, dir_, 100)); _out.write("</relative-path>\n"); + if (hasPoints) { + _out.write("<points>\n"); + _out.write("<!--image_x image_y_from_top real_x real_y-->"); + _out.write("<!--pass points-->"); - _out.write("<points>\n"); - _out.write("<!--image_x image_y_from_top real_x real_y-->"); - _out.write("<!--pass points-->"); + final int nb=img.getData().getNbPt(); + for (int i=0; i<nb; i++) { + _out.write("<point>\n"); + _out.write(Integer.toString(img.getXImgCalage(i))); + _out.write(CtuluLibString.ESPACE); + _out.write(Integer.toString(img.getYImgCalageFromTop(i))); + _out.write(CtuluLibString.ESPACE); + _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getX(i))); + _out.write(CtuluLibString.ESPACE); + _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getY(i))); + _out.write("</point>\n"); + } - final int nb = img.getData().getNbPt(); - for (int i = 0; i < nb; i++) { - _out.write("<point>\n"); - _out.write(Integer.toString(img.getXImgCalage(i))); - _out.write(CtuluLibString.ESPACE); - _out.write(Integer.toString(img.getYImgCalageFromTop(i))); - _out.write(CtuluLibString.ESPACE); - _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getX(i))); - _out.write(CtuluLibString.ESPACE); - _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getY(i))); - _out.write("</point>\n"); + _out.write("</points>"); } - - _out.write("</points>"); } public BCalqueSaverInterface save(final BCalque _cq, final ProgressionInterface _prog) { @@ -208,10 +226,13 @@ // final BufferedImage img = (BufferedImage) _saver.getUI().get(getImageId()); final Point2D.Double[] ptImg = (Point2D.Double[]) _saver.getUI().get(getPointImageId()); final Point2D.Double[] ptReal = (Point2D.Double[]) _saver.getUI().get(getPointRealId()); + String tmp=getImageFile(); + final String file = _saver.getUI().getString(getImageFile()); if (ptImg == null || ptReal == null || ptReal.length != ptImg.length || ptReal.length < 3) { + if(file!=null) + cq.setImagePath(file); return null; } - final String file = _saver.getUI().getString(getImageFile()); if (file != null) { final File f = new File(file); if (!f.exists()) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java 2008-12-02 09:24:47 UTC (rev 4258) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java 2008-12-02 11:12:31 UTC (rev 4259) @@ -38,6 +38,8 @@ public class ZCalqueImageRaster extends ZCalquePointEditable { BufferedImage imgAlpha_; + /** L'adresse de l'image. N'a de sens (et d'utilit\xE9) que si le model est null (l'image est inacc\xE9sible). */ + protected String imagePath_; public ZCalqueImageRaster() { this(null); @@ -47,6 +49,19 @@ return new BCalqueImagePersistence(); } + /** Retourne l'adresse de l'image. Non null uniquement si le model est null. */ + public String getImagePath(){ + if(modele_==null) + return imagePath_; + else + return null; + } + + /** Enregistre l'adresse de l'image (au cas o\xF9 le model est null). */ + public void setImagePath(String _path) { + imagePath_=_path; + } + public void setAlpha(final int _alpha) { if (alpha_ != _alpha) { imgAlpha_ = null; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java 2008-12-02 09:24:47 UTC (rev 4258) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java 2008-12-02 11:12:31 UTC (rev 4259) @@ -63,7 +63,16 @@ final BuLabel lbName_; final CtuluFileChooserPanel txtFile_; final BuTextField txtName_; - + /** + * Permet d'indiquer seulement quelques informations : l'adresse de l'image + * (pas n\xE9c\xE9ssairement valide) et le nom du calque. + */ + public void setDataPartial(String _path, String _name){ + txtFile_.getTf().setText(_path); + txtName_.setText(_name); + } + + public final void setData(final RasterDataInterface _data, final String _calqueName) { isUpdatingFromModel_ = true; if (_data.getImgFile() != null) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java 2008-12-02 09:24:47 UTC (rev 4258) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java 2008-12-02 11:12:31 UTC (rev 4259) @@ -82,7 +82,7 @@ } public int getStepCount() { - return calqueToModify_ == null || force2Step_ ? 2 : 1; + return 2; } public void cancelTask() { @@ -94,11 +94,6 @@ BGroupeCalque dest_; ZCalqueImageRaster calqueToModify_; - /** - * boolean permettant de forcer des \xE9tapes au wizard. Utile lors de la - * modification de d'un calque image existant sans image. - */ - private boolean force2Step_=false; public void doTask() { if (calage_ == null) { @@ -203,13 +198,12 @@ if (_modelToModiy!=null) { calqueToModify_=_modelToModiy; if (_modelToModiy.getModelImage()!=null) { - force2Step_=false; final RasterDataInterface data=_modelToModiy.getModelImage().getData(); img_.setData(data, _modelToModiy.getTitle()); nextStep(); } else - force2Step_=true; + img_.setDataPartial(_modelToModiy.getImagePath(), _modelToModiy.getTitle()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-02 15:14:59
|
Revision: 4260 http://fudaa.svn.sourceforge.net/fudaa/?rev=4260&view=rev Author: emmanuel_martin Date: 2008-12-02 15:14:53 +0000 (Tue, 02 Dec 2008) Log Message: ----------- calque image : conservation des points m?\195?\170me quand l'image n'est plus accessible. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java 2008-12-02 11:12:31 UTC (rev 4259) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalqueImagePersistence.java 2008-12-02 15:14:53 UTC (rev 4260) @@ -81,12 +81,17 @@ if (imgFile != null && !imgFile.exists()) { _target.getUI().put(getImageFile(), _helper.getTrimTextFor("file")); } - if (imgFile == null || !imgFile.exists()) { + else { + _target.getUI().put(getImageFile(), imgFile.getAbsolutePath()); + } + + /*if (imgFile == null || !imgFile.exists()) { FuLog.warning("ECQ: no file"); return; } _target.getUI().put(getImageFile(), imgFile.getAbsolutePath()); - +*/ + final NodeList list = _helper.getDoc().getElementsByTagName("point"); if (list != null && list.getLength() > 0) { @@ -129,16 +134,6 @@ protected void writeBodyData(final CtuluXmlWriter _out, final BCalque _cqToSave) throws IOException { final ZModeleImageRaster img=((ZCalqueImageRaster)_cqToSave).getModelImage(); - File f; - boolean hasPoints=true; - if ((img==null||img.getData()==null)&&((ZCalqueImageRaster)_cqToSave).getImagePath()!=null) { - f=new File(((ZCalqueImageRaster)_cqToSave).getImagePath()); - hasPoints=false; - } - else - f=img.getData().getImgFile(); - - /* if (img == null) { FuLog.error("ECQ: no image"); return; @@ -148,7 +143,6 @@ return; } final File f = img.getData().getImgFile(); - */ _out.write("<!--Le fichier contenant l'image: chemin absolu-->\n"); _out.write("<!--The absolute path of the image file-->\n"); @@ -160,26 +154,24 @@ _out.write("<relative-path>\n"); _out.write(CtuluLibFile.getRelativeFile(f, dir_, 100)); _out.write("</relative-path>\n"); - if (hasPoints) { - _out.write("<points>\n"); - _out.write("<!--image_x image_y_from_top real_x real_y-->"); - _out.write("<!--pass points-->"); + _out.write("<points>\n"); + _out.write("<!--image_x image_y_from_top real_x real_y-->"); + _out.write("<!--pass points-->"); - final int nb=img.getData().getNbPt(); - for (int i=0; i<nb; i++) { - _out.write("<point>\n"); - _out.write(Integer.toString(img.getXImgCalage(i))); - _out.write(CtuluLibString.ESPACE); - _out.write(Integer.toString(img.getYImgCalageFromTop(i))); - _out.write(CtuluLibString.ESPACE); - _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getX(i))); - _out.write(CtuluLibString.ESPACE); - _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getY(i))); - _out.write("</point>\n"); - } - - _out.write("</points>"); + final int nb=img.getData().getNbPt(); + for (int i=0; i<nb; i++) { + _out.write("<point>\n"); + _out.write(Integer.toString(img.getXImgCalage(i))); + _out.write(CtuluLibString.ESPACE); + _out.write(Integer.toString(img.getYImgCalageFromTop(i))); + _out.write(CtuluLibString.ESPACE); + _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getX(i))); + _out.write(CtuluLibString.ESPACE); + _out.write(CtuluLib.DEFAULT_NUMBER_FORMAT.format(img.getY(i))); + _out.write("</point>\n"); } + + _out.write("</points>"); } public BCalqueSaverInterface save(final BCalque _cq, final ProgressionInterface _prog) { @@ -228,23 +220,17 @@ final Point2D.Double[] ptReal = (Point2D.Double[]) _saver.getUI().get(getPointRealId()); String tmp=getImageFile(); final String file = _saver.getUI().getString(getImageFile()); - if (ptImg == null || ptReal == null || ptReal.length != ptImg.length || ptReal.length < 3) { - if(file!=null) - cq.setImagePath(file); + if (ptImg == null || ptReal == null || ptReal.length != ptImg.length || ptReal.length < 3) return null; - } + if (file != null) { final File f = new File(file); - if (!f.exists()) { - return null; - } final ZModeleImageRaster model = new ZModeleStatiqueImageRaster(new CtuluImageContainer(f)); model.setProj(ptImg, ptReal); cq.setModele(model); return res; } return null; - } File dir_; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java 2008-12-02 11:12:31 UTC (rev 4259) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueImageRaster.java 2008-12-02 15:14:53 UTC (rev 4260) @@ -38,8 +38,6 @@ public class ZCalqueImageRaster extends ZCalquePointEditable { BufferedImage imgAlpha_; - /** L'adresse de l'image. N'a de sens (et d'utilit\xE9) que si le model est null (l'image est inacc\xE9sible). */ - protected String imagePath_; public ZCalqueImageRaster() { this(null); @@ -48,20 +46,7 @@ public BCalquePersistenceInterface getPersistenceMng() { return new BCalqueImagePersistence(); } - - /** Retourne l'adresse de l'image. Non null uniquement si le model est null. */ - public String getImagePath(){ - if(modele_==null) - return imagePath_; - else - return null; - } - /** Enregistre l'adresse de l'image (au cas o\xF9 le model est null). */ - public void setImagePath(String _path) { - imagePath_=_path; - } - public void setAlpha(final int _alpha) { if (alpha_ != _alpha) { imgAlpha_ = null; @@ -174,7 +159,7 @@ public void paintIcon(final Component _c, final Graphics _g, final int _x, final int _y) { final int w=getIconWidth()-1; final int h=getIconHeight()-1; - if (getModelImage()==null) { + if (modele_ == null || !getModelImage().isImageLoaded()) { // Dessine une croix rouge indiquant une erreur. Color c=_g.getColor(); _g.setColor(Color.red); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java 2008-12-02 11:12:31 UTC (rev 4259) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepImage.java 2008-12-02 15:14:53 UTC (rev 4260) @@ -63,14 +63,6 @@ final BuLabel lbName_; final CtuluFileChooserPanel txtFile_; final BuTextField txtName_; - /** - * Permet d'indiquer seulement quelques informations : l'adresse de l'image - * (pas n\xE9c\xE9ssairement valide) et le nom du calque. - */ - public void setDataPartial(String _path, String _name){ - txtFile_.getTf().setText(_path); - txtName_.setText(_name); - } public final void setData(final RasterDataInterface _data, final String _calqueName) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java 2008-12-02 11:12:31 UTC (rev 4259) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardTask.java 2008-12-02 15:14:53 UTC (rev 4260) @@ -200,10 +200,9 @@ if (_modelToModiy.getModelImage()!=null) { final RasterDataInterface data=_modelToModiy.getModelImage().getData(); img_.setData(data, _modelToModiy.getTitle()); - nextStep(); + if(_modelToModiy.getModelImage().isImageLoaded()) + nextStep(); } - else - img_.setDataPartial(_modelToModiy.getImagePath(), _modelToModiy.getTitle()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-03 11:51:04
|
Revision: 4261 http://fudaa.svn.sourceforge.net/fudaa/?rev=4261&view=rev Author: emmanuel_martin Date: 2008-12-03 11:49:10 +0000 (Wed, 03 Dec 2008) Log Message: ----------- Tache #118 : "Rendre rectiligne une polyligne" Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrSegment.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/MdlSceneEditor.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneLinearisePolyligne.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrSegment.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrSegment.java 2008-12-02 15:14:53 UTC (rev 4260) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/geometrie/GrSegment.java 2008-12-03 11:49:10 UTC (rev 4261) @@ -11,6 +11,8 @@ import org.fudaa.ctulu.CtuluLibGeometrie; +import com.vividsolutions.jts.geom.Coordinate; + /** * Un segment 3D. * @@ -134,17 +136,16 @@ /** * Retourne le point appartenant au segment le plus proche du point donne. */ - public GrPoint pointPlusProche(final GrPoint _p) { - final double d = _p.soustraction(o_).division(vecteur()); - GrPoint r; - if (d <= 0.) { - r = new GrPoint(o_.x_, o_.y_, o_.z_); - } else if (d >= 1.) { - r = new GrPoint(e_.x_, e_.y_, e_.z_); - } else { - r = o_.addition(vecteur().multiplication(d)); - } - return r; + public GrPoint pointPlusProche(final GrPoint _a) { + GrVecteur vecOA=new GrVecteur(_a.x_-o_.x_, _a.y_-o_.y_, _a.z_-o_.z_); + GrPoint r3; + if(vecOA.division(vecteur())<=0.) + r3=new GrPoint(o_.x_, o_.y_, o_.z_); + else if(vecOA.division(vecteur())>=1.) + r3=new GrPoint(e_.x_, e_.y_, e_.z_); + else + r3=o_.addition(vecOA.projection(vecteur())); + return r3; } /** 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 2008-12-02 15:14:53 UTC (rev 4260) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-12-03 11:49:10 UTC (rev 4261) @@ -33,6 +33,7 @@ import org.fudaa.fudaa.modeleur.action.SceneInvertAction; import org.fudaa.fudaa.modeleur.action.SceneMoveInLayerAction; import org.fudaa.fudaa.modeleur.action.SceneProfilInterpolation; +import org.fudaa.fudaa.modeleur.action.SceneLinearisePolyligne; import org.fudaa.fudaa.modeleur.action.SceneProjectionAction; import org.fudaa.fudaa.modeleur.action.SceneRefinementAction; import org.fudaa.fudaa.sig.layer.FSigEditor; @@ -76,6 +77,7 @@ acts.add(new SceneInvertAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneProjectionAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneProfilInterpolation((MdlSceneEditor)sceneEditor_)); + acts.add(new SceneLinearisePolyligne((MdlSceneEditor) sceneEditor_)); acts.add(new SceneAbscisseCurviligneAction(this)); getSceneEditor().setActions(acts.toArray(new EbliActionAbstract[0])); } 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 2008-12-02 15:14:53 UTC (rev 4260) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2008-12-03 11:49:10 UTC (rev 4261) @@ -11,7 +11,10 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.swing.BorderFactory; import javax.swing.JButton; @@ -22,6 +25,7 @@ import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluListSelection; import org.fudaa.ctulu.CtuluListSelectionInterface; +import org.fudaa.ctulu.collection.CtuluCollection; import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ctulu.gis.GISAttributeModelDoubleArray; @@ -49,7 +53,10 @@ import org.fudaa.ebli.calque.ZScene; 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.calque.edition.ZSceneEditor; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrVecteur; import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.layer.MdlModel2dLine; import org.fudaa.fudaa.modeleur.layer.MdlModel2dMultiPoint; @@ -384,6 +391,127 @@ } /** + * Rend rectiligne une polyligne. + */ + public void linearisePolyligne() { + /** Class contenant les informations relativent \xE0 une polyligne. */ + class Poly { + public GISPolyligne poly; + public Object[] data; + public Poly(GISPolyligne _poly, Object[] _data) { + poly=_poly; + data=_data; + } + } + /** Class contenant les infromations relatives \xE0 une coordonn\xE9s projet\xE9e. */ + class PointProj implements Comparable<PointProj> { + public Coordinate c; // Coordonn\xE9 projet\xE9e + public double indiceCurviligne; // Indice Curviligne (k tq k*VecDirecteur=Vec(PtOrigine, c)) + public List<Object> data=new ArrayList<Object>(); // valeur des attributs atomiques + /** M\xE9thode pour utiliser les alorithmes de tris fournis par java. */ + public int compareTo(PointProj o) { + if (indiceCurviligne<o.indiceCurviligne) + return -1; + else if (indiceCurviligne==o.indiceCurviligne) + return 0; + else + return 1; + } + } + int[] geoms=getScene().getSelectionHelper().getSelectedIndexes(); + Map<ZCalqueAffichageDonneesInterface, List<Poly>> newPoly=new HashMap<ZCalqueAffichageDonneesInterface, List<Poly>>(); + // Verification de la selection \\ + boolean selectionValid=true; + int w=-1; + while(selectionValid&&++w<geoms.length) + selectionValid=getScene().getObject(geoms[w]) instanceof GISPolyligne; + if(selectionValid){ + // Pour chaque polyligne selectionn\xE9es + for (int i : geoms) { + GISPolyligne polyligne=((GISPolyligne)getScene().getObject(i)); + ZCalqueAffichageDonneesInterface calque=getScene().getLayerForId(i); + GISZoneCollection zone=((ZModeleEditable)calque.modeleDonnees()).getGeomData(); + /* + * Si deux points sont selectionn\xE9s dans cette polyligne, on les utilises + * comme destination de projection, sinon, ou si le nombre de point + * selectionn\xE9 n'est pas exactement deux, on utilise le premier et le + * dernier point de la polyligne comme destination de la projection. pt1 + * et pt2 sont ces deux points de r\xE9f\xE9rence. + */ + GrPoint pt1; + GrPoint pt2; + if (getScene().isAtomicMode()&&getScene().getLayerSelectionMulti().getSelection(i).getNbSelectedIndex()==2) { + pt1=new GrPoint(polyligne.getCoordinateSequence().getCoordinate(getScene().getLayerSelectionMulti().getSelection(i).getSelectedIndex()[0])); + pt2=new GrPoint(polyligne.getCoordinateSequence().getCoordinate(getScene().getLayerSelectionMulti().getSelection(i).getSelectedIndex()[1])); + } + else { + pt1=new GrPoint(polyligne.getCoordinateSequence().getCoordinate(0)); + pt2=new GrPoint(polyligne.getCoordinateSequence().getCoordinate(polyligne.getCoordinateSequence().size()-1)); + } + // Vecteur de la droite de destination + GrVecteur vecP1P2=new GrVecteur(pt2.x_-pt1.x_, pt2.y_-pt1.y_, pt2.z_-pt1.z_); + // Construction de l'ensemble des points composant la nouvelle polyligne \\ + PointProj[] newPtsCurv=new PointProj[polyligne.getCoordinateSequence().size()]; + for (int j=0; j<newPtsCurv.length; j++) { + GrPoint a=new GrPoint(polyligne.getCoordinateSequence().getCoordinate(j)); + // Projection + GrVecteur vecP1A=new GrVecteur(a.x_-pt1.x_, a.y_-pt1.y_, a.z_-pt1.z_); + GrPoint p=pt1.addition(vecP1A.projection(vecP1P2)); + Coordinate cp=new Coordinate(p.x_, p.y_, p.z_); + // Remplissage des informations relatives au point calcul\xE9 + newPtsCurv[j]=new PointProj(); + newPtsCurv[j].c=cp; + newPtsCurv[j].indiceCurviligne=new GrVecteur(cp.x-pt1.x_, cp.y-pt1.y_, cp.z-pt1.z_).division(vecP1P2); + for (int k=0; k<zone.getNbAttributes(); k++) + if (zone.getAttribute(k).isAtomicValue()) + newPtsCurv[j].data.add(((CtuluCollection)zone.getValue(k, getScene().sceneId2LayerId(i))).getObjectValueAt(j)); + } + // Tri des points en fonction de leur abcisse curviligne \\ + Arrays.sort(newPtsCurv); + // R\xE9cup\xE9ration des coordonn\xE9s + Coordinate[] newPts=new Coordinate[newPtsCurv.length]; + for (int j=0; j<newPts.length; j++) + newPts[j]=newPtsCurv[j].c; + // R\xE9cup\xE9ration des values des attributs atomiques + Object[] newData=new Object[zone.getNbAttributes()]; + int nemeAttAtomique=0; + for (int j=0; j<zone.getNbAttributes(); j++) { + if (zone.getAttribute(j).isAtomicValue()) { + Object[] values=new Object[newPtsCurv.length]; + for (int k=0; k<newPtsCurv.length; k++) + values[k]=newPtsCurv[k].data.get(nemeAttAtomique); + newData[j]=zone.getAttribute(j).createDataForGeom(values, newPtsCurv.length); + nemeAttAtomique++; + } + else + newData[j]=zone.getValue(j, getScene().sceneId2LayerId(i)); + } + // Ajout \xE0 la list des nouvelles polylignes \\ + if (!newPoly.containsKey(calque)) + newPoly.put(calque, new ArrayList<Poly>()); + newPoly.get(calque).add(new Poly(GISGeometryFactory.INSTANCE.createLineString(newPts), newData)); + } + CtuluCommandComposite cmd=new CtuluCommandComposite(); + // Destruction des anciennes polylignes + Arrays.sort(geoms); + for (int i=geoms.length-1; i>=0; i--) + ((ZModeleEditable)getScene().getLayerForId(geoms[i]).modeleDonnees()).getGeomData().removeGeometries(new int[]{getScene().sceneId2LayerId(geoms[i])}, cmd); + // Ajout des nouvelles polylignes + for (Map.Entry<ZCalqueAffichageDonneesInterface, List<Poly>> entry : newPoly.entrySet()) { + GISZoneCollection zone=((ZModeleEditable)((ZCalqueEditable)entry.getKey()).modeleDonnees()).getGeomData(); + List<Poly> polys=entry.getValue(); + for (int i=0; i<polys.size(); i++) + zone.addGeometry(polys.get(i).poly, polys.get(i).data, cmd); + } + // Mise \xE0 jour du undo/redo + if(mng_!=null) + mng_.addCmd(cmd.getSimplify()); + // Suppression de la selection + getScene().clearSelection(); + } + } + + /** * Interpole un profil \xE0 partir d'un nuage de point. */ public void interpolateProfile() { Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneLinearisePolyligne.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneLinearisePolyligne.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneLinearisePolyligne.java 2008-12-03 11:49:10 UTC (rev 4261) @@ -0,0 +1,73 @@ +/* + * @creation 2 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.fudaa.modeleur.action; + +import java.awt.event.ActionEvent; + +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISPolyligne; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +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.ZScene.SceneSelectionHelper; +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.fudaa.modeleur.MdlSceneEditor; +import org.fudaa.fudaa.ressource.FudaaResource; + +/** + * Action permettant de rendre rectiligne un profil. + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class SceneLinearisePolyligne extends EbliActionSimple implements ZSelectionListener { + protected MdlSceneEditor sceneEditor_; + + public SceneLinearisePolyligne(MdlSceneEditor _sceneEditor) { + super(FudaaResource.FUDAA.getString("Rendre rectiligne une ou plusieurs polyligne(s)"), null, "RECTILIGNE_POLYLIGNE"); + setDefaultToolTip(FudaaResource.FUDAA.getString("Rend rectiligne une ou plusieurs polyligne(s)")); + sceneEditor_=_sceneEditor; + sceneEditor_.getScene().addSelectionListener(this); + } + + public void actionPerformed(final ActionEvent _e) { + sceneEditor_.linearisePolyligne(); + } + + public void updateForSelectionChanged() { + ZScene scn=sceneEditor_.getScene(); + SceneSelectionHelper hlp=sceneEditor_.getScene().getSelectionHelper(); + // Au moins une et seulement des polylignes de selectionn\xE9es. Et si en mode + // atomique, deux sommets doivent \xEAtre selectionn\xE9s pour chacune d'entre + // elles. + int[] geomSelected=scn.getSelectionHelper().getSelectedIndexes(); + boolean b=geomSelected.length>0; + int i=0; + while(b&&i<geomSelected.length){ + b=scn.getObject(geomSelected[i]) instanceof GISPolyligne; + if(scn.isAtomicMode()) + b=b&&scn.getLayerSelectionMulti()!=null&&scn.getLayerSelectionMulti().getSelection(geomSelected[i]).getNbSelectedIndex()==2; + i++; + } + setEnabled(b); + } + + public String getEnableCondition() { + return CtuluLib.getS("Selectionner une ou plusieurs polyligne(s), en mode global ou atomique (pour cette derni\xE8re selectionnez deux points pour chaque polyligne)."); + } + + /* (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/SceneLinearisePolyligne.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...> - 2008-12-03 13:56:44
|
Revision: 4262 http://fudaa.svn.sourceforge.net/fudaa/?rev=4262&view=rev Author: bmarchan Date: 2008-12-03 13:56:39 +0000 (Wed, 03 Dec 2008) Log Message: ----------- Tache #104 : Les actions ?\195?\169diter et joindre sont mises dans menu "G?\195?\169ometrie" Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneSplitAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.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/edition/ZSceneEditor.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/layer/MdlLayer2dLine.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigEditor.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneJoinAction.java Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneJoinAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneJoinAction.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneJoinAction.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -0,0 +1,105 @@ +/* + * @creation 3 juil. 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.ebli.calque.action; + +import java.awt.event.ActionEvent; + +import javax.swing.Action; + +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.gis.GISMultiPoint; +import org.fudaa.ctulu.gis.GISPolyligne; +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +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.ZScene.SceneSelectionHelper; +import org.fudaa.ebli.calque.edition.ZCalqueEditable; +import org.fudaa.ebli.calque.edition.ZCalqueLigneBriseeEditable; +import org.fudaa.ebli.calque.edition.ZCalqueMultiPointEditable; +import org.fudaa.ebli.calque.edition.ZSceneEditor; +import org.fudaa.ebli.commun.EbliActionSimple; + +import com.memoire.bu.BuResource; +import com.memoire.fu.Fu; +import com.memoire.fu.FuLog; + + +/** + * Une action pour joindre 2 polylignes \xE0 partir de leurs extremit\xE9s. Valable uniquement sur des calques + * {@link ZCalqueLigneBriseeEditable}. Ne fonctionne pas sur des polygones. + * @author Bertrand Marchand + */ +public class SceneJoinAction extends EbliActionSimple implements ZSelectionListener { + ZSceneEditor editor_; + + public SceneJoinAction(ZSceneEditor _editor) { + super(BuResource.BU.getString("Joindre"), null, "GIS_JOIN"); + editor_=_editor; + editor_.getScene().addSelectionListener(this); + setDefaultToolTip(CtuluLib.getS("Joindre 2 polylignes ou 2 multipoints d'un m\xEAme calque")); + } + + public void actionPerformed(final ActionEvent _e) { + editor_.joinSelectedObjects(); + } + + public void updateStateBeforeShow() { + super.setEnabled(isActivable()); + } + + /** + * Definit si l'action peut \xEAtre activ\xE9e. + * @return true si c'est possible. + */ + private boolean isActivable() { + putValue(Action.NAME, BuResource.BU.getString("Joindre")); + + ZScene scn=editor_.getScene(); + SceneSelectionHelper hlp=editor_.getScene().getSelectionHelper(); + + // On autorise la jonction que sur 2 g\xE9om\xE9tries d'un m\xEAme calque. + + // La selection est vide + if (scn.isSelectionEmpty()) return false; + // Le nombre de geometries n'est pas egal \xE0 2 + int[] idxgeom=hlp.getSelectedIndexes(); + if (idxgeom.length!=2) return false; + // Les g\xE9om\xE9tries n'appartiennent pas au m\xEAme calque. + if (scn.getLayerForId(idxgeom[0])!=scn.getLayerForId(idxgeom[1])) return false; + + // Les g\xE9om\xE9tries sont 2 multipoints, ok quelque soit le mode. + if (scn.getObject(idxgeom[0]) instanceof GISMultiPoint && + scn.getObject(idxgeom[1]) instanceof GISMultiPoint) { + + putValue(Action.NAME, BuResource.BU.getString("Joindre les multipoints")); + return true; + } + + // Les g\xE9om\xE9tries ne sont pas 2 polylignes + if (!(scn.getObject(idxgeom[0]) instanceof GISPolyligne) || + !(scn.getObject(idxgeom[1]) instanceof GISPolyligne)) return false; + + // Le mode n'est pas sommet pour des polylignes + if (!scn.isAtomicMode()) return false; + // Le nombre de sommets selectionn\xE9 n'est pas \xE9gal \xE0 2 + if (hlp.getNbAtomicSelected()!=2) return false; + + putValue(Action.NAME, BuResource.BU.getString("Joindre les polylignes")); + return true; + } + + public String getEnableCondition() { + return CtuluLib.getS("S\xE9lectionner les sommets extremit\xE9s de 2 polylignes ou deux semis de points"); + } + + public void selectionChanged(ZSelectionEvent _evt) { + updateStateBeforeShow(); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneJoinAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneSplitAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneSplitAction.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/SceneSplitAction.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -15,6 +15,8 @@ import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZSelectionEvent; +import org.fudaa.ebli.calque.ZSelectionListener; import org.fudaa.ebli.calque.ZScene.SceneSelectionHelper; import org.fudaa.ebli.calque.edition.ZCalqueEditable; import org.fudaa.ebli.calque.edition.ZSceneEditor; @@ -27,12 +29,13 @@ * {@link ZCalqueEditable}. Ne fonctionne pas sur des polygones. * @author Bertrand Marchand */ -public class SceneSplitAction extends EbliActionSimple { +public class SceneSplitAction extends EbliActionSimple implements ZSelectionListener { ZSceneEditor editor_; public SceneSplitAction(ZSceneEditor _editor) { super(BuResource.BU.getString("Scinder"), BuResource.BU.getIcon("couperligne"), "GIS_SPLIT"); editor_=_editor; + editor_.getScene().addSelectionListener(this); setDefaultToolTip(CtuluLib.getS("Scinder la g\xE9om\xE9trie")); } @@ -69,4 +72,8 @@ public String getEnableCondition() { return CtuluLib.getS("S\xE9lectionner 2 sommets consecutifs d'une polyligne<br>ou les sommets d'un multipoint"); } + + public void selectionChanged(ZSelectionEvent _evt) { + updateStateBeforeShow(); + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -76,6 +76,13 @@ public boolean splitSelectedObject(CtuluCommandContainer _cmd, CtuluUI _ui); /** + * Joint 2 g\xE9ometries. + * @param _cmd La pile de commandes. + * @return true si les objets ont \xE9t\xE9 joints. + */ + public boolean joinSelectedObjects(final CtuluCommandContainer _cmd); + + /** * Retourne si la forme d'un certain type peut \xEAtre ajout\xE9e. * @param _typeForme Le type de forme * @return true si ce type de forme peut \xEAtre ajout\xE9. Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -79,7 +79,7 @@ * @param _cmd La pile de commandes. * @return true si les polylignes ont \xE9t\xE9 jointes. */ - public boolean joinGeometries(final CtuluCommandContainer _cmd) { + public boolean joinSelectedObjects(final CtuluCommandContainer _cmd) { if (isSelectionEmpty() || !isAtomicMode()) return false; int[] idxLines=new int[2]; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -362,7 +362,7 @@ * @param _cmd La pile de commandes. * @return true si les semis de points ont \xE9t\xE9 jointes. */ - public boolean joinGeometries(final CtuluCommandContainer _cmd) { + public boolean joinSelectedObjects(final CtuluCommandContainer _cmd) { if (isSelectionEmpty()) return false; 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 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -293,4 +293,9 @@ public boolean splitSelectedObject(CtuluCommandContainer _cmd, CtuluUI _ui) { return false; } + + /* Sans objet */ + public boolean joinSelectedObjects(final CtuluCommandContainer _cmd) { + return false; + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZSceneEditor.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -131,6 +131,18 @@ cq.splitSelectedObject(mng_,ui_); } + /** + * Joint 2 g\xE9om\xE9tries d'un m\xEAme calque en 1<p> + * Principe : <br> + * Pour 2 multipoints, selection des 2 multipoints, ou d'un ou plusieurs sommets de 2 multipoints.<br> + * Pour 2 polylignes, selection de 2 sommets extremit\xE9. + */ + public void joinSelectedObjects() { + int[] idxs=getScene().getLayerSelectionMulti().getIdxSelected(); + ZCalqueEditable cq=(ZCalqueEditable)getScene().getLayerForId(idxs[0]); + cq.joinSelectedObjects(mng_); + } + protected void methodNotImplemented() { StackTraceElement stel=new Throwable().getStackTrace()[1]; String name=stel.getClassName()+"."+stel.getMethodName(); 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 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -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.action.SceneJoinAction; import org.fudaa.ebli.calque.action.SceneSplitAction; import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.calque.edition.BPaletteEdition; @@ -69,11 +70,16 @@ EbliActionInterface[] actSuper=sceneEditor_.getActions(); if (actSuper!=null) acts.addAll(Arrays.asList(actSuper)); + acts.addAll(Arrays.asList(getEditAction())); + acts.add(null); + acts.add(new SceneJoinAction(sceneEditor_)); acts.add(new SceneSplitAction(sceneEditor_)); + acts.add(null); + acts.add(new SceneDecimationAction((MdlSceneEditor)sceneEditor_)); + acts.add(new SceneRefinementAction((MdlSceneEditor)sceneEditor_)); + acts.add(null); acts.add(new SceneInterpolationAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneMoveInLayerAction((MdlSceneEditor)sceneEditor_, getPanel().getArbreCalqueModel())); - acts.add(new SceneDecimationAction((MdlSceneEditor)sceneEditor_)); - acts.add(new SceneRefinementAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneInvertAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneProjectionAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneProfilInterpolation((MdlSceneEditor)sceneEditor_)); 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 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -10,6 +10,7 @@ import javax.swing.Action; import org.fudaa.ebli.calque.BArbreCalque; +import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.BGroupeCalque; import org.fudaa.ebli.calque.ZSelectionEvent; import org.fudaa.ebli.calque.ZSelectionListener; @@ -45,6 +46,7 @@ import org.fudaa.fudaa.tr.common.TrResource; import com.memoire.bu.BuMenu; +import com.memoire.bu.BuPopupMenu; /** * Le panneau de visu 2D des donn\xE9es du modeleur au travers des calques. Contient le composant vue @@ -237,6 +239,17 @@ cqMdl1d_.add(cqAxe); } + protected void fillCmdContextuelles(final BuPopupMenu _menu) { + if (getScene() != null) { + fillMenuWithSceneActions(_menu); + } + _menu.add(getMenuSelectionPath()); + if (contextTools_ == null) { + buildTools(); + } + _menu.add(contextTools_); + } + /** * Mise a jour des actions. * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent) Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLine.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLine.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dLine.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -49,9 +49,6 @@ private void installActions() { FSigEditor editor=(FSigEditor)getEditor(); ArrayList vacts=new ArrayList(); - vacts.addAll(Arrays.asList(editor.getEditAction())); - vacts.add(editor.getJoinAction()); - vacts.add(null); vacts.add(editor.getImportAction()); EbliActionInterface[] acts=(EbliActionInterface[])vacts.toArray(new EbliActionInterface[0]); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlLayer2dMultiPoint.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -48,11 +48,6 @@ private void installActions() { FSigEditor editor=(FSigEditor)getEditor(); ArrayList vacts=new ArrayList(); - vacts.addAll(Arrays.asList(editor.getEditAction())); - vacts.add(editor.getJoinAction()); -// vacts.add(editor.getSplitAction()); -// vacts.add(editor.getJoinAction()); - vacts.add(null); vacts.add(editor.getImportAction()); EbliActionInterface[] acts=(EbliActionInterface[])vacts.toArray(new EbliActionInterface[0]); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigEditor.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigEditor.java 2008-12-03 11:49:10 UTC (rev 4261) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigEditor.java 2008-12-03 13:56:39 UTC (rev 4262) @@ -20,10 +20,7 @@ import org.fudaa.ctulu.ProgressionInterface; import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ctulu.gis.GISGeometryFactory; -import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISPolygone; -import org.fudaa.ctulu.gis.GISPolyligne; -import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; import org.fudaa.ctulu.gis.GISZoneListener; import org.fudaa.ctulu.gis.factory.GISExportDataStoreFactory; import org.fudaa.ctulu.gui.CtuluFileChooser; @@ -34,14 +31,11 @@ import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.ZCalqueAffichageDonnees; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; -import org.fudaa.ebli.calque.ZCalqueAffichageDonneesMulti; import org.fudaa.ebli.calque.ZEbliCalquesPanel; import org.fudaa.ebli.calque.ZModelGeometryListener; import org.fudaa.ebli.calque.ZModeleGeometry; import org.fudaa.ebli.calque.edition.ZCalqueEditable; import org.fudaa.ebli.calque.edition.ZCalqueEditionGroup; -import org.fudaa.ebli.calque.edition.ZCalqueLigneBriseeEditable; -import org.fudaa.ebli.calque.edition.ZCalqueMultiPointEditable; import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.calque.edition.ZSceneEditor; import org.fudaa.ebli.commun.EbliActionSimple; @@ -225,17 +219,6 @@ } return importAction_; } - - /** - * Une action pour joindre 2 polylignes ou deux multipoint. N'est pas dans les actions par defaut. - * @return L'action - */ - public EbliActionSimple getJoinAction() { - if (joinAction_ == null) { - joinAction_ = new JoinAction(); - } - return joinAction_; - } private class VisuAction extends EbliActionSimple { @@ -328,79 +311,6 @@ } } - /** - * Une action pour joindre 2 polylignes \xE0 partir de leurs extremit\xE9s. Valable uniquement sur des calques - * {@link ZCalqueLigneBriseeEditable}. Ne fonctionne pas sur des polygones. - * @author Bertrand Marchand - */ - private class JoinAction extends EbliActionSimple { - - protected JoinAction() { - super(BuResource.BU.getString("Joindre"), /*BuResource.BU.getIcon("joindreligne")*/null, "GIS_JOIN"); - setDefaultToolTip(FudaaLib.getS("Joindre 2 polylignes ou 2 multipoint")); - } - - public void actionPerformed(final ActionEvent _e) { - joinSelectedGeometries(); - } - - public void updateStateBeforeShow() { - if (Fu.DEBUG && FuLog.isDebug()) { - FuLog.debug("FTR gis target= " + FSigEditor.this.getTarget()); - } - boolean b=false; - if (getSupport().getCalqueActif() instanceof ZCalqueLigneBriseeEditable) { - ZCalqueLigneBriseeEditable cq=(ZCalqueLigneBriseeEditable)getSupport().getCalqueActif(); - // Si le calque est editable, en mode atomique, et si le nombre de - // sommets est 2. - b=cq!=null&&FSigEditor.this.isEditable(cq)&&!cq.isSelectionEmpty()&&cq.isAtomicMode() - &&cq.getLayerSelectionMulti().getNbSelectedItem()==2; - // Si les sommets sont sur 2 des objets distincts, que ces objets sont - // des polylignes - if (b) { - int[] idxLignes=cq.getLayerSelectionMulti().getIdxSelected(); - b&=idxLignes.length==2; - if (b) { - for (int i=0; i<idxLignes.length; i++) - b&=(((GISZoneCollectionLigneBrisee)((ZModeleGeometry)cq.modeleDonnees()).getGeomData()).getGeometry(idxLignes[i]) instanceof GISPolyligne); - } - } - } - // Ou si c'est deux semis de points qui sont selectionn\xE9s - else if (getSupport().getCalqueActif() instanceof ZCalqueMultiPointEditable) { - ZCalqueMultiPointEditable cq=(ZCalqueMultiPointEditable)getSupport().getCalqueActif(); - // Deux selections en mode sommet ou global - // Ces deux s\xE9lections doivent \xEAtre des semis de points - if (cq!=null&&FSigEditor.this.isEditable(cq)&&!cq.isSelectionEmpty() - &&(cq.getLayerSelectionMulti()!=null&&cq.getLayerSelectionMulti().getNbSelectedItem()==2||cq.getLayerSelection()!=null&&cq.getLayerSelection().getNbSelectedIndex()==2)) { - int[] idxGeom; - if (cq.getLayerSelectionMulti()!=null&&cq.getLayerSelectionMulti().getNbSelectedItem()!=0) - idxGeom=cq.getLayerSelectionMulti().getIdxSelected(); - else - idxGeom=cq.getLayerSelection().getSelectedIndex(); - b=true; - for (int i=0; i<idxGeom.length; i++) - b=b&&(cq.modeleDonnees().getObject(idxGeom[i]) instanceof GISMultiPoint); - } - } - super.setEnabled(b); - } - - public String getEnableCondition() { - return FudaaLib.getS("S\xE9lectionner les sommets extremit\xE9s de 2 polylignes ou deux semis de points"); - } - } - - /** - * Joint 2 polylignes distinctes ou deux semis de points. - */ - protected void joinSelectedGeometries() { - if (getSupport().getCalqueActif() instanceof ZCalqueLigneBriseeEditable) - ((ZCalqueLigneBriseeEditable)getSupport().getCalqueActif()).joinGeometries(getMng()); - else if (getSupport().getCalqueActif() instanceof ZCalqueMultiPointEditable) - ((ZCalqueMultiPointEditable)getSupport().getCalqueActif()).joinGeometries(getMng()); - } - protected boolean canExportSelectedLayer() { final BCalque[] parent = super.getPanel().getArbreCalqueModel().getSelection(); if (parent == null) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-04 09:55:18
|
Revision: 4265 http://fudaa.svn.sourceforge.net/fudaa/?rev=4265&view=rev Author: emmanuel_martin Date: 2008-12-04 09:55:13 +0000 (Thu, 04 Dec 2008) Log Message: ----------- bugfix : divers bug concernant la selection , la destruction et le d?\195?\169placement en mode point. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java 2008-12-03 15:00:00 UTC (rev 4264) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java 2008-12-04 09:55:13 UTC (rev 4265) @@ -254,8 +254,8 @@ } // les nouvelles coordonnees. final Coordinate[] newCs = new Coordinate[nbPt-nbSel]; - // cette liste contient les indice a enlever : creee que si necessaire - // si des attribute atomics existent + // cette liste contient les indices a enlever : creee que si necessaire + // si des attributes atomics existent final TIntArrayList idxToRemove = containsAtomicAttribute() ? new TIntArrayList(nbPt-nbSel) : null; // compteur tempo Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2008-12-03 15:00:00 UTC (rev 4264) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2008-12-04 09:55:13 UTC (rev 4265) @@ -132,6 +132,7 @@ //les points a enlever final CtuluListSelectionInterface sel = (CtuluListSelectionInterface) iterator.value(); geometries_.removeAtomics(idxLigne, sel, _ui, cmp); + sel.clear(); } if (_cmd != null) { _cmd.addCmd(cmp.getSimplify()); @@ -580,14 +581,8 @@ FuLog.warning("EBL:Pb l'attribut pour Z n'est pas dans la liste des attributs du calque!"); } - if (isGeometryFermee(i)) { - final GISPolygone poly = (GISPolygone) GISGeometryFactory.INSTANCE.createLinearRing(newSeq); - geometries_.setGeometry(i, poly, cmp); - } - else { - final GISPolyligne poly = (GISPolyligne) GISGeometryFactory.INSTANCE.createLineString(newSeq); - geometries_.setGeometry(i, poly, cmp); - } + final Geometry poly = GISGeometryFactory.INSTANCE.createGeometry(geometries_.getGeometry(i).getClass(), newSeq); + geometries_.setGeometry(i, poly, cmp); } } if (_cmd != null) { @@ -653,26 +648,13 @@ } } - if (isGeometryFermee(idx)) { - final GISPolygone poly = (GISPolygone) GISGeometryFactory.INSTANCE.createLinearRing(newSeq); - if (!poly.isValid()) { - if (_ui != null) { - _ui.error(null,EbliLib.getS("La nouvelle ligne n'est pas valide"), false); - } - return false; - } - geometries_.setGeometry(idx, poly, cmp); + final Geometry poly = GISGeometryFactory.INSTANCE.createGeometry(geometries_.getGeometry(idx).getClass(), newSeq); + if (!poly.isValid()) { + if (_ui != null) + _ui.error(null,EbliLib.getS("La nouvelle ligne n'est pas valide"), false); + return false; } - else { - final GISPolyligne poly = (GISPolyligne) GISGeometryFactory.INSTANCE.createLineString(newSeq); - if (!poly.isValid()) { - if (_ui != null) { - _ui.error(null,EbliLib.getS("La nouvelle ligne n'est pas valide"), false); - } - return false; - } - geometries_.setGeometry(idx, poly, cmp); - } + geometries_.setGeometry(idx, poly, cmp); if (newvals!=null) getGeomData().getModel(zAtt).setObject(idx, newvals, cmp); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-12-03 15:00:00 UTC (rev 4264) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-12-04 09:55:13 UTC (rev 4265) @@ -135,7 +135,7 @@ * est activable et un ref\xE9rence sur cette g\xE9om\xE9trie est concerv\xE9e dans * 'selectedGeometry_'. */ - if (scene_.isOnlyOneObjectSelected()) { + if (scene_.isOnlyOneObjectSelected()&&scene_.sceneId2LayerId(scene_.getSelectionHelper().getUniqueSelectedIdx())!=-1) { int idxGeom=scene_.getSelectionHelper().getUniqueSelectedIdx(); ZCalqueAffichageDonneesInterface calque=scene_.getLayerForId(idxGeom); Geometry geom=((ZModeleGeometry)calque.modeleDonnees()).getGeomData().getGeometry(scene_.sceneId2LayerId(idxGeom)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-04 17:48:14
|
Revision: 4273 http://fudaa.svn.sourceforge.net/fudaa/?rev=4273&view=rev Author: emmanuel_martin Date: 2008-12-04 17:48:11 +0000 (Thu, 04 Dec 2008) Log Message: ----------- On peut maintenant voir le 'z' lors de l'import dans des fichiers mascaret 2D ; la sonde de l'outil de calcul de l'abscisse curviligne est toujours plac?\195?\169 sur la polyligne Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java Modified: 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 2008-12-04 16:38:20 UTC (rev 4272) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/mascaret/io/MascaretReader.java 2008-12-04 17:48:11 UTC (rev 4273) @@ -1,6 +1,6 @@ /* * @creation 13 nov. 2008 - * @modification $Date:$ + * @modification $Date$ * @license GNU General Public License 2 * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail fud...@li... @@ -241,7 +241,7 @@ progress_.setDesc(DodicoLib.getS("Lecture de ")+fileName_); // Cr\xE9ation de la GISZoneCollectionLigneBrisee GISZoneCollectionLigneBrisee zone=new GISZoneCollectionLigneBrisee(); - zone.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.NATURE}, null); + 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)); @@ -252,15 +252,16 @@ coordSeq.setOrdinate(i, 0, profil.coordXYTraceProfil.get(i)[0]); coordSeq.setOrdinate(i, 1, profil.coordXYTraceProfil.get(i)[1]); } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_TP}, null); + 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, profil.coordZ.get(i)); + z[i]=profil.coordZ.get(i); } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{profil.nomProfil, GISAttributeConstants.ATT_NATURE_PF}, null); + 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 \\ @@ -269,7 +270,7 @@ coordSeq.setOrdinate(i, 0, profils_.get(i).coordIntersectionAxeHydraulique[0]); coordSeq.setOrdinate(i, 1, profils_.get(i).coordIntersectionAxeHydraulique[1]); } - zone.addGeometry(new GISPolyligne(coordSeq), new Object[]{null, GISAttributeConstants.ATT_NATURE_AH}, null); + 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.")); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-12-04 16:38:20 UTC (rev 4272) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneAbscisseCurviligneAction.java 2008-12-04 17:48:11 UTC (rev 4273) @@ -29,6 +29,8 @@ import org.fudaa.ebli.calque.ZSelectionListener; import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.commun.EbliActionPaletteAbstract; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.geometrie.GrSegment; import org.fudaa.ebli.ressource.EbliResource; import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.layer.BPaletteAbscisseCurviligne; @@ -152,11 +154,11 @@ } /** - * Est appel\xE9 par le calque d'interaction pour indiquer le point click\xE9. + * Est appel\xE9 par le calque d'interaction pour indiquer le point cliqu\xE9. * @param _coord la coordonn\xE9 r\xE9el. - * @return true si le click est consid\xE9r\xE9 comme sur la g\xE9om\xE9trie, false sinon + * @return la coordonn\xE9 projet\xE9 si le point click\xE9 est dans la tol\xE9rance, null sinon. */ - public boolean coordinateClicked(Coordinate _coord, double tolerance){ + public Coordinate coordinateClicked(Coordinate _coord, double tolerance){ Point ptClick=new GeometryFactory().createPoint(_coord); boolean returnValue=false; if (selectedGeometry_!=null&&selectedGeometry_.distance(ptClick)<tolerance) { @@ -172,17 +174,18 @@ // Calcule de l'abscisse curviligne double valueCurviligne=0; for (int j=1; j<=i; j++) - valueCurviligne+=Math.sqrt(Math.pow(coordSeq.getOrdinate(j, 0)-coordSeq.getOrdinate(j-1, 0), 2) - +Math.pow(coordSeq.getOrdinate(j, 1)-coordSeq.getOrdinate(j-1, 1), 2)); - // th de Pythagore - valueCurviligne+=Math.sqrt(Math.pow((Math.sqrt(Math.pow(coordSeq.getOrdinate(i, 0)-ptClick.getX(), 2) - +Math.pow(coordSeq.getOrdinate(i, 1)-ptClick.getY(), 2))), 2) - -Math.pow(selectedGeometry_.distance(ptClick), 2)); + valueCurviligne+=coordSeq.getCoordinate(j).distance(coordSeq.getCoordinate(j-1)); + // Point projet\xE9 + GrPoint pp=new GrSegment(new GrPoint(coordSeq.getCoordinate(i)), new GrPoint(coordSeq.getCoordinate(i+1))).pointPlusProche(new GrPoint(_coord)); + Coordinate ppc=new Coordinate(pp.x_, pp.y_, pp.z_); + // Mise \xE0 jour de l'abscisse curviligne + valueCurviligne+=coordSeq.getCoordinate(i).distance(ppc); ((BPaletteAbscisseCurviligne)palette_).setAbcisseCurviligne(valueCurviligne); + return ppc; } else if(selectedGeometry_!=null) ((BPaletteAbscisseCurviligne)palette_).setMessage(FudaaLib.getS("pas de valeur")); - return returnValue; + return null; } @Override Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java 2008-12-04 16:38:20 UTC (rev 4272) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/ZCalqueAbscisseCurviligneInteraction.java 2008-12-04 17:48:11 UTC (rev 4273) @@ -34,15 +34,20 @@ /** L'action g\xE9rant le calcule de l'abcisse curviligne. */ private SceneAbscisseCurviligneAction controller_; - /** Le dernier click effectu\xE9. */ - private Coordinate lastClick_; + /** La position de la sonde en coordonn\xE9 r\xE9el. */ + private Coordinate positionReelSonde_; + /** Derni\xE8re position de la sonde en coordonn\xE9 \xE9cran. */ + private Coordinate oldPositionSonde_; /** La sonde \xE0 afficher \xE0 l'endroit du click. */ private TraceIcon sonde_; /** Indique si la sonde est affich\xE9e. */ private boolean sondePainted_; + /** Indique si le curseur est en dehors de la fen\xEAtre. */ + private boolean cursOut_; public ZCalqueAbscisseCurviligneInteraction(SceneAbscisseCurviligneAction _controller){ setName("cqInteractifAbscisseCurviligne"); + cursOut_=false; controller_=_controller; sondePainted_=false; sonde_=new TraceIcon(TraceIcon.RIEN, 6) { @@ -72,11 +77,8 @@ sonde_.setCouleur(Color.BLACK); } - private void drawSonde(Graphics g){ - if (lastClick_!=null) { - Coordinate c=reelToEcran(lastClick_); - sonde_.paintIconCentre(this, g, (int)c.x, (int)c.y); - } + private void drawSonde(Graphics g, Coordinate c){ + sonde_.paintIconCentre(this, g, (int)c.x, (int)c.y); } protected void afficheSonde(){ @@ -84,7 +86,10 @@ Graphics g=getGraphics(); if(g!=null){ g.setXORMode(getBackground()); - drawSonde(g); + if (positionReelSonde_!=null) { + drawSonde(g, reelToEcran(positionReelSonde_)); + oldPositionSonde_=reelToEcran(positionReelSonde_); + } } sondePainted_=true; } @@ -95,7 +100,10 @@ Graphics g=getGraphics(); if(g!=null){ g.setXORMode(getBackground()); - drawSonde(g); + if (oldPositionSonde_!=null) { + drawSonde(g, oldPositionSonde_); + oldPositionSonde_=null; + } } sondePainted_=false; } @@ -132,6 +140,7 @@ public void mouseClicked(final MouseEvent _evt) {} public void mouseEntered(final MouseEvent _evt) { + cursOut_=false; if(!isGele()) afficheSonde(); } @@ -139,6 +148,7 @@ public void mousePressed(final MouseEvent _evt) {} public void mouseExited(final MouseEvent _evt) { + cursOut_=true; if(!isGele()) effaceSonde(); } @@ -146,7 +156,6 @@ public void mouseReleased(final MouseEvent _evt) { if (!isGele()&&_evt.getButton()==MouseEvent.BUTTON1){ effaceSonde(); - lastClick_=ecranToReel(new Coordinate(_evt.getX(), _evt.getY())); // Calcule de la tol\xE9rance au click double tolerance; GrPoint p1=new GrPoint(0, 0, 0); @@ -156,20 +165,21 @@ p2.autoApplique(getVersEcran()); tolerance/=p1.distance(p2); // Mise a jour de l'action - if(controller_.coordinateClicked(lastClick_, tolerance)) + positionReelSonde_=controller_.coordinateClicked(ecranToReel(new Coordinate(_evt.getX(), _evt.getY())), tolerance); + if(positionReelSonde_!=null) afficheSonde(); } } /** Indique au calque qu'il faut s'arr\xEAter. */ public void stopEdition(){ - lastClick_=null; + positionReelSonde_=null; } public void setGele(boolean _gele){ if(_gele) effaceSonde(); - else + else if(!cursOut_) afficheSonde(); super.setGele(_gele); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-12-08 16:30:18
|
Revision: 4278 http://fudaa.svn.sourceforge.net/fudaa/?rev=4278&view=rev Author: bmarchan Date: 2008-12-08 16:30:11 +0000 (Mon, 08 Dec 2008) Log Message: ----------- Installation des biefs dans l'arbre des calques. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceGroupe.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceSingle.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceGroupe.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceGroupe.java 2008-12-05 14:35:47 UTC (rev 4277) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceGroupe.java 2008-12-08 16:30:11 UTC (rev 4278) @@ -21,6 +21,7 @@ import org.fudaa.ctulu.CtuluArkLoader; import org.fudaa.ctulu.CtuluArkSaver; +import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ctulu.ProgressionInterface; @@ -178,6 +179,19 @@ return rs; } + protected BCalque findCalque(final BCalqueSaverInterface _cqName, final BCalqueSaverTargetInterface _pn, + final BCalque _parent) { + // On essaye de r\xE9cup\xE9rer le groupe s'il existe par d\xE9faut dans la hierarchie. + BGroupeCalque cq=(BGroupeCalque)super.findCalque(_cqName, _pn, _parent); + if (cq!=null) return cq; + + // Le groupe n'a pas \xE9t\xE9 trouv\xE9, on le construit. + cq=new BGroupeCalque(); + cq.setName(BGroupeCalque.findUniqueChildName(_parent)); + _parent.add(cq); + return cq; + } + public String restoreFrom(final CtuluArkLoader _loader, final BCalqueSaverTargetInterface _parentPanel, final BCalque _parentCalque, final String _parentDirEntry, final String _entryName, final ProgressionInterface _proj) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceSingle.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceSingle.java 2008-12-05 14:35:47 UTC (rev 4277) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BCalquePersistenceSingle.java 2008-12-08 16:30:11 UTC (rev 4278) @@ -139,11 +139,15 @@ } /** - * Retrouve le calque de nom donn\xE9 _cqName.getLayerName() dans la hierarchie des calques, \xE0 partir du calque _parent. - * @param _cqName - * @param _pn - * @param _parent - * @return + * Retrouve le calque de nom donn\xE9 _cqName.getLayerName() dans la hierarchie des calques, \xE0 partir du calque _parent.<p> + * Cette m\xE9thode peut \xEAtre surcharg\xE9e pour recr\xE9er les calques au fur et a mesure de leur lecture sur le fichier projet. En effet, + * la hierarchie des calques peut \xEAtre immuable, fix\xE9e par l'application, ou d\xE9pendre du projet pour les applications qui + * supportent l'ajout ou la suppression de calques par l'utilisateur. + * + * @param _cqName L'interface de transport des infos li\xE9es au calque \xE0 retrouver. + * @param _pn Le panneau contenant les calques. + * @param _parent Le calque parent + * @return Le calque retrouv\xE9, null si rien trouv\xE9. */ protected BCalque findCalque(final BCalqueSaverInterface _cqName, final BCalqueSaverTargetInterface _pn, final BCalque _parent) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java 2008-12-05 14:35:47 UTC (rev 4277) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/BGroupeCalque.java 2008-12-08 16:30:11 UTC (rev 4278) @@ -34,7 +34,8 @@ * @author Guillaume Desnoix */ public class BGroupeCalque extends BCalque { - + boolean isTitleModifiable_=false; + public BGroupeCalque() { super(); setDestructible(true); @@ -287,4 +288,16 @@ c[i].setVisible(_b); } } + + public boolean isTitleModifiable() { + return isTitleModifiable_; + } + + /** + * Definit si le titre peut \xEAtre modifi\xE9 depuis l'arbre des calques. + * @param _b true : Il est modifiable. + */ + public void setTitleModifiable(boolean _b) { + isTitleModifiable_=_b; + } } 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 2008-12-05 14:35:47 UTC (rev 4277) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2008-12-08 16:30:11 UTC (rev 4278) @@ -7,20 +7,17 @@ */ package org.fudaa.fudaa.modeleur; +import java.awt.event.ActionEvent; + import javax.swing.Action; -import org.fudaa.ebli.calque.BArbreCalque; -import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.BGroupeCalque; import org.fudaa.ebli.calque.ZSelectionEvent; -import org.fudaa.ebli.calque.ZSelectionListener; -import org.fudaa.ebli.calque.action.SceneSelectNextAction; -import org.fudaa.ebli.calque.action.SceneSelectPreviousAction; import org.fudaa.ebli.calque.action.SceneShowOrientationAction; import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.ebli.commun.EbliActionMap; +import org.fudaa.ebli.commun.EbliActionSimple; import org.fudaa.ebli.commun.EbliComponentFactory; -import org.fudaa.ebli.ressource.EbliResource; import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.commun.impl.FudaaCommonImplementation; import org.fudaa.fudaa.modeleur.action.CalqueDeleteCalqueAction; @@ -35,9 +32,6 @@ import org.fudaa.fudaa.modeleur.layer.MdlLayer2dProfile; import org.fudaa.fudaa.modeleur.layer.MdlLayer2dZone; import org.fudaa.fudaa.modeleur.layer.MdlLayerFactory; -import org.fudaa.fudaa.modeleur.layer.MdlModel2dCloud; -import org.fudaa.fudaa.modeleur.layer.MdlModel2dLevel; -import org.fudaa.fudaa.modeleur.layer.MdlModel2dProfile; import org.fudaa.fudaa.ressource.FudaaResource; import org.fudaa.fudaa.sig.layer.FSigEditor; import org.fudaa.fudaa.sig.layer.FSigImageImportAction; @@ -61,6 +55,7 @@ BGroupeCalque cqAlti_; BGroupeCalque cqSing_; BGroupeCalque cqMdl1d_; + BGroupeCalque cqBiefs_; /** * Construction des calques. Une partie est d\xE9j\xE0 construite par d\xE9faut dans les classes @@ -114,8 +109,9 @@ public void setActive(boolean _active) {} /** - * Initialisation ou reinitialisation des calques. - * @param _build Si true, les calques g\xE9om\xE9triques sont construits par d\xE9faut. + * Initialisation ou reinitialisation des calques contenus dans le panneau de visualisation. + * @param _build Si true, les calques g\xE9om\xE9triques sont construits par d\xE9faut, vides. Sinon, ils seront reconstruits par la + * proc\xE9dure de restitution du projet. */ public void initCalques(boolean _build) { removeAllCalqueDonnees(); @@ -123,6 +119,7 @@ buildSingLayerGroup(_build); buildModel1dLayerGroup(_build); buildImageGroup(); + buildBiefsLayerGroup(); installLayerActions(); } @@ -148,6 +145,13 @@ EbliActionInterface actDeleteLayer=new CalqueDeleteCalqueAction(getEditor(),this.getArbreCalqueModel()); this.getArbreCalqueModel().setActionDelete(actDeleteLayer); + + EbliActionInterface actNewBief=new EbliActionSimple(FudaaLib.getS("Nouveau bief"),FudaaResource.FUDAA.getIcon("ajouter"),null) { + public void actionPerformed(final ActionEvent _e) { + addBief(true); + } + }; + cqBiefs_.setActions(new EbliActionInterface[]{actNewBief}); } /** @@ -249,7 +253,51 @@ } _menu.add(contextTools_); } + + /** + * Mise en place du groupe des biefs. + */ + protected void buildBiefsLayerGroup() { + cqBiefs_ = new BGroupeCalque(); + cqBiefs_.setTitle(MdlResource.MDL.getString("Biefs")); + cqBiefs_.setName("gcBiefs"); + cqBiefs_.putClientProperty(Action.SHORT_DESCRIPTION, TrResource.getS("Les biefs")); + cqBiefs_.setDestructible(false); + addCalque(cqBiefs_); + } + + /** + * Mise en place d'un bief. + */ + protected void addBief(boolean _build) { + BGroupeCalque cqBief=new BGroupeCalque(); + cqBief.setTitleModifiable(true); + String name=BGroupeCalque.findUniqueChildName(cqBiefs_); + cqBief.setTitle(MdlResource.MDL.getString("Bief")); + cqBief.setName(name); + cqBief.putClientProperty(Action.SHORT_DESCRIPTION, TrResource.getS("Un bief")); + cqBief.setDestructible(true); + cqBiefs_.add(cqBief); + if (!_build) return; + + MdlLayer2dProfile cqProfile=new MdlLayer2dProfile(getEditor()); + cqProfile.setName(BGroupeCalque.findUniqueChildName(cqBief, cqProfile.getExtName())); + cqBief.add(cqProfile); + + MdlLayer1dAxe cqAxe=new MdlLayer1dAxe(getEditor()); + cqAxe.setName(BGroupeCalque.findUniqueChildName(cqBief, cqAxe.getExtName())); + cqBief.add(cqAxe); + + MdlLayer2dDirectionLine cqDirect=new MdlLayer2dDirectionLine(getEditor()); + cqDirect.setName(BGroupeCalque.findUniqueChildName(cqBief, cqDirect.getExtName())); + cqBief.add(cqDirect); + + MdlLayer2dConstraintLine cqConst=new MdlLayer2dConstraintLine(getEditor()); + cqConst.setName(BGroupeCalque.findUniqueChildName(cqBief, cqConst.getExtName())); + cqBief.add(cqConst); + } + /** * Mise a jour des actions. * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <emm...@us...> - 2008-12-15 16:28:59
|
Revision: 4304 http://fudaa.svn.sourceforge.net/fudaa/?rev=4304&view=rev Author: emmanuel_martin Date: 2008-12-15 16:28:55 +0000 (Mon, 15 Dec 2008) Log Message: ----------- Changement d'affichage des messages d'erreur ; suppression de plusieurs boutons ; correction du plantage sur le double clic ; am?\195?\169lioration de l'affichage des nombres ; correction d'un probl?\195?\168me de mise a jour de la courbe. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.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 2008-12-15 10:28:14 UTC (rev 4303) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZEbliCalquePanelController.java 2008-12-15 16:28:55 UTC (rev 4304) @@ -533,8 +533,8 @@ } } - public List getActions() { - final List actions = new ArrayList(); + public List<EbliActionInterface> getActions() { + final List<EbliActionInterface> actions = new ArrayList<EbliActionInterface>(); buildActions(); actions.addAll(Arrays.asList(selectedActionGroup_)); actions.add(null); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java 2008-12-15 10:28:14 UTC (rev 4303) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java 2008-12-15 16:28:55 UTC (rev 4304) @@ -7,8 +7,12 @@ */ package org.fudaa.fudaa.modeleur.modeleur1d; +import java.awt.Color; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import javax.swing.Action; import javax.swing.JComponent; import javax.swing.JDesktopPane; import javax.swing.event.InternalFrameAdapter; @@ -26,18 +30,22 @@ import org.fudaa.ebli.calque.ZSelectionEvent; import org.fudaa.ebli.calque.ZSelectionListener; import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; +import org.fudaa.ebli.commun.EbliActionInterface; +import org.fudaa.ebli.commun.EbliFormatter; +import org.fudaa.ebli.commun.EbliFormatterInterface; import org.fudaa.ebli.commun.EbliLib; import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.MdlImplementation; import com.memoire.bu.BuDesktop; +import com.memoire.bu.BuLabel; /** * Cette classe a la charge et la responsabilit\xE9 de g\xE9rer toutes les actions, * interactions et r\xE9actions de la fen\xEAtre 1d dans son ensemble. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class Controller1d extends InternalFrameAdapter implements ZSelectionListener, ListSelectionListener, CtuluListSelectionListener { @@ -47,6 +55,8 @@ private VueTableau vueTableau_; /** La vue d'un profil via une courbe. */ private VueCourbe vueCourbe_; + /** Un label pour afficher les erreurs. */ + private BuLabel vueError_; /** Le lien avec le reste de l'application. */ private MdlImplementation appli_; /** La frame contenant tous les widgets 1d. */ @@ -55,6 +65,8 @@ private boolean listenEventSelection_=true; /** L'adapter des donn\xE9es de la geometry en cours de manipulation. */ private DataGeometryAdapter dataGeomAdapter_; + /** Formater */ + private EbliFormatterInterface formater_=new EbliFormatter(); public Controller1d(MdlImplementation _appli, MdlFille1d _frame1d){ appli_=_appli; @@ -63,11 +75,14 @@ vueBief_=new VueBief(appli_, this); vueBief_.getScene().addSelectionListener(this); treeModel_=vueBief_.getArbreCalqueModel(); - dataGeomAdapter_=new DataGeometryAdapter(null, -1); + dataGeomAdapter_=new DataGeometryAdapter(this, null, -1); vueTableau_=new VueTableau(this, dataGeomAdapter_); vueTableau_.addSelectionListener(this); vueCourbe_=new VueCourbe(this, dataGeomAdapter_); vueCourbe_.addSelectionListener(this); + vueError_=new BuLabel(); + vueError_.setForeground(Color.RED); + vueError_.setText(""); } public VueBief getVueBief(){ @@ -79,7 +94,24 @@ public VueCourbe getVueCourbe(){ return vueCourbe_; } + public JComponent getVueError(){ + return vueError_; + } + public EbliFormatterInterface getFormater(){ + return formater_; + } + + // Gestion de l'affichage des erreurs. \\ + + public void showError(String _message){ + vueError_.setText(_message); + } + + public void clearError(){ + vueError_.setText(null); + } + // Gestion de l'arbre \\ /** Le model de l'arbre a afficher sur la droite de l'\xE9cran. */ @@ -115,7 +147,22 @@ BuDesktop buJ=null; if (j instanceof BuDesktop) buJ=(BuDesktop)j; - final List<?> l=EbliLib.updateToolButtons(vueBief_.getController().getActions(), buJ); + List<EbliActionInterface> actionAbs=vueBief_.getController().getActions(); + // Selection des actions + String[] tmpAction=new String[]{"RECTANGLE_SELECTION", "POLYGON_SELECTION", "RESTORE", "ZOOM", "ZOOM_ON_SELECTED", + "LAST_VIEW", "MOVE_VIEW", "CHANGE_REFERENCE", "NAVIGATE"}; + // info : Actions not kept : "CHOOSE_COLOR_PALET", "EDIT_LEGEND", "CONFIGURE", "INFOS", "TABLE" + HashSet<String> actionsKept=new HashSet<String>(); + for (int i=0; i<tmpAction.length; i++) + actionsKept.add(tmpAction[i]); + List<EbliActionInterface> actions=new ArrayList<EbliActionInterface>(); + for (int i=0; i<actionAbs.size(); i++) + if (actionAbs.get(i)==null) + actions.add(actionAbs.get(i)); + else if (actionsKept.contains(actionAbs.get(i).getValue(Action.ACTION_COMMAND_KEY))) + actions.add(actionAbs.get(i)); + // Construction des boutons + final List<?> l=EbliLib.updateToolButtons(actions, buJ); specificTools_=new JComponent[l.size()]; l.toArray(specificTools_); } @@ -132,44 +179,46 @@ * Changement de la selection dans le widget de bief. */ public void selectionChanged(ZSelectionEvent _evt) { + clearError(); ZScene scene=vueBief_.getScene(); int sceneIdSelected=scene.getSelectionHelper().getUniqueSelectedIdx(); - if(sceneIdSelected==-1) + boolean ok=true; // Indique si tout s'est bien pass\xE9. + if (sceneIdSelected==-1) // Aucune selection dataGeomAdapter_.setData(null, -1); else { int idSelected=scene.sceneId2LayerId(sceneIdSelected); - // Seulement en cas de changement de selection - if (idSelected!=dataGeomAdapter_.getIdxGeom()) { - // Extraction des diff\xE9rentes informations n\xE9c\xE9ssaires au changement de - // courbe \\ - ZCalqueAffichageDonneesInterface calque=scene.getLayerForId(sceneIdSelected); - if (calque.modeleDonnees() instanceof ZModeleLigneBriseeEditable) { - GISZoneCollectionLigneBrisee zone=((ZModeleLigneBriseeEditable)calque.modeleDonnees()).getGeomData(); - if (zone.getIndiceOf(GISAttributeConstants.NATURE)!=-1) { - if (zone.getValue(zone.getIndiceOf(GISAttributeConstants.NATURE), idSelected)==GISAttributeConstants.ATT_NATURE_PF) { - try { - dataGeomAdapter_.setData(zone, idSelected); - } - catch (IllegalArgumentException _exp) { - appli_.warn(FudaaLib.getS("Profil incorrect"), _exp.getMessage()); - } + // Extraction des diff\xE9rentes informations n\xE9c\xE9ssaires au changement de + // courbe \\ + ZCalqueAffichageDonneesInterface calque=scene.getLayerForId(sceneIdSelected); + if (calque.modeleDonnees() instanceof ZModeleLigneBriseeEditable) { + GISZoneCollectionLigneBrisee zone=((ZModeleLigneBriseeEditable)calque.modeleDonnees()).getGeomData(); + if (zone.getIndiceOf(GISAttributeConstants.NATURE)!=-1) { + if (zone.getValue(zone.getIndiceOf(GISAttributeConstants.NATURE), idSelected)==GISAttributeConstants.ATT_NATURE_PF) { + try { + dataGeomAdapter_.setData(zone, idSelected); } - else { - // On a pas selectionn\xE9 un profil, on annule la selection - dataGeomAdapter_.setData(null, -1); - scene.clearSelection(); + catch (IllegalArgumentException _exp) { + showError(_exp.getMessage()); } } else - // Il n'y a pas d'attribut Nature, on annule la selection - scene.clearSelection(); + // On a pas selectionn\xE9 un profil, on annule la selection + ok=false; } else - // Le type de model ne correspond pas, on annule la selection - scene.clearSelection(); + // Il n'y a pas d'attribut Nature, on annule la selection + ok=false; } + else + // Le type de model ne correspond pas, on annule la selection + ok=false; } + if(!ok) { + //dataGeomAdapter_.setData(null, -1); + scene.clearSelection(); + showError(FudaaLib.getS("Seuls les profils sont selectionnables.")); + } } /** Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java 2008-12-15 10:28:14 UTC (rev 4303) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java 2008-12-15 16:28:55 UTC (rev 4304) @@ -26,9 +26,11 @@ * inutils et en ajoutant une information d'abcisse curviligne. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ class DataGeometryAdapter implements DataGeometry { + /** Le controller, pour afficher des messages d'erreur. */ + private Controller1d controller_; private GISZoneCollectionLigneBrisee zone_; private int idxGeom_; private CtuluCollection z_; @@ -41,7 +43,10 @@ int idxRupture1_; int idxRupture2_; - public DataGeometryAdapter(GISZoneCollectionLigneBrisee _zone, int _idxGeom) throws IllegalArgumentException { + public DataGeometryAdapter(Controller1d _controller, GISZoneCollectionLigneBrisee _zone, int _idxGeom) throws IllegalArgumentException { + if(_controller==null) + throw new IllegalArgumentException("Controller1d ne doit pas \xEAtre null."); + controller_=_controller; setData(_zone, _idxGeom); } @@ -70,11 +75,11 @@ CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)zone_.getGeometry(idxGeom_)).getCoordinateSequence(); // Verifie qu'on a bien au minimum deux points. \\ if (seq.size()<2) - throw new IllegalArgumentException(FudaaLib.getS("La g\xE9ometrie doit avoir au minimum deux points.")); + throw new IllegalArgumentException(FudaaLib.getS("Le profil doit avoir au minimum deux points.")); // Verifie que deux points cons\xE9cutifs ne sont pas confondus. \\ for (int i=1; i<seq.size(); i++) if (seq.getX(i-1)==seq.getX(i)&&seq.getY(i-1)==seq.getY(i)) - throw new IllegalArgumentException(FudaaLib.getS("Au moins deux points dans la g\xE9om\xE9trie sont confondus.")); + throw new IllegalArgumentException(FudaaLib.getS("Au moins deux points dans le profil sont confondus.")); // Calcul des acbscisses curvilignes => hypoth\xE8se d'ordonnancement // correcte des points \\ double curvPre=0; @@ -139,7 +144,7 @@ else if (idxRupture2_==-1) idxRupture2_=idx-1; else - throw new IllegalArgumentException(FudaaLib.getS("Il y a plus que deux ruptures dans la g\xE9om\xE9trie.")); + throw new IllegalArgumentException(FudaaLib.getS("Il y a plus que deux ruptures dans le profil.")); } // Pr\xE9paration de l'it\xE9ration suivante coefDirecteur=newCoefDirecteur; @@ -193,12 +198,13 @@ } public void setCurv(int _idxPoint, double _value) { + controller_.clearError(); if(curv_==null) return; CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)zone_.getGeometry(idxGeom_)).getCoordinateSequence(); Coordinate[] coords=seq.toCoordinateArray(); if(_idxPoint==0||_idxPoint==seq.size()-1){ - System.out.println("Le d\xE9placement curviligne est points extr\xE9mit\xE9s n'est pour l'instant pas g\xE9r\xE9."); + controller_.showError(FudaaLib.getS("Le changement d'abscisse curviligne des extr\xE9mit\xE9s n'est pas g\xE9r\xE9 pour l'instant.")); return; } if(_value<0) @@ -241,20 +247,19 @@ // Mise a jour de la table des valeurs curvilignes if (_idxPoint!=0) curv_.set(_idxPoint, _value); - else { + else for (int i=1; i<curv_.size(); i++) curv_.set(i, curv_.get(i)-_value); - } + fireDataGeometryChanged(); } // Cas o\xF9 il y a d\xE9pacement d'un autre point => le signe de xa-xb va potentiellement chang\xE9 => cas interdit else - //TODO : ne rien faire - System.out.println("le point est d\xE9plac\xE9 au dela de ses points l'encadrants, mouvement impossible."); + controller_.showError(FudaaLib.getS("Il est interdit de d\xE9placer un point au dela des points l'encadrant.")); } else // Cas complexe : l'index est sur un point de rupture \\ // TODO : d\xE9placement sur l'\xE9llipse avec verification de non croisement des axes du profil - System.out.println("Le point selectionn\xE9 est un point de rupture, cas non g\xE9r\xE9 pour l'instant."); + controller_.showError(FudaaLib.getS("Le changement d'abscisse curviligne des points de ruptures n'est pas g\xE9r\xE9 pour l'instant.")); } public void setZ(int _idxPoint, double _value) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java 2008-12-15 10:28:14 UTC (rev 4303) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java 2008-12-15 16:28:55 UTC (rev 4304) @@ -21,6 +21,8 @@ import org.fudaa.fudaa.modeleur.MdlImplementation; import org.fudaa.fudaa.sig.FSigResource; +import com.memoire.bu.BuBorderLayout; + /** * La fenetre interne vue 2D des donn\xE9es du modeleur. Elle construit le composant arbre de * calques {@link org.fudaa.ebli.calque.BArbreCalque}. La plupart des traitements est @@ -45,7 +47,9 @@ setClosable(true); controller_=new Controller1d(_appli, this); // Construction des vues contenues dans la fen\xEAtre. \\ - add(new JSplitPane(JSplitPane.VERTICAL_SPLIT, controller_.getVueBief(), new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, controller_.getVueTableau(), controller_.getVueCourbe()))); + setLayout(new BuBorderLayout()); + add(new JSplitPane(JSplitPane.VERTICAL_SPLIT, controller_.getVueBief(), new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, controller_.getVueTableau(), controller_.getVueCourbe())), BuBorderLayout.CENTER); + add(controller_.getVueError(), BuBorderLayout.SOUTH); setPreferredSize(new Dimension(500, 500)); setSize(getPreferredSize()); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java 2008-12-15 10:28:14 UTC (rev 4303) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java 2008-12-15 16:28:55 UTC (rev 4304) @@ -15,6 +15,7 @@ import org.fudaa.ebli.calque.BGroupeCalque; import org.fudaa.ebli.calque.ZEbliCalquesPanel; import org.fudaa.ebli.calque.edition.ZCalqueLigneBriseeEditable; +import org.fudaa.ebli.calque.edition.ZEditorDefault; import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; import org.fudaa.fudaa.modeleur.MdlImplementation; import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine; @@ -28,7 +29,7 @@ * \xE9dit\xE9 via la vue par graphe 1d. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class VueBief extends ZEbliCalquesPanel { @@ -46,6 +47,12 @@ addCalque(duplicateCalquesBiefs(impl_.get2dFrame().getVisuPanel().getArbreCalqueModel().getRootCalque().getCalqueParNom("gcBiefs")), true); setPreferredSize(new Dimension(200, 200)); setSize(getPreferredSize()); + // Simplement pour bloquer l'\xE9dition lors d'un double clic + getController().getCqSelectionI().setEditor(new ZEditorDefault(this) { + public String edit() { + return null; + } + }); } /** Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java 2008-12-15 10:28:14 UTC (rev 4303) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java 2008-12-15 16:28:55 UTC (rev 4304) @@ -9,15 +9,24 @@ import java.awt.Color; import java.awt.Dimension; +import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import javax.swing.AbstractButton; +import javax.swing.Action; import javax.swing.JComponent; import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluListSelectionListener; +import org.fudaa.ctulu.CtuluNumberFormatDefault; import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.ebli.commun.EbliComponentFactory; +import org.fudaa.ebli.commun.EbliLib; import org.fudaa.ebli.courbe.EGAxeHorizontal; import org.fudaa.ebli.courbe.EGAxeVertical; import org.fudaa.ebli.courbe.EGCourbeSimple; @@ -39,7 +48,7 @@ * selectionn\xE9 dans la vue du bief). * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class VueCourbe extends BuPanel { @@ -59,12 +68,12 @@ } public void dataGeometryChanged() { - grapheVue_.fullRepaint(); + grapheVue_.structureChanged(); } public void dataGeometryNewGeom(){ + grapheVue_.structureChanged(); grapheVue_.restore(); - grapheVue_.fullRepaint(); } /* (non-Javadoc) @@ -220,6 +229,9 @@ axeY.setGrille(new TraceLigneModel(TraceLigne.LISSE, 1, Color.LIGHT_GRAY)); axeY.setTitre(FudaaLib.getS("Ordonn\xE9e : z")); axeY.setUnite(FudaaLib.getS("m\xE8tre")); + DecimalFormat df=CtuluLib.getDecimalFormat(); + df.setMaximumFractionDigits(2); + axeY.setSpecificFormat(new CtuluNumberFormatDefault(df)); axeY.setBounds(0, 50); axeY.setLineColor(Color.BLACK); // Cr\xE9ation de la courbe \\ @@ -230,15 +242,25 @@ // Cr\xE9ation du panel contenant l'ensemble des courbes \\ containerCourbe_ = new EGFillePanel(grapheVue_); setLayout(new BuBorderLayout()); - + // G\xE9n\xE9ration des boutons d'int\xE9raction. \\ BuSpecificBar speBar=new BuSpecificBar(); EbliActionInterface[] actionAbs=containerCourbe_.getSpecificActions(); - JComponent[] actions=new JComponent[actionAbs.length]; - for(int i=0;i<actionAbs.length;i++){ - if(actionAbs[i]!=null) - actions[i]=actionAbs[i].buildToolButton(EbliComponentFactory.INSTANCE); - } - speBar.addTools(actions); + EbliLib.updateMapKeyStroke(this, actionAbs); + // Selection des actions a concerver. + String[] tmpAction = {"SELECT", "RESTORE", "AUTO_REST", "CONFIGURE_REPERE", "ZOOM", "SUIVI", "MOVE_POINT" , "CONFIGURE", "INFOS", "TABLE"}; + // info : Actions not kept : "SIMPLIFY", "NEW_CURVE" + HashSet<String> actionsKept = new HashSet<String>();; + for(int i=0;i<tmpAction.length;i++) + actionsKept.add(tmpAction[i]); + // Construction des boutons + List<JComponent> actions=new ArrayList<JComponent>(); + for(int i=0;i<actionAbs.length;i++) + if(actionAbs[i]!=null && actionsKept.contains(actionAbs[i].getValue(Action.ACTION_COMMAND_KEY))){ + AbstractButton button = actionAbs[i].buildToolButton(EbliComponentFactory.INSTANCE); + button.setText(""); + actions.add(button); + } + speBar.addTools(actions.toArray(new JComponent[0])); add(speBar, BuBorderLayout.NORTH); add(containerCourbe_, BuBorderLayout.CENTER); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java 2008-12-15 10:28:14 UTC (rev 4303) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java 2008-12-15 16:28:55 UTC (rev 4304) @@ -13,6 +13,8 @@ import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; +import org.fudaa.ctulu.gui.CtuluTable; +import org.fudaa.ebli.commun.EbliFormatterInterface; import org.fudaa.fudaa.commun.FudaaLib; import com.memoire.bu.BuBorderLayout; @@ -26,7 +28,7 @@ * du point. * * @author Emmanuel MARTIN - * @version $Id:$ + * @version $Id$ */ public class VueTableau extends BuPanel { @@ -35,10 +37,12 @@ */ protected class TableGeomModel extends DefaultTableModel implements DataGeometryListener { - private DataGeometry data_; + protected DataGeometry data_; + protected EbliFormatterInterface formater_; - public TableGeomModel(DataGeometry _data){ + public TableGeomModel(DataGeometry _data, EbliFormatterInterface _formater){ super(new String[]{FudaaLib.getS("Abs curv"), FudaaLib.getS("Z")}, 0); + formater_=_formater; if(_data==null) throw new IllegalArgumentException("_data ne doit pas \xEAtre null."); data_=_data; @@ -66,9 +70,15 @@ public Object getValueAt(int rowIndex, int columnIndex) { if(columnIndex==0) - return data_.getCurv(rowIndex); + if(formater_!=null) + return formater_.getXYFormatter().format(data_.getCurv(rowIndex)); + else + return data_.getCurv(rowIndex); else - return data_.getZ(rowIndex); + if(formater_!=null) + return formater_.getXYFormatter().format(data_.getZ(rowIndex)); + else + return data_.getZ(rowIndex); } public void setValueAt(Object value, int rowIndex, int columnIndex) { @@ -90,8 +100,8 @@ public VueTableau(Controller1d _controller, DataGeometry _data){ controller_=_controller; setLayout(new BuBorderLayout(2, 2)); - modelTable_=new TableGeomModel(_data); - table_=new JTable(modelTable_); + modelTable_=new TableGeomModel(_data, controller_.getFormater()); + table_=new CtuluTable(modelTable_); add(new BuScrollPane(table_)); setPreferredSize(new Dimension(200, 200)); setSize(getPreferredSize()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |