From: <bma...@us...> - 2011-09-26 13:41:28
|
Revision: 6446 http://fudaa.svn.sourceforge.net/fudaa/?rev=6446&view=rev Author: bmarchan Date: 2011-09-26 13:41:16 +0000 (Mon, 26 Sep 2011) Log Message: ----------- Add : Lecture/ecriture d'un transect Modified Paths: -------------- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivProject.java Added Paths: ----------- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivImportTransectAction.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectFileFormat.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectReader.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectWriter.java trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivTransect.java Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java 2011-09-26 07:06:09 UTC (rev 6445) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivImplementation.java 2011-09-26 13:41:16 UTC (rev 6446) @@ -38,6 +38,7 @@ import org.fudaa.fudaa.piv.action.PivComputeParamAction; import org.fudaa.fudaa.piv.action.PivImportGRPAction; import org.fudaa.fudaa.piv.action.PivImportGridAction; +import org.fudaa.fudaa.piv.action.PivImportTransectAction; import org.fudaa.fudaa.piv.action.PivOrthoLaunchAction; import org.fudaa.fudaa.piv.action.PivOrthoParamAction; import org.fudaa.fudaa.piv.action.PivOrthoVerifyGRPAction; @@ -144,6 +145,20 @@ } /** + * Une classe de filtrage des fichiers bathy.dat, utilis\xE9e lors de l'import + * par boite de dialogue. + */ + public static class PivTransectFileFilter extends FileFilter { + public boolean accept(File _f) { + return _f != null && (_f.isDirectory() || _f.getName().endsWith(".dat")); + } + + public String getDescription() { + return PivResource.getS("Fichier bathy (*.dat)"); + } + } + + /** * Constructeur. */ public PivImplementation() { @@ -199,6 +214,7 @@ setEnabledForAction("PIV_PARAM", bprjOpen && bprjHasTransfImg); setEnabledForAction("PIV_GRID", bprjOpen && bprjHasTransfImg); setEnabledForAction("IMPORT_GRID", bprjOpen && bprjHasTransfImg); + setEnabledForAction("IMPORT_TRANSECT", bprjOpen && bprjHasTransfImg); setEnabledForAction("PIV_COMPUTE", bprjOpen); setEnabledForAction("COMPUTE_AVERAGE", bprjOpen); setEnabledForAction("RESULTS_SHOW_VELOCITIES", bprjOpen && project.getVelResults()!=null); @@ -251,6 +267,7 @@ * Interne : Appel\xE9 quand une action est d\xE9clench\xE9e. * @param _evt L'evenement d\xE9clench\xE9. */ + @Override public void actionPerformed(ActionEvent _evt) { final String action = _evt.getActionCommand(); if (action == null) { @@ -297,6 +314,7 @@ * Confirmation de la sortie avec ou sans sauvegarde. * @return True s'il y a eu confirmation. */ + @Override public boolean confirmExit() { if (!FudaaStartupExitPreferencesPanel.isExitConfirmed() || question(BuResource.BU.getString("Quitter"), BuResource.BU @@ -417,6 +435,7 @@ /** * Ferme le projet, puis la fenetre 2D associ\xE9e. */ + @Override public void close() { if (project!=null) project.dispose(); @@ -559,6 +578,7 @@ * Methode surcharg\xE9e pour les panneau de pr\xE9f\xE9rence. * @param _frAddTab La liste contenant tous les panneaux de pr\xE9f\xE9rences. */ + @Override protected void buildPreferences(final List _frAddTab) { _frAddTab.add(new BuUserPreferencesPanel(this)); _frAddTab.add(new BuLanguagePreferencesPanel(this)); @@ -591,6 +611,7 @@ /** * Mise en place de l'application avant affichage. */ + @Override public void init() { super.init(); // Pour forcer l'activation du command listener. @@ -677,6 +698,7 @@ BuMenu mnImport = (BuMenu) getMainMenuBar().getMenu("IMPORTER"); mnImport.add(new PivImportGRPAction((this))); mnImport.add(new PivImportGridAction((this))); + mnImport.add(new PivImportTransectAction((this))); } /** @@ -732,6 +754,7 @@ /** * D\xE9marre l'application. */ + @Override public void start() { super.start(); super.addFrameListLeft(); Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivImportTransectAction.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivImportTransectAction.java (rev 0) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivImportTransectAction.java 2011-09-26 13:41:16 UTC (rev 6446) @@ -0,0 +1,81 @@ +package org.fudaa.fudaa.piv.action; + +import java.awt.event.ActionEvent; +import java.io.File; +import javax.swing.JFileChooser; +import org.fudaa.ctulu.CtuluIOOperationSynthese; +import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.fudaa.piv.PivImplementation; +import org.fudaa.fudaa.piv.PivResource; +import org.fudaa.fudaa.piv.PivVisuPanel; +import org.fudaa.fudaa.piv.io.PivTransectFileFormat; +import org.fudaa.fudaa.piv.metier.PivTransect; + +/** + * Une action pour importer un transect. + * + * @author Bertrand Marchand (mar...@de...) + * @version $Id$ + */ +public class PivImportTransectAction extends EbliActionSimple { + PivImplementation impl; + JFileChooser fcTransect; + + /** + * Constructeur + * @param _impl L'implementation. + */ + public PivImportTransectAction(PivImplementation _impl) { + super(PivResource.getS("Import d'un transect..."), null, "IMPORT_TRANSECT"); + + impl=_impl; + setEnabled(false); + } + + /** + * Affiche une boite de dialogue pour permettre de selectionner le fichier + * d'import. + * @param _e L'evenement pour l'action. + */ + public void actionPerformed(final ActionEvent _e) { + if (!isValide()) { + return; + } + + // Selection du fichier + if (fcTransect==null) + fcTransect = new JFileChooser(); + fcTransect.setAcceptAllFileFilterUsed(true); + fcTransect.setFileFilter(new PivImplementation.PivTransectFileFilter()); + fcTransect.setMultiSelectionEnabled(false); + fcTransect.setDialogTitle(PivResource.getS("S\xE9lection d'un fichier transect")); + if (fcTransect.showOpenDialog(impl.getFrame()) == JFileChooser.CANCEL_OPTION) { + return; + } + File transectFile=fcTransect.getSelectedFile(); + + FileReadOperationAbstract reader=PivTransectFileFormat.getInstance().createReader(); + CtuluIOOperationSynthese ret=reader.read(transectFile, null); + if (ret.getAnalyze().containsErrorOrFatalError()) { + impl.error(ret.getAnalyze().getResume()); + return; + } + + PivTransect trans=(PivTransect)ret.getSource(); + impl.getCurrentProject().setTransect(trans); + + impl.get2dFrame().getVisuPanel().setViewMode(PivVisuPanel.MODE_REAL_VIEW); + } + + /** + * @return true Si toutes les donn\xE9es sont pr\xE9sentes pour un lancement. + */ + public boolean isValide() { + return true; + } + + public String getEnableCondition() { + return PivResource.getS("Il doit exister au moins une image transform\xE9e"); + } +} Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivImportTransectAction.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectFileFormat.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectFileFormat.java (rev 0) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectFileFormat.java 2011-09-26 13:41:16 UTC (rev 6446) @@ -0,0 +1,51 @@ +package org.fudaa.fudaa.piv.io; + +import org.fudaa.ctulu.fileformat.FileFormatUnique; +import org.fudaa.ctulu.fileformat.FileReadOperationAbstract; +import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract; +import org.fudaa.fudaa.piv.PivResource; + +/** + * La classe d\xE9crivant le format d'un fichier bathy.dat contenant + * un transect. + * + * @author Bertrand Marchand (mar...@de...) + * @version $Id$ + */ +public class PivTransectFileFormat extends FileFormatUnique { + + private PivTransectFileFormat() { + super(1); + nom_ = PivResource.getS("Piv transect"); + description_ = PivResource.getS("Fichier contenant un transect"); + extensions_=new String[]{"dat"}; + } + static final PivTransectFileFormat INSTANCE = new PivTransectFileFormat(); + + /** + * Retourne le singleton pour instancier un reader ou un writer. + * @return Le singleton + */ + public static PivTransectFileFormat getInstance() { + return INSTANCE; + } + + /** + * Cr\xE9ation d'un reader. + * @return Le reader + */ + @Override + public FileReadOperationAbstract createReader() { + return new PivTransectReader(); + } + + /** + * Cr\xE9ation d'un writer. + * @return Le writer + */ + @Override + public FileWriteOperationAbstract createWriter() { + return new PivTransectWriter(); + } + +} Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectFileFormat.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectReader.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectReader.java (rev 0) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectReader.java 2011-09-26 13:41:16 UTC (rev 6446) @@ -0,0 +1,117 @@ +/** + * @creation 2002-11-21 + * @modification $Date: 2007/05/04 13:47:27 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.fudaa.piv.io; + +import java.io.EOFException; +import java.io.File; +import java.io.IOException; + +import org.fudaa.ctulu.CtuluActivity; +import org.fudaa.dodico.fortran.FileOpReadCharSimpleAbstract; + +import org.fudaa.ebli.geometrie.GrPolyligne; +import org.fudaa.fudaa.piv.PivResource; +import org.fudaa.fudaa.piv.metier.PivTransect; + +/** + * Un lecteur pour les fichiers de bathy. + * + * @author Bertrand Marchand (mar...@de...) + * @version $Id$ + */ +public class PivTransectReader extends FileOpReadCharSimpleAbstract implements CtuluActivity { + + /** Drapeau d'interruption */ + boolean bstop_; + /** Nb d'octets du fichier a lire pour stat sur pourcentage effectu\xE9 */ + int nbOctets; + + /** + * Constructeur. + */ + public PivTransectReader() { + } + + /** + * Lit les points et retourne le transect. + * @return Le transect + */ + @Override + protected PivTransect internalRead() { + return readParams(); + } + + @Override + protected void processFile(final File _f) { + nbOctets = (int) _f.length(); + } + + /** + * Utilise FortranReader ( donc un buffer). + * + * @return les infos non bloquantes. + */ + private synchronized PivTransect readParams() { + PivTransect ret=null; + GrPolyligne pl=new GrPolyligne(); + + if (super.in_ == null) { + analyze_.addErrorFromFile(PivResource.getS("Flux d'entr\xE9e non trouv\xE9"), 0); + return null; + } + + try { + int lu=0; + boolean afficheAvance = false; + if ((progress_ != null) && (nbOctets > 0)) { + afficheAvance = true; + progress_.setProgression(0); + } + int pourcentageEnCours = 0; + + in_.setJumpBlankLine(true); + + // Boucle jusque fin de fichier. Exception EOF si fin. + while (true) { + in_.readFields(); + pl.sommets_.ajoute(in_.doubleField(0),in_.doubleField(1),in_.doubleField(2)); + lu+=26; // Si le formattage en fortran + + if ((afficheAvance) && ((lu * 100 / nbOctets) >= (pourcentageEnCours + 20))) { + pourcentageEnCours += 20; + progress_.setProgression(pourcentageEnCours); + } + } + } + // Sortie normale + catch (final EOFException e) { + ret=new PivTransect(); + ret.setTransect(pl); + } + catch (final IOException e) { + analyze_.addErrorFromFile(PivResource.getS("Une erreur de lecture s'est produite"), in_.getLineNumber()); + } + catch (final NumberFormatException e) { + analyze_.addErrorFromFile(PivResource.getS("Une erreur de lecture s'est produite"), in_.getLineNumber()); + } + finally { + if (progress_ != null) { + progress_.setProgression(100); + } + return ret; + } + } + + /** + * Interruption asynchrone de l'activit\xE9 de lecture. + */ + @Override + public void stop() { + bstop_ = true; + } +} Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectReader.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectWriter.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectWriter.java (rev 0) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectWriter.java 2011-09-26 13:41:16 UTC (rev 6446) @@ -0,0 +1,45 @@ +package org.fudaa.fudaa.piv.io; + +import java.io.PrintWriter; + +import org.fudaa.dodico.fortran.FileOpWriterCharSimpleAbstract; +import org.fudaa.ebli.geometrie.GrPolyligne; +import org.fudaa.fudaa.piv.metier.PivTransect; + +/** + * Une classe pour ecrire un transect sur fichier. + * + * @author Bertrand Marchand (mar...@de...) + * @version $Id$ + */ +public class PivTransectWriter extends FileOpWriterCharSimpleAbstract { + + /** + * Ecrit les param\xE8tres d'orthorectification. + * param _o Un PivTransect. + */ + @Override + protected void internalWrite(final Object _o) { + if (!(_o instanceof PivTransect)) { + donneesInvalides(_o); + return; + } + + GrPolyligne pl = ((PivTransect)_o).getTransect(); + + final PrintWriter writer = new PrintWriter(out_); + + try { + + // Boucle sur tous les points, ecriture des coordonn\xE9es en entier (images) + for (int i=0; i<pl.nombre(); i++) { + writer.println((double)pl.sommet(i).x_+" "+ + (double)pl.sommet(i).y_+" "+(double)pl.sommet(i).z_); + } + + } + catch (final Exception _evt) { + analyze_.manageException(_evt); + } + } +} Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivTransectWriter.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivProject.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivProject.java 2011-09-26 07:06:09 UTC (rev 6445) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivProject.java 2011-09-26 13:41:16 UTC (rev 6446) @@ -24,6 +24,7 @@ import org.fudaa.fudaa.piv.io.PivHFileFormat; import org.fudaa.fudaa.piv.io.PivImgRefFileFormat; import org.fudaa.fudaa.piv.io.PivParamFileFormat; +import org.fudaa.fudaa.piv.io.PivTransectFileFormat; /** * Le projet contenant toutes les donn\xE9es. Chauqe projet peut \xEAtre sauv\xE9/relu @@ -54,6 +55,8 @@ protected PivCntGrid cntGrid; /** La grille de calcul */ protected PivGrid computeGrid; + /** Un transect pour le calcul de d\xE9bits */ + protected PivTransect transect; /** Les r\xE9sultats de vitesses */ protected PivVelResults velResults; /** La taille des images transform\xE9es */ @@ -457,6 +460,14 @@ CtuluIOOperationSynthese ret=reader.read(velFile, null); velResults=(PivVelResults)ret.getSource(); } + + // Un transect + File transectFile=new File(outputDir,"bathy.dat"); + if (transectFile.exists()) { + FileReadOperationAbstract reader=PivTransectFileFormat.getInstance().createReader(); + CtuluIOOperationSynthese ret=reader.read(transectFile, null); + transect=(PivTransect)ret.getSource(); + } FuLog.trace("*** Chargement de "+rootPath+" ***"); if (orthoPoints!=null) { @@ -495,6 +506,12 @@ else { FuLog.trace("Pas de r\xE9sultats."); } + if (transect!=null) { + FuLog.trace("Transect charg\xE9"); + } + else { + FuLog.trace("Pas de transect."); + } if (hasPgmImages()) { FuLog.trace("Images reconditionn\xE9es : "+getPgmImageFiles().length+" images"); } @@ -559,6 +576,13 @@ CtuluIOOperationSynthese ret=writer.write(computeGrid, gridFile, null); } + // Un transect + if (transect!=null) { + File transectFile=new File(outputDir,"bathy.dat"); + FileWriteOperationAbstract writer=PivTransectFileFormat.getInstance().createWriter(); + CtuluIOOperationSynthese ret=writer.write(transect, transectFile, null); + } + isModified=false; } @@ -664,6 +688,24 @@ isModified=true; fireProjectStateChanged("cntGrid"); } + + /** + * Definit un transect pour le calcul de d\xE9bit. + * @param _trans Le transect. <tt>null</tt> est autoris\xE9. + */ + public void setTransect(PivTransect _trans) { + transect=_trans; + isModified=true; + fireProjectStateChanged("transect"); + } + + /** + * Retourne le transect pour le calcul de d\xE9bit. + * @return Le transect ou <tt>null</tt> s'il n'a pas \xE9t\xE9 d\xE9fini. + */ + public PivTransect getTransect() { + return transect; + } /** * Retourne les r\xE9sultats. Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivTransect.java =================================================================== --- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivTransect.java (rev 0) +++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivTransect.java 2011-09-26 13:41:16 UTC (rev 6446) @@ -0,0 +1,31 @@ +package org.fudaa.fudaa.piv.metier; + +import org.fudaa.ebli.geometrie.GrPolyligne; + +/** + * Une classe permettant de stocker les points d'un transect. Un transect est une + * droite constitu\xE9e de plusieurs points en X,Y,Z. + * + * @author Bertrand Marchand (mar...@de...) + */ +public class PivTransect { + /** La droite du transect */ + protected GrPolyligne transect; + + + /** + * Retourne la g\xE9om\xE9trie du transect. + * @return Le transect + */ + public GrPolyligne getTransect() { + return transect; + } + + /** + * Definit la g\xE9om\xE9trie du transect + * @param _transect Le transect + */ + public void setTransect(GrPolyligne _transect) { + this.transect = _transect; + } +} Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivTransect.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. |