|
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.
|