|
From: <de...@us...> - 2012-12-14 07:21:38
|
Revision: 8128
http://fudaa.svn.sourceforge.net/fudaa/?rev=8128&view=rev
Author: deniger
Date: 2012-12-14 07:21:30 +0000 (Fri, 14 Dec 2012)
Log Message:
-----------
Modified Paths:
--------------
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridAction.java
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridProcessor.java
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/resource/mdl_en.fr_txt
Added Paths:
-----------
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueGridTriangleConfigurationAction.java
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementLayer.java
trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementModel.java
Modified: trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridAction.java
===================================================================
--- trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridAction.java 2012-12-13 14:58:16 UTC (rev 8127)
+++ trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridAction.java 2012-12-14 07:21:30 UTC (rev 8128)
@@ -14,6 +14,8 @@
import org.fudaa.ebli.trace.TraceLigneModel;
import org.fudaa.fudaa.meshviewer.layer.MvElementLayer;
import org.fudaa.fudaa.meshviewer.model.MvElementModelDefault;
+import org.fudaa.fudaa.modeleur.grid.MdlElementLayer;
+import org.fudaa.fudaa.modeleur.grid.MdlElementModel;
import org.fudaa.fudaa.modeleur.layer.MdlLayer2dMultiPoint;
import org.fudaa.fudaa.modeleur.resource.MdlResource;
import org.fudaa.fudaa.sig.layer.FSigEditor;
@@ -49,6 +51,15 @@
@Override
public void actionPerformed(ActionEvent _e) {
+ if (!CalqueGridTriangleConfigurationAction.isTriangleExeConfigured()) {
+ boolean ok = CalqueGridTriangleConfigurationAction.chooseExec();
+ if (!ok) {
+ return;
+ }
+ }
+ if (!CalqueGridTriangleConfigurationAction.isTriangleExeConfigured()) {
+ return;
+ }
stop = false;
setEnabled(false);
running = true;
@@ -66,6 +77,11 @@
public void run() {
processor = new CalqueCreateGridProcessor(layer.modeleDonnees(), editor.getUi());
final EfGridInterface grid = processor.process(createTask.getStateReceiver());
+ final MdlElementModel model = new MdlElementModel(grid);
+ int[] relations = processor.getRelations(grid, createTask.getStateReceiver());
+ model.setAltiIdxByGridPtIdx(relations);
+ model.setAltiModel(processor.getTriangleNodeAdapter());
+
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
@@ -73,7 +89,7 @@
setEnabled(true);
stopAction.setRunning(running);
if (grid != null && !stop) {
- addLayer(grid, saveUIProperties);
+ addLayer(model, saveUIProperties);
}
}
});
@@ -87,10 +103,10 @@
super.setEnabled(_newValue && !running);
}
- private void addLayer(EfGridInterface grid, EbliUIProperties saveUIProperties) {
- MvElementLayer eltLayer = getGridLayer();
+ private void addLayer(MdlElementModel grid, EbliUIProperties saveUIProperties) {
+ MdlElementLayer eltLayer = getGridLayer();
if (eltLayer == null) {
- eltLayer = new MvElementLayer();
+ eltLayer = new MdlElementLayer();
eltLayer.setTitle(MdlResource.getS("Maillage"));
eltLayer.setName("cqGrid");
eltLayer.setLineModel(0, new TraceLigneModel(TraceLigne.LISSE, 1f, Color.LIGHT_GRAY));
@@ -100,7 +116,7 @@
eltLayer.initFrom(saveUIProperties);
}
layer.add(eltLayer);
- eltLayer.setModele(new MvElementModelDefault(grid));
+ eltLayer.setModele(grid);
eltLayer.repaint();
((FSigEditor) layer.getEditor()).getPanel().getVueCalque().repaint(0);
((FSigEditor) layer.getEditor()).getPanel().getVueCalque().revalidate();
@@ -114,7 +130,7 @@
}
}
- public MvElementLayer getGridLayer() {
- return (MvElementLayer) layer.getCalqueParNom("cqGrid");
+ public MdlElementLayer getGridLayer() {
+ return (MdlElementLayer) layer.getCalqueParNom("cqGrid");
}
}
Modified: trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridProcessor.java
===================================================================
--- trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridProcessor.java 2012-12-13 14:58:16 UTC (rev 8127)
+++ trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueCreateGridProcessor.java 2012-12-14 07:21:30 UTC (rev 8128)
@@ -3,8 +3,10 @@
*/
package org.fudaa.fudaa.modeleur.action;
+import com.memoire.fu.FuEmptyArrays;
import java.io.File;
import java.io.IOException;
+import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.fudaa.ctulu.CtuluIOOperationSynthese;
@@ -12,6 +14,8 @@
import org.fudaa.ctulu.CtuluLibFile;
import org.fudaa.ctulu.CtuluUI;
import org.fudaa.ctulu.ProgressionInterface;
+import org.fudaa.ctulu.ProgressionUpdater;
+import org.fudaa.ctulu.gis.CtuluLibGeometrie;
import org.fudaa.dodico.ef.EfGridInterface;
import org.fudaa.dodico.ef.impl.EFGridArrayZ;
import org.fudaa.dodico.ef.io.triangle.TriangleEleNodeGridCreator;
@@ -28,14 +32,18 @@
*/
public class CalqueCreateGridProcessor implements CExecListener {
- private ZModeleMultiPoint points;
+ private final TriangleNodeAdapter triangleNodeAdapter;
private CtuluUI ui;
public CalqueCreateGridProcessor(ZModeleMultiPoint points, CtuluUI ui) {
- this.points = points;
this.ui = ui;
+ triangleNodeAdapter = new TriangleNodeAdapter(points.getGeomData());
}
+ public TriangleNodeAdapter getTriangleNodeAdapter() {
+ return triangleNodeAdapter;
+ }
+
@Override
public void setProcess(Process _p) {
this.p = _p;
@@ -50,14 +58,47 @@
}
Process p;
+ /**
+ *
+ * Permet d'avoir une relation entre l'indice du neoud dans le maillage et celui dans le semis. Attention, il est suppos\xE9 que les points sont dans
+ * le m\xEAme ordre : a voir
+ *
+ * @param grid
+ * @return un tableau dont la taille est grid.nbPoint.Pour chaque point du maillage donne l'indice du noeud dans le mod\xE8les multipoint.
+ */
+ public int[] getRelations(EfGridInterface grid, ProgressionInterface prog) {
+ if (grid == null) {
+ return FuEmptyArrays.INT0;
+ }
+ int[] res = new int[grid.getPtsNb()];
+ Arrays.fill(res, -1);
+ ProgressionUpdater updater = new ProgressionUpdater(prog);
+ int nb = Math.min(res.length, triangleNodeAdapter.getNbPoints());
+ updater.setValue(10, nb);
+ updater.majProgessionStateOnly(MdlResource.getS("Synchronisation des indices"));
+ for (int i = 0; i < nb; i++) {
+ double x = triangleNodeAdapter.getX(i);
+ double y = triangleNodeAdapter.getY(i);
+ if (CtuluLibGeometrie.getDistance(x, y, grid.getPtX(i), grid.getPtY(i)) < 2e-3) {
+ res[i] = i;
+ }
+ updater.majAvancement();
+ }
+
+ return res;
+
+ }
+
public EfGridInterface process(ProgressionInterface prog) {
+ if (!CalqueGridTriangleConfigurationAction.isTriangleExeConfigured()) {
+ return null;
+ }
try {
stop = false;
File tmpDir = CtuluLibFile.createTempDir();
- System.err.println("tmp =" + tmpDir.getAbsolutePath());
File nodeFile = new File(tmpDir, "in.node");
TriangleNodeWriter writer = new TriangleNodeWriter();
- CtuluIOOperationSynthese write = writer.write(new TriangleNodeAdapter(points.getGeomData()), nodeFile, prog);
+ CtuluIOOperationSynthese write = writer.write(triangleNodeAdapter, nodeFile, prog);
if (write.containsError()) {
ui.manageErrorOperationAndIsFatal(write);
return null;
@@ -67,7 +108,8 @@
}
CExec exe = new CExec();
exe.setExecDirectory(tmpDir);
- exe.setCommand(new String[]{"C:\\devel\\triangle\\CARRE\\triangle.exe", "in.node"});
+
+ exe.setCommand(new String[]{CalqueGridTriangleConfigurationAction.getTriangleExe(), "in.node"});
exe.setListener(this);
exe.exec();
if (stop) {
Added: trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueGridTriangleConfigurationAction.java
===================================================================
--- trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueGridTriangleConfigurationAction.java (rev 0)
+++ trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/action/CalqueGridTriangleConfigurationAction.java 2012-12-14 07:21:30 UTC (rev 8128)
@@ -0,0 +1,80 @@
+/*
+ GPL 2
+ */
+package org.fudaa.fudaa.modeleur.action;
+
+import com.memoire.bu.BuResource;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import org.fudaa.ctulu.gui.CtuluDialogPanel;
+import org.fudaa.ctulu.gui.CtuluFileChooserPanel;
+import org.fudaa.ebli.commun.EbliActionSimple;
+import org.fudaa.fudaa.modeleur.MdlPreferences;
+import org.fudaa.fudaa.modeleur.resource.MdlResource;
+
+/**
+ *
+ * @author Frederic Deniger
+ */
+public class CalqueGridTriangleConfigurationAction extends EbliActionSimple {
+
+ public CalqueGridTriangleConfigurationAction() {
+ super(MdlResource.getS("Configurer l'ex\xE9cutable Triangle"), BuResource.BU.getIcon("configurer"), "CONFIGURE_TRIANGLE");
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent _e) {
+ chooseExec();
+ }
+
+ static String getTriangleExe() {
+ return MdlPreferences.MDL.getStringProperty("grid.triangle.path");
+ }
+
+ static boolean isTriangleExeConfigured() {
+ return getTriangleExe() != null && new File(getTriangleExe()).exists();
+ }
+
+ /**
+ *
+ * @return true if the user accept the dialog
+ */
+ public static boolean chooseExec() {
+ ChooseExePanel pn = new ChooseExePanel();
+ if (pn.afficheModaleOk(null, MdlResource.getS("Configurer l'ex\xE9cutable Triangle"))) {
+ MdlPreferences.MDL.putStringProperty("grid.triangle.path", pn.getChoosenFile().getAbsolutePath());
+ return true;
+ }
+ return false;
+ }
+
+ public static class ChooseExePanel extends CtuluDialogPanel {
+
+ CtuluFileChooserPanel chooseExe;
+
+ public ChooseExePanel() {
+ super(true);
+ setHelpText(MdlResource.getS("Choisir le chemin vers l'ex\xE9cutable"));
+ chooseExe = addFileChooserPanel(this, MdlResource.getS("Chemin") + ": ", false, false);
+ add(chooseExe);
+ isDataValid();
+ }
+
+ public File getChoosenFile() {
+ return chooseExe.getFile();
+ }
+
+ @Override
+ public boolean isDataValid() {
+ File choosenFile = getChoosenFile();
+ if (choosenFile == null) {
+ setErrorText(MdlResource.getS("Le chemin vers l'ex\xE9cutable n'est pas d\xE9fini"));
+ return false;
+ } else if (!choosenFile.exists()) {
+ setErrorText(MdlResource.getS("Le chemin vers l'ex\xE9cutable n'existe pas: {0}", choosenFile.getAbsolutePath()));
+ return false;
+ }
+ return super.isDataValid();
+ }
+ }
+}
Added: trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementLayer.java
===================================================================
--- trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementLayer.java (rev 0)
+++ trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementLayer.java 2012-12-14 07:21:30 UTC (rev 8128)
@@ -0,0 +1,13 @@
+/*
+ GPL 2
+ */
+package org.fudaa.fudaa.modeleur.grid;
+
+import org.fudaa.fudaa.meshviewer.layer.MvElementLayer;
+
+/**
+ *
+ * @author Frederic Deniger
+ */
+public class MdlElementLayer extends MvElementLayer {
+}
Added: trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementModel.java
===================================================================
--- trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementModel.java (rev 0)
+++ trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/grid/MdlElementModel.java 2012-12-14 07:21:30 UTC (rev 8128)
@@ -0,0 +1,29 @@
+/*
+ GPL 2
+ */
+package org.fudaa.fudaa.modeleur.grid;
+
+import org.fudaa.dodico.ef.EfGridInterface;
+import org.fudaa.dodico.ef.io.triangle.TriangleNodeAdapter;
+import org.fudaa.fudaa.meshviewer.model.MvElementModelDefault;
+
+/**
+ *
+ * @author Frederic Deniger
+ */
+public class MdlElementModel extends MvElementModelDefault {
+
+ public MdlElementModel(EfGridInterface _g) {
+ super(_g);
+ }
+ int[] altiIdxByGridPtIdx;
+
+ public void setAltiIdxByGridPtIdx(int[] relations) {
+ this.altiIdxByGridPtIdx = relations;
+ }
+ private TriangleNodeAdapter triangleNodeAdapter;
+
+ public void setAltiModel(TriangleNodeAdapter triangleNodeAdapter) {
+ this.triangleNodeAdapter = triangleNodeAdapter;
+ }
+}
Modified: trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java
===================================================================
--- trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java 2012-12-13 14:58:16 UTC (rev 8127)
+++ trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/layer/MdlLayer2dCloud.java 2012-12-14 07:21:30 UTC (rev 8128)
@@ -16,6 +16,7 @@
import org.fudaa.ebli.trace.TraceIcon;
import org.fudaa.ebli.trace.TraceIconModel;
import org.fudaa.fudaa.modeleur.action.CalqueCreateGridAction;
+import org.fudaa.fudaa.modeleur.action.CalqueGridTriangleConfigurationAction;
import org.fudaa.fudaa.modeleur.persistence.MdlLayer2dCloudPersistence;
import org.fudaa.fudaa.modeleur.resource.MdlResource;
import org.fudaa.fudaa.sig.layer.FSigEditor;
@@ -43,7 +44,7 @@
setTitle(MdlResource.getS("Semis de points"));
setAttributForLabels(GISAttributeConstants.LABEL);
final CalqueCreateGridAction createGridAction = new CalqueCreateGridAction(this);
- setActions(new EbliActionInterface[]{createGridAction, createGridAction.getStopAction()});
+ setActions(new EbliActionInterface[]{createGridAction, createGridAction.getStopAction(),null,new CalqueGridTriangleConfigurationAction()});
}
public MdlLayer2dCloud(FSigEditor _editor) {
Modified: trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/resource/mdl_en.fr_txt
===================================================================
--- trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/resource/mdl_en.fr_txt 2012-12-13 14:58:16 UTC (rev 8127)
+++ trunk/soft/fudaa-modeleur/src/main/java/org/fudaa/fudaa/modeleur/resource/mdl_en.fr_txt 2012-12-14 07:21:30 UTC (rev 8128)
@@ -2,4 +2,9 @@
Mailler=Perform grid computing
Impossible de cr\xE9er un dossier temporaire=A temporary directory can't be created
Ex\xE9cution du mailleur=Extern grid processing
-Stopper le maillage=Stop grid processing
\ No newline at end of file
+Stopper le maillage=Stop grid processing
+Chemin=Path
+Le chemin vers l'ex\xE9cutable n'est pas d\xE9fini=The executable path is not defined
+Le chemin vers l'ex\xE9cutable n'existe pas\: {0}=The executable path doesn't exist\: {0}
+Choisir le chemin vers l'ex\xE9cutable=Choose the executable path
+Synchronisation des indices=Index mapping
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|