|
From: <bma...@us...> - 2011-11-18 16:16:02
|
Revision: 6682
http://fudaa.svn.sourceforge.net/fudaa/?rev=6682&view=rev
Author: bmarchan
Date: 2011-11-18 16:15:51 +0000 (Fri, 18 Nov 2011)
Log Message:
-----------
Add : Calcul de moyenne partielle de vitesses et affichage.
Modified Paths:
--------------
trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeAverageAction.java
trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivExeLauncher.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/PivSelectInstantVelResultsPanel.java
Added: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivSelectInstantVelResultsPanel.java
===================================================================
--- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivSelectInstantVelResultsPanel.java (rev 0)
+++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivSelectInstantVelResultsPanel.java 2011-11-18 16:15:51 UTC (rev 6682)
@@ -0,0 +1,119 @@
+/*
+ * @creation 18 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.piv;
+
+import java.awt.Dimension;
+
+import javax.swing.JLabel;
+
+import org.fudaa.ctulu.CtuluUI;
+import org.fudaa.ctulu.gui.CtuluDialogPanel;
+import org.fudaa.ctulu.gui.CtuluListEditorModel;
+import org.fudaa.ctulu.gui.CtuluListEditorPanel;
+
+import com.memoire.bu.BuVerticalLayout;
+
+/**
+ * Un panneau pour s\xE9lectionner les r\xE9sultats utilis\xE9s pour faire la moyenne des vitesses.
+ * Les resultats selectionn\xE9s sont sauv\xE9s dans le projet.
+ *
+ * @author mar...@de...
+ * @version $Id$
+ */
+public class PivSelectInstantVelResultsPanel extends CtuluDialogPanel {
+
+ /** Le mod\xE8le pour la liste des resultats */
+ private CtuluListEditorModel mdResults_;
+ /** La liste des r\xE9sultats dans l'ordre */
+ private CtuluListEditorPanel pnResults_;
+
+ /**
+ * Constructeur.
+ * @param _ui Le parent pour la boite de dialogue.
+ */
+ public PivSelectInstantVelResultsPanel(CtuluUI _ui) {
+
+ setLayout(new BuVerticalLayout(5, true, true));
+
+ // Label r\xE9sultats
+ add(new JLabel(PivResource.getS("Liste des r\xE9sultats"),JLabel.LEFT));
+
+ // Liste des r\xE9sultats
+ mdResults_=new CtuluListEditorModel(false) {
+ @Override
+ public boolean isCellEditable(int _rowIndex, int _columnIndex) {
+ return false;
+ }
+ @Override
+ public Object createNewObject() {
+ return null;
+ }
+ };
+
+ pnResults_ = new CtuluListEditorPanel(mdResults_, false, false, false, false, false);
+
+ setPreferredSize(new Dimension(300,200));
+
+ add(pnResults_);
+ }
+
+ @Override
+ public void setValue(Object _usedResults) {
+ if (!(_usedResults instanceof boolean[]))
+ throw new IllegalArgumentException("bad type parameter");
+ setSelectedResults((boolean[])_usedResults);
+ }
+
+ @Override
+ public boolean[] getValue() {
+ return getSelectedResults();
+ }
+
+ /**
+ * D\xE9finit les resultats s\xE9lectionn\xE9s.
+ * @param _tool L'utilitaire
+ */
+ public void setSelectedResults(boolean[] _usedResults) {
+ if (_usedResults==null) return;
+
+ String[] values=new String[_usedResults.length];
+ for (int i=0; i<_usedResults.length; i++) {
+ values[i]=PivResource.getS("R\xE9sultat : {0}", (i+1));
+ }
+
+ mdResults_.setData(values);
+
+ for (int i=0; i<_usedResults.length; i++) {
+ if (_usedResults[i])
+ pnResults_.getTable().getSelectionModel().addSelectionInterval(i, i);
+ }
+
+ }
+
+ /**
+ * @return Les r\xE9sultats selectionn\xE9s.
+ */
+ public boolean[] getSelectedResults() {
+ boolean[] idSels=new boolean[mdResults_.getRowCount()];
+ int[] sel=pnResults_.getTable().getSelectedRows();
+ for (int i : sel) {
+ idSels[i]=true;
+ }
+
+ return idSels;
+ }
+
+ @Override
+ public boolean isDataValid() {
+ if (pnResults_.getTable().getSelectedRowCount()==0) {
+ setErrorText(PivResource.getS("Vous devez s\xE9lectionner 1 r\xE9sultat au moins"));
+ return false;
+ }
+ return true;
+ }
+}
Property changes on: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/PivSelectInstantVelResultsPanel.java
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeAverageAction.java
===================================================================
--- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeAverageAction.java 2011-11-18 16:01:46 UTC (rev 6681)
+++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/action/PivComputeAverageAction.java 2011-11-18 16:15:51 UTC (rev 6682)
@@ -18,6 +18,7 @@
import org.fudaa.fudaa.piv.PivPreferences;
import org.fudaa.fudaa.piv.PivProgressionPanel;
import org.fudaa.fudaa.piv.PivResource;
+import org.fudaa.fudaa.piv.PivSelectInstantVelResultsPanel;
import org.fudaa.fudaa.piv.PivVisuPanel;
import org.fudaa.fudaa.piv.io.PivExeLauncher;
@@ -37,7 +38,7 @@
* @param _impl L'implementation.
*/
public PivComputeAverageAction(PivImplementation _impl) {
- super(PivResource.getS("Filtrage/moyennation des vitesses instantan\xE9es"), null, "COMPUTE_AVERAGE");
+ super(PivResource.getS("Filtrage/moyennation des vitesses instantan\xE9es..."), null, "COMPUTE_AVERAGE");
impl=_impl;
setEnabled(false);
@@ -62,6 +63,14 @@
PivExeLauncher.instance().setExePath(new File(PivPreferences.PIV.getStringProperty(PivPreferences.PIV_EXE_PATH)));
}
}
+
+ PivSelectInstantVelResultsPanel pn=new PivSelectInstantVelResultsPanel(impl);
+ pn.setSelectedResults(impl.getCurrentProject().getUsedInstantVelResults());
+ if (!pn.afficheModaleOk(impl.getFrame(), PivResource.getS("S\xE9lection des r\xE9sultats instantan\xE9s"), CtuluDialog.OK_CANCEL_OPTION)) {
+ return;
+ }
+
+ impl.getCurrentProject().setUsedInstantVelResults(pn.getSelectedResults());
// La tache a ex\xE9cuter.
CtuluTaskOperationGUI r=new CtuluTaskOperationGUI(impl, PivResource.getS("Filtrage/moyennation des vitesses instantan\xE9es")) {
Modified: trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivExeLauncher.java
===================================================================
--- trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivExeLauncher.java 2011-11-18 16:01:46 UTC (rev 6681)
+++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/io/PivExeLauncher.java 2011-11-18 16:15:51 UTC (rev 6682)
@@ -29,7 +29,8 @@
/**
* Une classe pour lancer les executables externes. Les exe sont sous la forme
* d'un script ou directement d'un executable. La plupart des exes sont lanc\xE9s
- * dans des threads s\xE9par\xE9s.
+ * dans des threads s\xE9par\xE9s. Ils s'executent pour la plupart directement dans
+ * le repertoire temporaire du projet.
*
* @author Bertrand Marchand (mar...@de...)
* @version $Id$
@@ -569,8 +570,9 @@
}
/**
- * Lance le filtrage des vitesses et leur restitution dans l'espace r\xE9el.
- * Le filtrage se fait dans le r\xE9pertoire exe avant copie des fichiers.
+ * Lance le filtrage des vitesses et leur restitution dans l'espace r\xE9el, en tenant compte des resultats
+ * instantan\xE9s s\xE9lectionn\xE9s.
+ * Le filtrage est fait dans le r\xE9pertoire projet.
*
* @param _ana L'analyse pour la tache ex\xE9cut\xE9e.
* @param _prj Le projet.
@@ -580,13 +582,10 @@
*/
public boolean launchFilterVelocities(CtuluAnalyze _ana, PivProject _prj, CtuluTaskOperationGUI _task) {
File prjRoot=_prj.getRoot();
+ File prjOutputs=new File(prjRoot,OUTPUT_DIR);
File prjVelFlt=new File(prjRoot,VEL_FILTER_DIR);
File prjVelRaw=new File(prjRoot,VEL_RAW_DIR);
- File exeOutputs=new File(exePath,OUTPUT_DIR);
- File exeVelRaw=new File(exePath,VEL_RAW_DIR);
- File exeVelFlt=new File(exePath,VEL_FILTER_DIR);
-
// Nettoyage eventuel du repertoire des r\xE9sultats.
prjVelFlt.mkdir();
for (File f : prjVelFlt.listFiles()) f.delete();
@@ -598,28 +597,18 @@
_task.setProgression(0);
}
- createExeDirs();
-
- // Copie des fichiers r\xE9sultat sur le r\xE9pertoire exe
- for (File f : prjVelRaw.listFiles())
- copyFile(prjVelRaw, exeVelRaw, f.getName());
-
try {
// Cr\xE9ation du fichier contenant la liste des fichiers piv.dat obtenus par calcul.
- PrintWriter out=new PrintWriter(new File(exeOutputs,"list_avg.dat"));
- for (File f : exeVelRaw.listFiles()) {
- out.println(f.getName());
- }
- out.close();
+ _prj.saveUsedInstantVelResults();
// PIV_param.dat
- File paramFile=new File(exeOutputs, "PIV_param.dat");
+ File paramFile=new File(prjOutputs, "PIV_param.dat");
FileWriteOperationAbstract writer=PivParamFileFormat.getInstance().createWriter();
Object[] params=new Object[]{_prj.getComputeParameters(), _prj.getFlowParameters(), _prj.getTransfImageSize()};
CtuluIOOperationSynthese ret=writer.write(params, paramFile, null);
// img_ref.dat
- File imgRefFile = new File(exeOutputs, "img_ref.dat");
+ File imgRefFile = new File(prjOutputs, "img_ref.dat");
writer = PivImgRefFileFormat.getInstance().createWriter();
params=new Object[]{_prj.getOrthoParameters(),_prj.getSrcImageSize()};
ret=writer.write(params, imgRefFile, _task);
@@ -627,7 +616,7 @@
_task.setProgression(30);
- String outs = FuLib.runProgram(new String[]{exePath+File.separator+EXES[6] + EXE_EXT}, exePath);
+ String outs = FuLib.runProgram(new String[]{exePath+File.separator+EXES[6] + EXE_EXT}, prjRoot);
if (!outs.trim().equals("")) {
_ana.addError(PivResource.getS("Erreur de filtrage des vitesses:\n")+outs);
return false;
@@ -640,11 +629,6 @@
if (_task!=null)
_task.setProgression(80);
- // On copie les fichiers vers le repertoire projet
- for (File f : exeVelFlt.listFiles())
- copyFile(exeVelFlt, prjVelFlt, f.getName());
-// f.renameTo(new File(prjVelFlt,f.getName()));
-
FuLog.trace(PivResource.getS("Filtrage ok."));
}
catch (IOException ex) {
@@ -661,7 +645,7 @@
/**
* Lance la moyennation des vitesses et leur restitution dans l'espace r\xE9el. Cette
* methode doit \xEAtre appel\xE9e juste apr\xE8s le filtrage des vitesses.
- * La moyennation se fait dans le r\xE9pertoire exe avant copie des fichiers.
+ * La moyennation se fait dans le r\xE9pertoire projet.
*
* @param _ana L'analyse pour la tache ex\xE9cut\xE9e.
* @param _prj Le projet.
@@ -673,10 +657,12 @@
File prjRoot=_prj.getRoot();
File prjOutputs=new File(prjRoot,OUTPUT_DIR);
- File exeOutputs=new File(exePath,OUTPUT_DIR);
+ prjOutputs.mkdirs();
+ // On supprime le fichier du repertoire projet
+ String faverage="average_vel.out";
+ File resFile=new File(prjOutputs,faverage);
+ resFile.delete();
- prjOutputs.mkdir();
-
String desc=PivResource.getS("Moyennation des vitesses...");
FuLog.trace(desc);
if (_task!=null) {
@@ -687,7 +673,7 @@
try {
// list_avg.dat deja cr\xE9\xE9 auparavant => Pas de cr\xE9ation
- String outs = FuLib.runProgram(new String[]{exePath+File.separator+EXES[5] + EXE_EXT}, exePath);
+ String outs = FuLib.runProgram(new String[]{exePath+File.separator+EXES[5] + EXE_EXT}, prjRoot);
if (!outs.trim().equals("")) {
_ana.addError(PivResource.getS("Erreur de moyennation des vitesses:\n")+outs);
return false;
@@ -696,12 +682,6 @@
if (_task!=null)
_task.setProgression(50);
- String faverage="average_vel.out";
- // On d\xE9place le fichier vers le repertoire projet
- File resFile=new File(prjOutputs,faverage);
- resFile.delete();
- new File(exeOutputs,faverage).renameTo(resFile);
-
// R\xE9cup\xE9ration des r\xE9sultats du projet.
FileReadOperationAbstract reader = PivAverageVelFileFormat.getInstance().createReader();
CtuluIOOperationSynthese ret=reader.read(resFile, _task);
@@ -725,7 +705,7 @@
return false;
}
finally {
- delExeDirs();
+// delExeDirs();
}
return true;
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-11-18 16:01:46 UTC (rev 6681)
+++ trunk/soft/fudaa-lspiv/src/main/java/org/fudaa/fudaa/piv/metier/PivProject.java 2011-11-18 16:15:51 UTC (rev 6682)
@@ -4,7 +4,11 @@
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -23,6 +27,8 @@
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.fileformat.FileReadOperationAbstract;
import org.fudaa.ctulu.fileformat.FileWriteOperationAbstract;
+import org.fudaa.ctulu.gis.GISLib;
+import org.fudaa.ebli.commun.EbliLib;
import org.fudaa.fudaa.piv.PivResource;
import org.fudaa.fudaa.piv.io.PivAverageVelFileFormat;
import org.fudaa.fudaa.piv.io.PivBathyFileFormat;
@@ -37,6 +43,7 @@
import org.fudaa.fudaa.piv.io.PivParamFileFormat;
import com.memoire.fu.FuLog;
+import com.vividsolutions.jts.algorithm.LineIntersector;
/**
* Le projet contenant toutes les donn\xE9es. Chauqe projet peut \xEAtre sauv\xE9/relu
@@ -90,6 +97,8 @@
protected PivVelResults velResults;
/** Les r\xE9sultats des vitesses instantan\xE9es */
protected PivInstantVelResults[] instantVelResults;
+ /** Les r\xE9sultats instantan\xE9s utilis\xE9s pour le calcul des vitesses moyennes. */
+ protected boolean[] usedInstantVelResults;
/** Les r\xE9sultats de d\xE9bit calcul\xE9 */
protected PivFlowResults flowResults;
/** La taille des images transform\xE9es */
@@ -705,6 +714,8 @@
// Les r\xE9sultats de vitesses instantan\xE9es dans l'espace r\xE9el.
instantVelResults=loadInstantVelResults(_prog);
+ // Et ceux utilis\xE9s pour le calcul de moyenne
+ usedInstantVelResults=loadUsedInstantVelResults(_prog);
// Les r\xE9sultats de d\xE9bit
File flowFile=new File(outputDir,"Discharge.dat");
@@ -811,7 +822,7 @@
}
/**
- * Chargement des resultats de vitesses instantan\xE9es dans l'espace r\xE9el.
+ * Charge les resultats de vitesses instantan\xE9es dans l'espace r\xE9el.
* @param _prog L'interface de progression.
* @return Les resultats ou <tt>null</tt> si aucun r\xE9sultat.
*/
@@ -828,6 +839,61 @@
}
return null;
}
+
+ /**
+ * Charge les resultats de vitesses instantan\xE9s qui ont servi a calculer les vitesses moyennes.
+ * @param _prog L'interface de progression.
+ * @return L'utilisation du resultat si l'index correspondant est true.
+ */
+ public boolean[] loadUsedInstantVelResults(ProgressionInterface _prog) {
+ boolean[] res;
+
+ File[] instantVelFiles=new File(rootPath,VEL_RAW_DIR).listFiles();
+ // Pas de r\xE9sultats instantan\xE9s
+ if (instantVelFiles==null || instantVelFiles.length==0) {
+ res=new boolean[0];
+ return res;
+ }
+
+ File outputDir=new File(rootPath,OUTPUT_DIR);
+ File list=new File(outputDir,"list_avg.dat");
+ res=new boolean[instantVelFiles.length];
+
+ // Pas de liste de r\xE9sultats instantan\xE9s
+ if (!list.exists()) {
+ Arrays.fill(res, true);
+ return res;
+ }
+
+ // Le fichier existe.
+ else {
+ LineNumberReader inp=null;
+ try {
+ inp = new LineNumberReader(new FileReader(list));
+ String line;
+ while ((line = inp.readLine()) != null) {
+ for (int i = 0; i < instantVelFiles.length; i++) {
+ if (instantVelFiles[i].getName().equals(line)) {
+ res[i] = true;
+ break;
+ }
+ }
+ }
+ }
+ catch (IOException e) {
+ Arrays.fill(res, true);
+ }
+ finally {
+ try {
+ if (inp != null)
+ inp.close();
+ }
+ catch (IOException e) {
+ }
+ }
+ return res;
+ }
+ }
/**
* Sauve le projet sur le fichier projet. Les infos sont sauv\xE9es sur le
@@ -890,11 +956,43 @@
CtuluIOOperationSynthese ret=writer.write(transect, transectFile, null);
}
+ // Les resultats utilis\xE9s pour le calcul de vitesse moyenne.
+ saveUsedInstantVelResults();
+
+
isModified=false;
return true;
}
/**
+ * Sauvegarde sur une liste les resultats instantan\xE9es utilis\xE9s pour le calcul de
+ * moyennation.
+ */
+ public void saveUsedInstantVelResults() {
+ File outputDir=new File(rootPath,OUTPUT_DIR);
+
+ File[] instantVelFiles=new File(rootPath,VEL_RAW_DIR).listFiles();
+ // Pas de r\xE9sultats instantan\xE9s
+ if (instantVelFiles==null || instantVelFiles.length==0) return;
+
+ // Cr\xE9ation du fichier contenant la liste des fichiers piv.dat obtenus par calcul.
+ PrintWriter out=null;
+ try {
+ out = new PrintWriter(new File(outputDir,"list_avg.dat"));
+ for (int i=0; i<instantVelFiles.length; i++) {
+ if (usedInstantVelResults[i])
+ out.println(instantVelFiles[i].getName());
+ }
+ }
+ catch (IOException e) {
+ }
+ finally {
+ if (out!=null)
+ out.close();
+ }
+ }
+
+ /**
* Test si le projet a \xE9t\xE9 modifi\xE9.
* @return true si le projet a \xE9t\xE9 modifi\xE9.
*/
@@ -1067,7 +1165,13 @@
* @param _res Les r\xE9sultats. <tt>null</tt> est autoris\xE9.
*/
public void setInstantVelResults(PivInstantVelResults[] _res) {
+ if (CtuluLibArray.isEquals(instantVelResults, _res)) return;
+
instantVelResults=_res;
+
+ usedInstantVelResults=new boolean[instantVelResults.length];
+ Arrays.fill(usedInstantVelResults, true);
+
isModified=true;
fireProjectStateChanged("instantVelResults");
}
@@ -1091,6 +1195,22 @@
fireProjectStateChanged("flowResults");
}
+ /**
+ * Definit les resultats instantan\xE9s \xE0 utiliser pour le calcul de moyennation.
+ * @param _usedVelResults
+ */
+ public void setUsedInstantVelResults(boolean[] _usedVelResults) {
+ usedInstantVelResults=_usedVelResults;
+ }
+
+ /**
+ * @return La liste des resultats instantan\xE9s utuilis\xE9s pour la moyennation. La valeur
+ * a l'index du resultat est True si utilis\xE9.
+ */
+ public boolean[] getUsedInstantVelResults() {
+ return usedInstantVelResults;
+ }
+
void fireProjectStateChanged(String _prop) {
for (PivProjectStateListener listener : listeners) {
listener.projectStateChanged(this,_prop);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|