|
From: <de...@us...> - 2009-12-08 00:52:40
|
Revision: 5541
http://fudaa.svn.sourceforge.net/fudaa/?rev=5541&view=rev
Author: deniger
Date: 2009-12-08 00:52:32 +0000 (Tue, 08 Dec 2009)
Log Message:
-----------
Modified Paths:
--------------
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfFilterSelectedNode.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfLib.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/Messages.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/AbstractEfOperation.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/EfIsoActivitySearcher.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/clean/EfOperationCleanGrid.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/overstressed/EfOperationOverstressed.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/projection/EfOperationProjectionOrtho.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/refine/EfOperationRefine.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/refine/EfOperationRefineEdge.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/renum/EfOperationBackElimination.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/renum/EfOperationRenumeration.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/renum/EfOperationShufle.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/type/EfOperationToT3.java
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/type/EfOperationToT6.java
trunk/business/fudaa-ef/core/src/main/resources/org/fudaa/dodico/ef/ef.properties
trunk/business/fudaa-ef/core/src/main/resources/org/fudaa/dodico/ef/ef_en.properties
trunk/business/fudaa-ef/core/src/main/resources/org/fudaa/dodico/ef/ef_fr.properties
trunk/business/fudaa-ef/core/src/test/java/org/fudaa/dodico/ef/TestJSearchIso.java
trunk/business/fudaa-ef/core/src/test/java/org/fudaa/dodico/ef/operation/refine/TestEfOperationRefineEdge.java
trunk/business/fudaa-ef/core/src/test/java/org/fudaa/dodico/ef/operation/renum/TestEfOperationShufle.java
trunk/business/fudaa-ef/io/src/main/java/org/fudaa/dodico/ef/io/serafin/SerafinVolumeFileFormat.java
trunk/business/fudaa-ef/io/src/main/java/org/fudaa/dodico/ef/io/serafin/SerafinWriter.java
trunk/business/fudaa-ef/io/src/main/java/org/fudaa/dodico/olb/exec/OLBExec.java
Removed Paths:
-------------
trunk/business/fudaa-ef/core/src/main/java/org/fudaa/ctulu/
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfFilterSelectedNode.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfFilterSelectedNode.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfFilterSelectedNode.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -1,38 +1,43 @@
/*
- * @creation 13 mai 2005
- * @modification $Date: 2006-09-11 09:45:07 $
- * @license GNU General Public License 2
- * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
-* @mail de...@fu...
+ * @creation 13 mai 2005
+ *
+ * @modification $Date: 2006-09-11 09:45:07 $
+ *
+ * @license GNU General Public License 2
+ *
+ * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
+ *
+ * @mail de...@fu...
*/
package org.fudaa.dodico.ef;
+import org.fudaa.ctulu.CtuluListSelection;
import org.fudaa.ctulu.CtuluListSelectionInterface;
/**
* Un filtre sur des indices de selections: Attention le constructeur peut etre long.
+ *
* @author Fred Deniger
* @version $Id: EfFilterSelectedNode.java,v 1.3 2006-09-11 09:45:07 deniger Exp $
*/
public class EfFilterSelectedNode implements EfFilter {
final CtuluListSelectionInterface selectedNode_;
- //-1 non selectione
- //0 selectionne partiellement
- //1 tout select
+ // -1 non selectione
+ // 0 selectionne partiellement
+ // 1 tout select
int[] selectedElt_;
/**
* @param _selectedPt les elements selectionn\xE9es
* @param _g
*/
- public EfFilterSelectedNode(final CtuluListSelectionInterface _selectedPt,
- final EfGridInterface _g) {
+ public EfFilterSelectedNode(final CtuluListSelectionInterface _selectedPt, final EfGridInterface _g) {
super();
selectedNode_ = _selectedPt;
if (selectedNode_ != null && !selectedNode_.isEmpty()) {
selectedElt_ = new int[_g.getEltNb()];
- //on parcourt les elements pour determiner leur etat
+ // on parcourt les elements pour determiner leur etat
for (int i = _g.getEltNb() - 1; i >= 0; i--) {
final EfElement el = _g.getElement(i);
boolean selected = false;
@@ -56,17 +61,21 @@
}
}
- public boolean isActivated(final int _idxPt){
+ public boolean isActivated(final int _idxPt) {
return selectedNode_ == null ? false : selectedNode_.isSelected(_idxPt);
}
- public boolean isActivatedElt(final int _idxElt){
- if (selectedElt_ == null || selectedElt_[_idxElt] < 0) {
- return false;
+ public CtuluListSelectionInterface getSelectedElt() {
+ CtuluListSelection res = new CtuluListSelection();
+ if (selectedElt_ == null) return res;
+ for (int i = selectedElt_.length - 1; i >= 0; i--) {
+ if (isActivatedElt(i)) res.add(i);
}
-// if (_strict) {
-// return selectedElt_[_idxElt] > 0;
-// }
+ return res;
+ }
+
+ public boolean isActivatedElt(final int _idxElt) {
+ if (selectedElt_ == null || selectedElt_[_idxElt] < 0) { return false; }
return true;
}
}
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfLib.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfLib.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/EfLib.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -37,12 +37,8 @@
public static EfDataElement getElementData(final CtuluVariable _var, final EfData _nodeData,
final EfGridInterface _grid, InterpolationSupportValuesMultiI _datas, InterpolationVectorContainer _vects) {
- if (_nodeData == null || _grid == null) {
- return null;
- }
- if (_nodeData.isElementData()) {
- return (EfDataElement) _nodeData;
- }
+ if (_nodeData == null || _grid == null) { return null; }
+ if (_nodeData.isElementData()) { return (EfDataElement) _nodeData; }
final double[] res = new double[_grid.getEltNb()];
for (int i = res.length - 1; i >= 0; i--) {
res[i] = _grid.getElement(i).getAverage(_var, _nodeData, _datas, _vects);
@@ -51,12 +47,8 @@
}
public static EfDataElement getElementDataDanger(final EfData _nodeData, final EfGridInterface _grid) {
- if (_nodeData == null || _grid == null) {
- return null;
- }
- if (_nodeData.isElementData()) {
- return (EfDataElement) _nodeData;
- }
+ if (_nodeData == null || _grid == null) { return null; }
+ if (_nodeData.isElementData()) { return (EfDataElement) _nodeData; }
final double[] res = new double[_grid.getEltNb()];
for (int i = res.length - 1; i >= 0; i--) {
res[i] = _grid.getElement(i).getAverageDanger(_nodeData);
@@ -73,9 +65,7 @@
public static boolean isPlat(final EfElement _elt, final EfData _nodeData, final double _eps) {
final double refValues = _nodeData.getValue(_elt.getPtIndex(0));
for (int i = _elt.getPtNb() - 1; i > 0; i--) {
- if (!CtuluLib.isZero(refValues - _nodeData.getValue(_elt.getPtIndex(i)), _eps)) {
- return false;
- }
+ if (!CtuluLib.isZero(refValues - _nodeData.getValue(_elt.getPtIndex(i)), _eps)) { return false; }
}
return true;
@@ -146,9 +136,7 @@
*/
public static int[] getIdxWithOrientation(final EfGridInterface _grid, final boolean _trigo,
final ProgressionInterface _progress) {
- if (_grid == null) {
- return null;
- }
+ if (_grid == null) { return null; }
final int nbElt = _grid.getEltNb();
final TIntArrayList r = new TIntArrayList(nbElt);
// Mise en place de la progression
@@ -174,9 +162,7 @@
* @return les \xE9l\xE9ments non s\xE9lectionn\xE9s. null si param\xE8tres null ou si vide.
*/
public static CtuluListSelectionInterface getNonSelectedElt(final EfFilter _f, final EfGridInterface _grid) {
- if (_f == null || _grid == null) {
- return null;
- }
+ if (_f == null || _grid == null) { return null; }
final int eltNb = _grid.getEltNb();
final CtuluListSelection res = new CtuluListSelection(eltNb);
for (int i = 0; i < eltNb; i++) {
@@ -188,15 +174,30 @@
}
/**
+ * @param _f le filtre
+ * @param _grid le maillage
+ * @return les \xE9l\xE9ments s\xE9lectionn\xE9s. CtuluListModelSelectionEmpty.EMPTY si param\xE8tres null ou si vide.
+ */
+ public static CtuluListSelectionInterface getSelectedElt(final EfFilter _f, final EfGridInterface _grid) {
+ if (_f == null || _grid == null) { return CtuluListModelSelectionEmpty.EMPTY; }
+ final int eltNb = _grid.getEltNb();
+ final CtuluListSelection res = new CtuluListSelection(eltNb);
+ for (int i = 0; i < eltNb; i++) {
+ if (_f.isActivatedElt(i)) {
+ res.add(i);
+ }
+ }
+ return res.isEmpty() ? CtuluListModelSelectionEmpty.EMPTY : res;
+ }
+
+ /**
* @param _d les donnees a parcourir
* @param _v le tableau contenant le min,max
* @param _c une condition a respecter pour le min,max
* @return le min max des donnees _v si non null
*/
public static CtuluRange getMinMax(final EfData _d, final CtuluRange _v, final EfFilter _c) {
- if (_d == null || _d.getSize() == 0) {
- return null;
- }
+ if (_d == null || _d.getSize() == 0) { return null; }
final CtuluRange r = (_v == null) ? new CtuluRange() : _v;
r.setToNill();
boolean isInit = false;
@@ -233,25 +234,17 @@
* @return true si contenue
*/
public static boolean isContained(final int _idx, final int _minIdx, final int _maxIdx, final int _nbPt) {
- if (_minIdx <= _maxIdx) {
- return _idx >= _minIdx && _idx <= _maxIdx;
- }
+ if (_minIdx <= _maxIdx) { return _idx >= _minIdx && _idx <= _maxIdx; }
return (_idx >= _minIdx && _idx < _nbPt) || (_idx >= 0 && _idx <= _maxIdx);
}
public static String isDiffQuick(final EfGridInterface _g1, final EfGridInterface _g2) {
- if (_g1 == null || _g2 == null) {
- return DodicoLib.getS("Donn\xE9es invalides");
- }
+ if (_g1 == null || _g2 == null) { return DodicoLib.getS("Donn\xE9es invalides"); }
final int nbNodeRead = _g1.getPtsNb();
- if (nbNodeRead != _g2.getPtsNb()) {
- return DodicoLib.getS("Le nombre de noeuds est diff\xE9rent");
- }
+ if (nbNodeRead != _g2.getPtsNb()) { return DodicoLib.getS("Le nombre de noeuds est diff\xE9rent"); }
final int nbEltRead = _g1.getEltNb();
- if (nbEltRead != _g2.getEltNb()) {
- return DodicoLib.getS("Le nombre d'\xE9l\xE9ments est diff\xE9rent");
- }
+ if (nbEltRead != _g2.getEltNb()) { return DodicoLib.getS("Le nombre d'\xE9l\xE9ments est diff\xE9rent"); }
int testedNode = (int) (Math.random() * (nbNodeRead - 1));
if (testedNode > nbNodeRead - 1) {
testedNode = nbNodeRead - 1;
@@ -261,11 +254,9 @@
}
final Coordinate c = _g1.getCoor(testedNode);
final Coordinate cReprise = _g2.getCoor(testedNode);
- if (CtuluLibGeometrie.getDistanceXY(c, cReprise) > 1E-1) {
- return DodicoLib.getS("Un noeud diff\xE8re");
- }
- if (_g1.getFrontiers() != null && _g2.getFrontiers() != null && !_g1.getFrontiers().isSame(_g2.getFrontiers())) {
- return DodicoLib.getS("Les points fronti\xE8res sont diff\xE9rents");
+ if (CtuluLibGeometrie.getDistanceXY(c, cReprise) > 1E-1) { return DodicoLib.getS("Un noeud diff\xE8re"); }
+ if (_g1.getFrontiers() != null && _g2.getFrontiers() != null && !_g1.getFrontiers().isSame(_g2.getFrontiers())) { return DodicoLib
+ .getS("Les points fronti\xE8res sont diff\xE9rents");
}
return null;
@@ -321,38 +312,26 @@
* @return true si le nb de points et tous les indices sont identiques
*/
public static boolean isSameStructure(final EfGridVolumeInterface _v1, final EfGridVolumeInterface _v) {
- if (_v == null) {
- return false;
- }
+ if (_v == null) { return false; }
// on compare le nombre de points
int nV = _v.getPtsNb();
int n = _v1.getPtsNb();
- if (n != nV) {
- return false;
- }
+ if (n != nV) { return false; }
// on compare les aretes
// EfSegment[] areteV = _v.aretes_;
// on compare les nombres d'aretes
nV = _v.getNbAretes();
n = _v1.getNbAretes();
- if (n != nV) {
- return false;
- }
+ if (n != nV) { return false; }
// on compare les indices des aretes
for (int i = n - 1; i >= 0; i--) {
- if (!_v1.getArete(i).isSameIdx(_v.getArete(i))) {
- return false;
- }
+ if (!_v1.getArete(i).isSameIdx(_v.getArete(i))) { return false; }
}
nV = _v.getEltNb();
n = _v1.getEltNb();
- if (n != nV) {
- return false;
- }
+ if (n != nV) { return false; }
for (int i = n - 1; i >= 0; i--) {
- if (!_v1.getEltVolume(i).isSameStrict(_v.getEltVolume(i))) {
- return false;
- }
+ if (!_v1.getEltVolume(i).isSameStrict(_v.getEltVolume(i))) { return false; }
}
return true;
}
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/Messages.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/Messages.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/Messages.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -8,7 +8,7 @@
{
private static final String BUNDLE_NAME = "org.fudaa.dodico.ef.ef"; //$NON-NLS-1$
- private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+ public static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private Messages()
{
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/AbstractEfOperation.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/AbstractEfOperation.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/AbstractEfOperation.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -1,17 +1,15 @@
/**
- * Licence GPL
- * Copyright Genesis
+ * Licence GPL Copyright Genesis
*/
package org.fudaa.dodico.ef.operation;
import org.fudaa.ctulu.CtuluActivity;
import org.fudaa.ctulu.CtuluAnalyze;
-import org.fudaa.ctulu.CtuluAnalyzeNew;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.dodico.ef.EfElementType;
import org.fudaa.dodico.ef.EfGridData;
import org.fudaa.dodico.ef.EfGridInterface;
-import org.fudaa.dodico.ef.operation.type.EfOperationToT6;
+import org.fudaa.dodico.ef.Messages;
/**
* Classe abstraite permettant de g\xE9rer la methode de stop avec une activit\xE9 courante.
@@ -60,14 +58,17 @@
public final EfOperationResult process(ProgressionInterface prog) {
EfOperationResult res = new EfOperationResult();
- res.setAnalyze(new CtuluAnalyze());
+ CtuluAnalyze analyze = new CtuluAnalyze();
+ analyze.setDefaultResourceBundle(Messages.RESOURCE_BUNDLE);
+ analyze.setDesc(getClass().getSimpleName() + ".title");
+ res.setAnalyze(analyze);
frontierChanged = false;
- res.setGridData(process(prog, new CtuluAnalyzeNew(res.getAnalyze())));
+ res.setGridData(process(prog, analyze));
res.setFrontierChanged(frontierChanged);
return res;
}
- protected abstract EfGridData process(ProgressionInterface prog, CtuluAnalyzeNew log);
+ protected abstract EfGridData process(ProgressionInterface prog, CtuluAnalyze log);
/**
* @param currentActivity the currentActivity to set
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/EfIsoActivitySearcher.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/EfIsoActivitySearcher.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/EfIsoActivitySearcher.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -65,6 +65,11 @@
public ArrayListWithIndex(int _initialCapacity) {
super(_initialCapacity);
}
+
+ @Override
+ public boolean add(Object e) {
+ return super.add(e);
+ }
public int getIdx() {
return idx_;
@@ -137,22 +142,22 @@
private boolean isAligned(EfLineIntersection _newInter, List _dest) {
boolean align = false;
- if (_dest.size() >= 2) {
- EfLineIntersection last = (EfLineIntersection) _dest.get(_dest.size() - 1);
- // on initialise le parent qui est utilise pour r\xE9cuperer les coordonn\xE9es
- _newInter.setParent(this);
- last.setParent(this);
- tmpPt_.x = last.getX();
- tmpPt_.y = last.getY();
- tmpB_.x = _newInter.getX();
- tmpB_.y = _newInter.getY();
- last = (EfLineIntersection) _dest.get(_dest.size() - 2);
- last.setParent(this);
- tmpA_.x = last.getX();
- tmpA_.y = last.getY();
- // le nouveau point est situ\xE9 sur la droite en cours:
- align = (CGAlgorithms.distancePointLinePerpendicular(tmpPt_, tmpA_, tmpB_) <= epsForAlign_);
- }
+// if (_dest.size() >= 2) {
+// EfLineIntersection last = (EfLineIntersection) _dest.get(_dest.size() - 1);
+// // on initialise le parent qui est utilise pour r\xE9cuperer les coordonn\xE9es
+// _newInter.setParent(this);
+// last.setParent(this);
+// tmpPt_.x = last.getX();
+// tmpPt_.y = last.getY();
+// tmpB_.x = _newInter.getX();
+// tmpB_.y = _newInter.getY();
+// last = (EfLineIntersection) _dest.get(_dest.size() - 2);
+// last.setParent(this);
+// tmpA_.x = last.getX();
+// tmpA_.y = last.getY();
+// // le nouveau point est situ\xE9 sur la droite en cours:
+// align = (CGAlgorithms.distancePointLinePerpendicular(tmpPt_, tmpA_, tmpB_) <= epsForAlign_);
+// }
return align;
}
@@ -618,7 +623,7 @@
return ok;
}
-
+
private void findNexts(int _idxElt, TempResult _stockage) {
if (_stockage.getNbAvailables() == 0) return;
for (Iterator it = _stockage.iteratorOnAvail(_idxElt); it.hasNext();) {
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/clean/EfOperationCleanGrid.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/clean/EfOperationCleanGrid.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/clean/EfOperationCleanGrid.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -4,7 +4,7 @@
import java.util.Arrays;
-import org.fudaa.ctulu.CtuluAnalyzeNew;
+import org.fudaa.ctulu.CtuluAnalyze;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.ProgressionUpdater;
import org.fudaa.ctulu.gis.CtuluLibGeometrie;
@@ -25,7 +25,7 @@
private double minDistance;
@Override
- protected EfGridData process(ProgressionInterface prog, CtuluAnalyzeNew log) {
+ protected EfGridData process(ProgressionInterface prog, CtuluAnalyze log) {
int[] ptsOldIdxNewIdx = this.getPtsOldIdxNewIdx(prog);
int[] eltsOldIdxNewIdx = this.getEltsOldIdxNewIdx(ptsOldIdxNewIdx, prog);
TIntIntHashMap ptsNewIdxOldIdx = this.getNewIdxOldIdx(ptsOldIdxNewIdx);
@@ -53,6 +53,10 @@
}
// TODO Voir si modifier comme dans EfOperationShufle.
+ if (newNodes.length == 0) {
+ log.addError("ef.cleanGrid.allNode.eliminated");
+ return null;
+ }
EfGridInterface newGrid = new EfGrid(newNodes, newElements);
EfGridDataRenumeroteDecorator renumeroteDecorator = new EfGridDataRenumeroteDecorator(super.initGrid, newGrid);
@@ -60,8 +64,10 @@
renumeroteDecorator.setEltNewIdxOldIdxMap(eltsNewIdxOldIdx);
if (log != null) {
- log.addInfo("ef.cleanGrid.log", nodes.length - newNodes.length, elements.length - newElements.length,
- newNodes.length, newElements.length);
+ log.addInfo("ef.cleanGrid.node.elimine.log", nodes.length - newNodes.length);
+ log.addInfo("ef.cleanGrid.mesh.elimine.log", elements.length - newElements.length);
+ log.addInfo("ef.operation.log.newPt.nb", newNodes.length);
+ log.addInfo("ef.operation.log.newEle.nb", newElements.length);
}
return renumeroteDecorator;
@@ -94,7 +100,7 @@
ProgressionUpdater updater = new ProgressionUpdater(prog);
int currentIdx = 0;
- updater.majProgessionStateOnly("ef.cleanGrid.getEltsOldIdxNewIdx.msg");
+ updater.majProgessionStateOnly(Messages.getString("ef.cleanGrid.getEltsOldIdxNewIdx.msg"));
updater.setValue(10, oldIdxNewIdx.length);
Arrays.fill(oldIdxNewIdx, -1);
@@ -175,7 +181,7 @@
int currentIdx = 0;
ProgressionUpdater updater = new ProgressionUpdater(prog);
- updater.majProgessionStateOnly("ef.cleanGrid.getPtsOldIdxNewIdx.msg");
+ updater.majProgessionStateOnly(Messages.getString("ef.cleanGrid.getPtsOldIdxNewIdx.msg"));
updater.setValue(10, elements.length + oldIdxNewIdx.length);
Arrays.fill(oldIdxNewIdx, -1);
@@ -183,10 +189,11 @@
for (int i = 0; i < elements.length; i++) {
if (this.stop) return new int[0];
- int[] ptsIdx = elements[i].getIndices();
-
- for (int j = 0; j < ptsIdx.length; j++) {
- oldIdxNewIdx[ptsIdx[j]] = ptsIdx[j];
+ // int[] ptsIdx = elements[i].getIndices();
+ int nb = elements[i].getPtNb();
+ for (int j = 0; j < nb; j++) {
+ int idxPt = elements[i].getPtIndex(j);
+ oldIdxNewIdx[idxPt] = idxPt;
}
updater.majAvancement();
@@ -262,236 +269,4 @@
this.minDistance = minDistance;
}
- /**
- * @param elementsNewPts le tableau d'\xE9l\xE9ments avec les nouveaux points.
- * @param newIdxOldIdx le tableau contenant pour chaque indice l'ancien l'indice de l'\xE9l\xE9ment repr\xE9sent\xE9.
- * @param prog le manager de progression.
- * @return un tableau contenant les nouveaux \xE9l\xE9ments.
- */
- /*
- * private EfElement[] getNewElements(EfElement[] elementsNewPts, int[] newIdxOldIdx, ProgressionInterface prog) {
- * EfElement[] newElements = new EfElement[newIdxOldIdx.length]; ProgressionUpdater updater = new
- * ProgressionUpdater(prog);
- *
- * updater.majProgessionStateOnly("ef.cleanGrid.getEltNewIdxOldIdx.msg"); updater.setValue(10, newIdxOldIdx.length);
- *
- * for (int i = 0; i < newIdxOldIdx.length; i++) { if (this.stop) return new EfElement[0];
- *
- * newElements[i] = new EfElement(elementsNewPts[newIdxOldIdx[i]].getIndices());
- *
- * updater.majAvancement(); }
- *
- * return newElements; }
- *
- * /**
- *
- * @param eltsToEliminate le tableau permettant de savoir si un \xE9l\xE9ment doit \xEAtre supprim\xE9.
- *
- * @param prog le manager de progression.
- *
- * @return un tableau contenant pour chaque indice l'ancien l'indice de l'\xE9l\xE9ments repr\xE9sent\xE9.
- *//*
- * private int[] getEltNewIdxOldIdx(boolean[] eltsToEliminate, ProgressionInterface prog) { int[] newIdxOldIdx =
- * new int[this.getNewNbElts(eltsToEliminate, prog)]; int currentIdx = 0; ProgressionUpdater updater = new
- * ProgressionUpdater(prog);
- *
- * updater.majProgessionStateOnly("ef.cleanGrid.getEltNewIdxOldIdx.msg"); updater.setValue(10,
- * eltsToEliminate.length);
- *
- * for (int i = 0; i < eltsToEliminate.length; i++) { if (this.stop) return new int[0];
- *
- * if (!eltsToEliminate[i]) { newIdxOldIdx[currentIdx] = i;
- *
- * currentIdx++; }
- *
- * updater.majAvancement(); }
- *
- * return newIdxOldIdx; }
- *
- * /** TODO: le tableau de boolean aurait pu etre remplace par CtuluListSelection qui donne deja les methodes pour
- * compter..
- *
- * @param eltsToEliminate le tableau permettant de savoir si un \xE9l\xE9ment doit \xEAtre supprim\xE9.
- *
- * @param prog le manager de progression.
- *
- * @return le nombre d'\xE9l\xE9ment ne devant pas \xEAtre supprim\xE9 contenu dans le tableau.
- *//*
- * private int getNewNbElts(boolean[] eltsToEliminate, ProgressionInterface prog) { int newNbElts = 0;
- *
- * for (int i = 0; i < eltsToEliminate.length; i++) { if (!eltsToEliminate[i]) { newNbElts++; } }
- *
- * return newNbElts; }
- *
- * /**
- *
- * @param elementsNewPts le tableau d'\xE9l\xE9ments avec les nouveaux points.
- *
- * @param prog le manager de progression.
- *
- * @return un tableau contenant true si l'\xE9l\xE9ment correspondant doit \xEAtre supprim\xE9.
- *//*
- * private boolean[] getEltsToEliminate(EfElement[] elementsNewPts, ProgressionInterface prog) { boolean[]
- * eltsToEliminate = new boolean[elementsNewPts.length]; ProgressionUpdater updater = new
- * ProgressionUpdater(prog);
- *
- * updater.majProgessionStateOnly("ef.cleanGrid.getEltsToEliminate.msg"); updater.setValue(10, (2 *
- * elementsNewPts.length) - 1);
- *
- * for (int i = 0; i < eltsToEliminate.length; i++) { if(this.stop) return new boolean[0];
- *
- * eltsToEliminate[i] = this.isDegenerated(elementsNewPts[i].getIndices());
- *
- * updater.majAvancement(); }
- *
- * for (int i = 0; i < (eltsToEliminate.length - 1); i++) { if(this.stop) return new boolean[0];
- *
- * if (!eltsToEliminate[i]) { for (int j = (i + 1); j < eltsToEliminate.length; j++) { if(this.stop) return
- * new boolean[0];
- *
- * if (!eltsToEliminate[j]) { eltsToEliminate[j] = this.isSuperposed(elementsNewPts[i].getIndices(),
- * elementsNewPts[j].getIndices()); } } }
- *
- * updater.majAvancement(); }
- *
- * return eltsToEliminate; }
- *
- * /**
- *
- * @param prog le manager de progression.
- *
- * @return un tableau contenant pour chaque indice -1 si le point n'est pas utilis\xE9 ou l'indice du point qui
- * doit le remplacer.
- *//*
- * private int[] getCleanIdx(ProgressionInterface prog) { EfGridInterface grid = this.initGrid.getGrid();
- * int[] cleanIdx = new int[grid.getPtsNb()]; EfElement[] elements = grid.getElts(); EfNode[] nodes =
- * grid.getNodes(); ProgressionUpdater updater = new ProgressionUpdater(prog);
- *
- * updater.majProgessionStateOnly("ef.cleanGrid.getCleanIdx.msg"); updater.setValue(10, elements.length +
- * cleanIdx.length - 1);
- *
- * Arrays.fill(cleanIdx, -1);
- *
- * for (int i = 0; i < elements.length; i++) { if (this.stop) return new int[0];
- *
- * int[] ptsIdx = elements[i].getIndices();
- *
- * for (int j = 0; j < ptsIdx.length; j++) { cleanIdx[ptsIdx[j]] = ptsIdx[j]; }
- *
- * updater.majAvancement(); }
- *
- * for (int i = 0; i < (cleanIdx.length - 1); i++) { if (this.stop) return new int[0];
- *
- * if (cleanIdx[i] == i) { for (int j = (i + 1); j < cleanIdx.length; j++) { if (this.stop) return new
- * int[0];
- *
- * if (cleanIdx[j] == j) { double distance = CtuluLibGeometrie.getDistance(nodes[i].getX(),
- * nodes[i].getY(), nodes[j].getX(), nodes[j].getY());
- *
- * if (distance < this.minDistance) { cleanIdx[j] = i; } } } }
- *
- * updater.majAvancement(); }
- *
- * return cleanIdx; }
- *
- * /**
- *
- * @param cleanIdx le tableau contenant les nouveau indice utilis\xE9.
- *
- * @return le nombre de point diff\xE9rent contenu dans le tableau.
- *//*
- * private int getNewNbPts(int[] cleanIdx) { int newNbPts = 0;
- *
- * for (int i = 0; i < cleanIdx.length; i++) { if (cleanIdx[i] == i) { newNbPts++; } }
- *
- * return newNbPts; }
- *
- * /**
- *
- * @param cleanIdx le tableau contenant les nouveau indice utilis\xE9.
- *
- * @param prog le manager de progression.
- *
- * @return un tableau contenant pour chaque indice l'ancien l'indice du point repr\xE9sent\xE9.
- *//*
- * private int[] getPtsNewIdxOldIdx(int[] cleanIdx, ProgressionInterface prog) { int[] newIdxOldIdx
- * = new int[this.getNewNbPts(cleanIdx)]; int currentIdx = 0; ProgressionUpdater updater = new
- * ProgressionUpdater(prog);
- *
- * updater.majProgessionStateOnly("ef.cleanGrid.getPtsNewIdxOldIdx.msg"); updater.setValue(10,
- * newIdxOldIdx.length);
- *
- * for (int i = 0; i < newIdxOldIdx.length; i++) { if (this.stop) return new int[0];
- *
- * if (cleanIdx[i] == i) { newIdxOldIdx[currentIdx] = i;
- *
- * currentIdx++; }
- *
- * updater.majAvancement(); }
- *
- * return newIdxOldIdx; }
- *
- * /**
- *
- * @param newIdxOldIdx le tableau contenant pour chaque indice l'ancien l'indice du point
- * repr\xE9sent\xE9.
- *
- * @param prog le manager de progression.
- *
- * @return un tableau contenant les nouveaux points.
- *//*
- * private EfNode[] getNewNodes(int[] newIdxOldIdx, ProgressionInterface prog) { EfNode[] nodes =
- * this.initGrid.getGrid().getNodes(); EfNode[] newNodes = new EfNode[newIdxOldIdx.length];
- * ProgressionUpdater updater = new ProgressionUpdater(prog);
- *
- * updater.majProgessionStateOnly("ef.cleanGrid.getNewNodes.msg"); updater.setValue(10,
- * newNodes.length);
- *
- * for (int i = 0; i < newNodes.length; i++) { if (this.stop) return new EfNode[0];
- *
- * newNodes[i] = nodes[newIdxOldIdx[i]]; }
- *
- * return newNodes; }
- *
- * private TIntIntHashMap getOldIdxNewIdx(int[] newIdxOldIdx) { int newIdxNb =
- * newIdxOldIdx.length; TIntIntHashMap oldIdxNewIdx = new TIntIntHashMap(newIdxNb);
- *
- * for (int i = 0; i < newIdxNb; i++) { oldIdxNewIdx.put(newIdxOldIdx[i], i); }
- *
- * return oldIdxNewIdx; }
- *
- * /**
- *
- * @param cleanIdx le tableau contenant les nouveau indice utilis\xE9.
- *
- * @param newIdxOldIdx le tableau contenant pour chaque indice l'ancien l'indice du point
- * repr\xE9sent\xE9.
- *
- * @param prog le manager de progression.
- *
- * @return un tableau contenant tout les \xE9l\xE9ments avec les nouveaux points.
- *//*
- * private EfElement[] getElementsNewPts(int[] cleanIdx, int[] newIdxOldIdx,
- * ProgressionInterface prog) { EfElement[] elements = this.initGrid.getGrid().getElts(); int
- * elementsNb = elements.length; EfElement[] elementsNewPts = new EfElement[elementsNb];
- * TIntIntHashMap oldIdxNewIdx = this.getOldIdxNewIdx(newIdxOldIdx); ProgressionUpdater
- * updater = new ProgressionUpdater(prog);
- *
- * updater.majProgessionStateOnly("ef.cleanGrid.getElementsNewPts.msg"); updater.setValue(10,
- * elementsNb);
- *
- * for (int i = 0; i < elementsNb; i++) { if (this.stop) return new EfElement[0];
- *
- * int[] ptsIdx = elements[i].getIndices(); int ptsNb = ptsIdx.length; int[] newPtsIdx = new
- * int[ptsNb];
- *
- * // Cr\xE9ation des nouveaux indices de points. for (int j = 0; j < ptsNb; j++) { newPtsIdx[j]
- * = oldIdxNewIdx.get(cleanIdx[ptsIdx[j]]); }
- *
- * elementsNewPts[i] = new EfElement(newPtsIdx);
- *
- * updater.majAvancement(); }
- *
- * return elementsNewPts; }
- */
}
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/overstressed/EfOperationOverstressed.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/overstressed/EfOperationOverstressed.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/overstressed/EfOperationOverstressed.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -1,8 +1,10 @@
package org.fudaa.dodico.ef.operation.overstressed;
+import java.text.DecimalFormat;
import java.util.Set;
-import org.fudaa.ctulu.CtuluAnalyzeNew;
+import org.fudaa.ctulu.CtuluAnalyze;
+import org.fudaa.ctulu.CtuluLib;
import org.fudaa.ctulu.CtuluLibArray;
import org.fudaa.ctulu.CtuluListSelection;
import org.fudaa.ctulu.ProgressionInterface;
@@ -20,10 +22,14 @@
// EfOperationRefine operationRefine;
@Override
- protected EfGridData process(ProgressionInterface prog, CtuluAnalyzeNew log) {
+ protected EfGridData process(ProgressionInterface prog, CtuluAnalyze log) {
// R\xE9cup\xE8ration des index des \xE9l\xE9ments fronti\xE8re.
int[] overstressedIdx = super.initGrid.getGrid().getOverstressedElement(prog);
- if (CtuluLibArray.isEmpty(overstressedIdx)) return initGrid;
+ if (CtuluLibArray.isEmpty(overstressedIdx)) {
+ log.addInfo("ef.overstressed.notFoud");
+ return initGrid;
+ }
+ log.addInfo("ef.overstressed.nbFound", overstressedIdx.length);
// Cr\xE9ation d'une liste de s\xE9lection.
// TODO simplifier
CtuluListSelection selectedIdx = new CtuluListSelection(overstressedIdx);
@@ -41,10 +47,19 @@
if (opResultat.isFrontierChanged()) setFrontierChanged();
EfFindEdgeToSwap findEdgeToSwap = new EfFindEdgeToSwap();
setCurrentActivity(findEdgeToSwap);
- Set<EfSegment> edgToSwap = findEdgeToSwap.process(opResultat.getGridData().getGrid(), prog);
+ EfGridInterface grid = opResultat.getGridData().getGrid();
+ Set<EfSegment> edgToSwap = findEdgeToSwap.process(grid, prog);
+ log.addInfo("ef.overstressed.nbEdgesSwaped", edgToSwap.size());
+ DecimalFormat fmt = CtuluLib.getDecimalFormat(3);
+ if (edgToSwap.size() > 0) {
+ for (EfSegment efSegment : edgToSwap) {
+ log.addInfo("ef.overstressed.EdgeSwaped", "(" + fmt.format(grid.getPtX(efSegment.getPt1Idx())) + ", "
+ + fmt.format(grid.getPtX(efSegment.getPt2Idx())) + ")");
+ }
+ }
// on doit swapper des aretes
if (CtuluLibArray.isNotEmpty(edgToSwap)) {
- boolean containsT6 = containsT6(opResultat.getGridData().getGrid());
+ boolean containsT6 = containsT6(grid);
if (containsT6) {
setFrontierChanged();
opResultat = execOperation(new EfOperationToT3(), opResultat, prog);
@@ -60,10 +75,9 @@
}
EfGridData gridData = opResultat.getGridData();
- EfGridInterface grid = gridData.getGrid();
-
- log.addInfo("ef.overstressed.log", overstressedIdx.length, edgToSwap.size(), grid.getPtsNb(), grid.getEltNb());
-
+ grid = gridData.getGrid();
+ log.addInfo("ef.operation.log.newPt.nb", grid.getPtsNb());
+ log.addInfo("ef.operation.log.newEle.nb", grid.getEltNb());
return gridData;
}
Modified: trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/projection/EfOperationProjectionOrtho.java
===================================================================
--- trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/projection/EfOperationProjectionOrtho.java 2009-12-08 00:50:10 UTC (rev 5540)
+++ trunk/business/fudaa-ef/core/src/main/java/org/fudaa/dodico/ef/operation/projection/EfOperationProjectionOrtho.java 2009-12-08 00:52:32 UTC (rev 5541)
@@ -1,10 +1,12 @@
package org.fudaa.dodico.ef.operation.projection;
+import gnu.trove.TIntIntHashMap;
+
import java.io.IOException;
-import gnu.trove.TIntIntHashMap;
+import com.vividsolutions.jts.geom.Coordinate;
-import org.fudaa.ctulu.CtuluAnalyzeNew;
+import org.fudaa.ctulu.CtuluAnalyze;
import org.fudaa.ctulu.CtuluVariable;
import org.fudaa.ctulu.ProgressionInterface;
import org.fudaa.ctulu.gis.GISPolygone;
@@ -18,455 +20,391 @@
import org.fudaa.dodico.ef.EfNode;
import org.fudaa.dodico.ef.decorator.AbstractEfGridDataDecorator;
import org.fudaa.dodico.ef.impl.EfGrid;
-import org.fudaa.dodico.ef.interpolation.EfInterpolator;
import org.fudaa.dodico.ef.operation.AbstractEfOperation;
import org.fudaa.dodico.ef.operation.clean.EfOperationCleanGrid;
-import com.vividsolutions.jts.geom.Coordinate;
-
public class EfOperationProjectionOrtho extends AbstractEfOperation {
- public class EfGridDataProjectionDecorator extends AbstractEfGridDataDecorator {
+ public class EfGridDataProjectionDecorator extends AbstractEfGridDataDecorator {
- private TIntIntHashMap eltNewIdxOldIdx;
- private boolean[] isPtModified;
- private EfInterpolator interpolator;
+ private TIntIntHashMap eltNewIdxOldIdx;
+ private boolean[] isPtModified;
+// private EfInterpolator interpolator;
- public EfGridDataProjectionDecorator(final EfGridData _src, EfGridInterface newGrid, InterpolationVectorContainer vectorContainer) {
- super(_src, newGrid);
-
- this.interpolator = new EfInterpolator(_src, vectorContainer);
- }
-
- public EfGridInterface getGrid() {
- return getNewGrid();
- }
-
- public EfData getData(final CtuluVariable _t, final int _idxTime) throws IOException {
- final EfData init = getInit().getData(_t, _idxTime);
- if (init == null) {
- return null;
- }
-
- final boolean isEle = init.isElementData();
-
- if (isEle)
- {
- if (this.eltNewIdxOldIdx != null)
- {
- // le type de la valeur initiale est conserv\xE9e
- double[] newValues = new double[this.getNewGrid().getEltNb()];
-
- for (int i = 0; i < newValues.length; i++)
- {
- final int oldEltIdx = this.eltNewIdxOldIdx.get(i);
- newValues[i] = init.getValue(oldEltIdx);
- }
-
- return new EfDataElement(newValues);
- }
- else
- {
- return init;
- }
- }
+ public EfGridDataProjectionDecorator(final EfGridData _src, EfGridInterface newGrid,
+ InterpolationVectorContainer vectorContainer) {
+ super(_src, newGrid);
- double[] newValues = new double[this.getNewGrid().getPtsNb()];
-/*
- int[] eltIdxList = new int[this.getNewGrid().getEltNb()];
-
- for (int i = 0; i < eltIdxList.length; i++)
- {
- eltIdxList[i] = i;
- }
-*/
- for (int i = 0; i < newValues.length; i++)
- {
- if (this.isPtModified[i])
- {
-/*
- int eltIdx = this.getGrid().getElementIdxContainingPtIdx(i, eltIdxList);
- newValues[i] = this.interpolator.interpolate(eltIdx, this.getGrid().getPtX(i), this.getGrid().getPtY(i), _t, _idxTime);
-*/
- //TODO Calculer la valeur par interpolation.
- newValues[i] = init.getValue(i);
- }
- else
- {
- newValues[i] = init.getValue(i);
- }
- }
-
- return new EfDataNode(newValues);
- }
-
- /**
- * @param eltNewIdxOldIdx the eltNewIdxOldIdx to set
- */
- public void setEltNewIdxOldIdxMap(TIntIntHashMap eltNewIdxOldIdx) {
- this.eltNewIdxOldIdx = eltNewIdxOldIdx;
- }
-
- /**
- * @return the eltNewIdxOldIdx
- */
- public TIntIntHashMap getEltNewIdxOldIdxMap() {
- return eltNewIdxOldIdx;
- }
-
-
- /**
- * @return the isPtModified
- */
- public boolean[] getIsPtModified() {
- return isPtModified;
- }
+// this.interpolator = new EfInterpolator(_src, vectorContainer);
+ }
- /**
- * @param isPtModified the isPtModified to set
- */
- public void setIsPtModified(boolean[] isPtModified) {
- this.isPtModified = isPtModified;
- }
-
- /**
- * @return the newGrid_
- */
- public EfGridInterface getNewGrid() {
- return super.getGrid();
- }
+ public EfGridInterface getGrid() {
+ return getNewGrid();
}
- private GISPolygone polygone;
- private InterpolationVectorContainer interpolator;
-
- @Override
- protected EfGridData process(ProgressionInterface prog, CtuluAnalyzeNew log) {
- EfGridInterface grid = this.initGrid.getGrid();
- EfNode[] newNodes = grid.getNodes();
- EfElement[] elements = grid.getElts();
- boolean[] isModified = new boolean[newNodes.length];
- boolean[] isErased = new boolean[grid.getEltNb()];
- Coordinate[] polyCoord = this.polygone.getCoordinates();
-
- for (int i = 0; i < (polyCoord.length - 1); i++)
- {
- // R\xE9cup\xE8ration des points du segment en cours du polygone et calcul de dx et dy.
- double x1 = polyCoord[i].x;
- double y1 = polyCoord[i].y;
- double x2 = polyCoord[i + 1].x;
- double y2 = polyCoord[i + 1].y;
-
- double dx = x2 - x1;
- double dy = y2 - y1;
-
- int[] ptsIndicator = this.computePtsIndicator(newNodes, dx, dy, x1, y1);
-
- this.eraseExteriorElts(isErased, ptsIndicator);
- this.eraseOverstressedElts(elements.length, newNodes, isErased, ptsIndicator, dx, dy);
- this.projectPts(newNodes, isModified, ptsIndicator, dx, dy, x1, y1, x2, y2);
- }
-
- EfElement[] newElements = new EfElement[this.computeNbEltsErased(isErased)];
- TIntIntHashMap eltNewIdxOldIdx = new TIntIntHashMap(newElements.length);
- int currentIdx = 0;
-
- // Cr\xE9ation du nouveau tableau d'\xE9l\xE9ment et de la correspondance des indices.
- for (int i = 0; i < isErased.length; i++)
- {
- if (!isErased[i])
- {
- newElements[currentIdx] = new EfElement(elements[i]);
-
- eltNewIdxOldIdx.put(currentIdx, i);
-
- currentIdx++;
- }
- }
-
- EfGridInterface newGrid = new EfGrid(newNodes, newElements);
+ public EfData getData(final CtuluVariable _t, final int _idxTime) throws IOException {
+ final EfData init = getInit().getData(_t, _idxTime);
+ if (init == null) { return null; }
- EfGridDataProjectionDecorator gridData = new EfGridDataProjectionDecorator(this.initGrid, newGrid, this.interpolator);
-
- gridData.setEltNewIdxOldIdxMap(eltNewIdxOldIdx);
- gridData.setIsPtModified(isModified);
+ final boolean isEle = init.isElementData();
- // Nettoyage du maillage pour enlev\xE9 les points non utilis\xE9.
- EfOperationCleanGrid cleanGrid = new EfOperationCleanGrid();
-
- cleanGrid.setInitGridData(gridData);
- cleanGrid.setMinDistance(0d);
-
- return cleanGrid.process(prog).getGridData();
+ if (isEle) {
+ if (this.eltNewIdxOldIdx != null) {
+ // le type de la valeur initiale est conserv\xE9e
+ double[] newValues = new double[this.getNewGrid().getEltNb()];
+
+ for (int i = 0; i < newValues.length; i++) {
+ final int oldEltIdx = this.eltNewIdxOldIdx.get(i);
+ newValues[i] = init.getValue(oldEltIdx);
+ }
+
+ return new EfDataElement(newValues);
+ } else {
+ return init;
+ }
+ }
+
+ double[] newValues = new double[this.getNewGrid().getPtsNb()];
+ for (int i = 0; i < newValues.length; i++) {
+ if (this.isPtModified[i]) {
+ // TODO Calculer la valeur par interpolation.
+ newValues[i] = init.getValue(i);
+ } else {
+ newValues[i] = init.getValue(i);
+ }
+ }
+
+ return new EfDataNode(newValues);
}
/**
- * Donne le nombre d'\xE9l\xE9ment effac\xE9.
- * @param isErased un tableau contenant pour chaque indice si l'\xE9l\xE9ment repr\xE9sent\xE9 par cette indice a \xE9t\xE9 effac\xE9.
- * @return le nombre d'\xE9l\xE9ment effac\xE9.
+ * @param eltNewIdxOldIdx the eltNewIdxOldIdx to set
*/
- private int computeNbEltsErased(final boolean[] isErased)
- {
- int nbEltsErased = 0;
-
- for (int i = 0; i < isErased.length; i++)
- {
- if (isErased[i])
- {
- nbEltsErased++;
- }
- }
-
- return nbEltsErased;
+ public void setEltNewIdxOldIdxMap(TIntIntHashMap eltNewIdxOldIdx) {
+ this.eltNewIdxOldIdx = eltNewIdxOldIdx;
}
-
+
/**
- * Projette les points fronti\xE8res sur le polygone.
- * @param nodes un tableau contenant tout les noeuds.
- * @param isModified un tableau permettant de savoir si un noeud a \xE9t\xE9 modifi\xE9 (d\xE9plac\xE9 sur le polygone).
- * @param ptsIndicator un tableau contenant des indication pour chaque noeud (0 = ext\xE9rieur, 1 = int\xE9rieur, 2 = fronti\xE8re).
- * @param dx le dx actuel.
- * @param dy le dy actuel.
- * @param x1 le x du premier point du segment actuel du polygone.
- * @param y1 le y du premier point du segment actuel du polygone.
- * @param x2 le x du deuxi\xE8me point du segment actuel du polygone.
- * @param y2 le y du deuxi\xE8me point du segment actuel du polygone.
+ * @return the eltNewIdxOldIdx
*/
- private void projectPts(final EfNode[] nodes, final boolean[] isModified, final int[] ptsIndicator, double dx, double dy, double x1, double y1, double x2, double y2)
- {
- double a1 = 1d / (Math.pow(dx, 2) + Math.pow(dy, 2));
- double a2 = a1 * ((x1 * y2) - (y1 * x2));
-
- for (int i = 0; i < nodes.length; i++)
- {
- // Si le point en cours est sur la fronti\xE8re, il est d\xE9plac\xE9 sur le polygone.
- if (ptsIndicator[i] == 2)
- {
- double a3 = a1 * ((nodes[i].getX() * dx) + (nodes[i].getY() * dy));
-
- nodes[i] = new EfNode(new Coordinate((dx * a3) + (dy * a2), (dy * a3) - (dx * a2)));
-
- isModified[i] = true;
- }
- }
+ public TIntIntHashMap getEltNewIdxOldIdxMap() {
+ return eltNewIdxOldIdx;
}
-
+
/**
- * Creer le tableau des indicateurs.
- * @param nodes un tableau contenant tout les noeuds.
- * @param dx le dx actuel.
- * @param dy le dy actuel.
- * @param x1 le x du premier point du segment actuel du polygone.
- * @param y1 le y du premier point du segment actuel du polygone.
- * @return un tableau contenant des indication pour chaque noeud (0 = ext\xE9rieur, 1 = int\xE9rieur, 2 = fronti\xE8re mais pas setter dans cette m\xE9thode).
+ * @return the isPtModified
*/
- private int[] computePtsIndicator(final EfNode[] nodes, double dx, double dy, double x1, double y1)
- {
- int[] ptsIndicator = new int[nodes.length];
-
- for (int i = 0; i < ptsIndicator.length; i++)
- {
- double nodeX = nodes[i].getX();
- double nodeY = nodes[i].getY();
+ public boolean[] getIsPtModified() {
+ return isPtModified;
+ }
- // Test si le point est \xE0 l'int\xE9rieur du segment actuel du polygone.
- if (dx * (nodeY - y1) >= dy *(nodeX - x1))
- {
- ptsIndicator[i] = 1;
- }
- else
- {
- ptsIndicator[i] = 0;
- }
- }
-
- return ptsIndicator;
+ /**
+ * @param isPtModified the isPtModified to set
+ */
+ public void setIsPtModified(boolean[] isPtModified) {
+ this.isPtModified = isPtModified;
}
-
+
/**
- * Supprime les \xE9l\xE9ments se trouvant \xE0 l'ext\xE9rieur du polygone.
- * @param isErased un tableau contenant pour chaque indice si l'\xE9l\xE9ment repr\xE9sent\xE9 par cette indice a \xE9t\xE9 effac\xE9.
- * @param ptsIndicator un tableau contenant des indication pour chaque noeud (0 = ext\xE9rieur, 1 = int\xE9rieur, 2 = fronti\xE8re).
+ * @return the newGrid_
*/
- private void eraseExteriorElts(final boolean[] isErased, final int[] ptsIndicator)
- {
- EfElement[] elements = this.initGrid.getGrid().getElts();
- boolean mustBeErased;
-
- for (int i = 0; i < isErased.length; i++)
- {
- if (!isErased[i])
- {
- mustBeErased = false;
+ public EfGridInterface getNewGrid() {
+ return super.getGrid();
+ }
+ }
- int[] idx = elements[i].getIndices();
-
- // Si un point de l'\xE9l\xE9ment est \xE0 l'ext\xE9rieur, l'\xE9l\xE9ment est marqu\xE9 comme supprim\xE9.
- for (int j = 0; j < idx.length; j++)
- {
- if (ptsIndicator[idx[j]] == 0)
- {
- mustBeErased = true;
-
- break;
- }
- }
-
- if (mustBeErased)
- {
- isErased[i] = true;
+ private GISPolygone polygone;
+ private InterpolationVectorContainer interpolator;
- // Tout les points de l'\xE9l\xE9ment marqu\xE9 comme supprim\xE9 qui ne sont pas \xE0 l'ext\xE9rieur du polygone, deviennent des points fronti\xE8res.
- for (int j = 0; j < idx.length; j++)
- {
- if (ptsIndicator[idx[j]] != 0)
- {
- ptsIndicator[idx[j]] = 2;
- }
- }
- }
- }
- }
+ @Override
+ protected EfGridData process(ProgressionInterface prog, CtuluAnalyze log) {
+ EfGridInterface grid = this.initGrid.getGrid();
+ EfNode[] newNodes = grid.getNodes();
+ EfElement[] elements = grid.getElts();
+ boolean[] isModified = new boolean[newNodes.length];
+ boolean[] isErased = new boolean[grid.getEltNb()];
+ Coordinate[] polyCoord = this.polygone.getCoordinates();
+
+ for (int i = 0; i < (polyCoord.length - 1); i++) {
+ // R\xE9cup\xE8ration des points du segment en cours du polygone et calcul de dx et dy.
+ double x1 = polyCoord[i].x;
+ double y1 = polyCoord[i].y;
+ double x2 = polyCoord[i + 1].x;
+ double y2 = polyCoord[i + 1].y;
+
+ double dx = x2 - x1;
+ double dy = y2 - y1;
+
+ int[] ptsIndicator = this.computePtsIndicator(newNodes, dx, dy, x1, y1);
+
+ this.eraseExteriorElts(isErased, ptsIndicator);
+ this.eraseOverstressedElts(elements.length, newNodes, isErased, ptsIndicator, dx, dy);
+ this.projectPts(newNodes, isModified, ptsIndicator, dx, dy, x1, y1, x2, y2);
}
-
- /**
- * Supprime les \xE9l\xE9ments surcontraint.
- * @param nbEltToTest le nombre d'\xE9l\xE9ment \xE0 tester en commen\xE7ant par le premier (utilis\xE9 pour la r\xE9cursivit\xE9).
- * @param nodes un tableau contenant tout les noeuds.
- * @param isErased un tableau contenant pour chaque indice si l'\xE9l\xE9ment repr\xE9sent\xE9 par cette indice a \xE9t\xE9 effac\xE9.
- * @param ptsIndicator un tableau contenant des indication pour chaque noeud (0 = ext\xE9rieur, 1 = int\xE9rieur, 2 = fronti\xE8re).
- * @param dx le dx actuel.
- * @param dy le dy actuel.
- */
- private void eraseOverstressedElts(int nbEltToTest, final EfNode[] nodes, final boolean[] isErased, final int[] ptsIndicator, double dx, double dy)
- {
- EfElement[] elements = this.initGrid.getGrid().getElts();
- boolean mustBeErased;
-
- for (int i = 0; i < nbEltToTest; i++)
- {
- if (!isErased[i])
- {
- mustBeErased = true;
- int[] idx = elements[i].getIndices();
-
- // Si tout les points de l'\xE9lement sont des points fronti\xE8res, il est marqu\xE9 comme supprim\xE9.
- for (int j = 0; j < idx.length; j++)
- {
- if (ptsIndicator[idx[j]] != 2)
- {
- mustBeErased = false;
-
- break;
- }
- }
-
- if (!mustBeErased)
- {
- int segementNb = elements[i].getNbEdge();
-
- // Si un segment de l'\xE9l\xE9ment est compos\xE9 de 2 points fronti\xE8res et qu'il est perpendiculaire au segment actuel du polygone, l'\xE9l\xE9ment en cours doit \xEAtre supprim\xE9.
- for (int j = 0; j < segementNb; j++)
- {
- int pt1 = elements[i].getEdgePt1(j);
- int pt2 = elements[i].getEdgePt2(j);
- if ((ptsIndicator[pt1] == 2) && (ptsIndicator[pt2] == 2))
- {
- if (((dx * (nodes[pt2].getX() - nodes[pt1].getX())) + (dy * (nodes[pt2].getY() - nodes[pt1].getY()))) <= 0d)
- {
- mustBeErased = true;
-
- break;
- }
- }
- }
-
- // Si l'\xE9l\xE9ment en cours doit \xEAtre effac\xE9, tout les \xE9l\xE9ments pr\xE9c\xE9dent sont retest\xE9.
- if (mustBeErased)
- {
- for (int j = 0; j < idx.length; j++)
- {
- ptsIndicator[idx[j]] = 2;
- }
-
- this.eraseOverstressedElts(i, nodes, isErased, ptsIndicator, dx, dy);
- }
- }
-
- if (mustBeErased)
- {
- isErased[i] = false;
- }
- }
- }
+ EfElement[] newElements = new EfElement[this.computeNbEltsNotErased(isErased)];
+ TIntIntHashMap eltNewIdxOldIdx = new TIntIntHashMap(newElements.length);
+ int currentIdx = 0;
+
+ // Cr\xE9ation du nouveau tableau d'\xE9l\xE9ment et de la correspondance des indices.
+ for (int i = 0; i < isErased.length; i++) {
+ if (!isErased[i]) {
+ if (elements[i] == null) {
+ log.addFatalError("ef.projection.failed");
+ return null;
+ }
+ newElements[currentIdx] = new EfElement(elements[i]);
+ eltNewIdxOldIdx.put(currentIdx, i);
+
+ currentIdx++;
+ }
}
-/*
- private boolean[] computeIsExteriorPts()
- {
- EfGridInterface grid = this.initGrid.getGrid();
- boolean[] isExteriorPts = new boolean[grid.getPtsNb()];
- EfNode[] nodes = grid.getNodes();
- SimplePointInRing tester = new SimplePointInRing(this.polygone);
-
- for (int i = 0; i < nodes.length; i++)
- {
- isExteriorPts[i] = !(tester.isInside(nodes[i].getCoordinate()));
- }
-
- return isExteriorPts;
- }
- private int[] computeOldIdxNewIdx(boolean[] isExteriorPts)
- {
- int[] oldIdxNewIdx = new int[isExteriorPts.length];
- int newIdx = 0;
-
- for (int i = 0; i < oldIdxNewIdx.length; i++)
- {
- if (isExteriorPts[i])
- {
- oldIdxNewIdx[i] = -1;
- }
- else
- {
- oldIdxNewIdx[i] = newIdx;
-
- newIdx++;
- }
- }
-
- return oldIdxNewIdx;
+ EfGridInterface newGrid = new EfGrid(newNodes, newElements);// TODO new element est null null..
+
+ EfGridDataProjectionDecorator gridData = new EfGridDataProjectionDecorator(this.initGrid, newGrid,
+ this.interpolator);
+
+ gridData.setEltNewIdxOldIdxMap(eltNewIdxOldIdx);
+ gridData.setIsPtModified(isModified);
+
+ // Nettoyage du maillage pour enlev\xE9 les points non utilis\xE9.
+ EfOperationCleanGrid cleanGrid = new EfOperationCleanGrid();
+
+ cleanGrid.setInitGridData(gridData);
+ cleanGrid.setMinDistance(0d);
+
+ return cleanGrid.process(prog).getGridData();
+ }
+
+ /**
+ * Donne le nombre d'\xE9l\xE9ment effac\xE9.
+ *
+ * @param isErased un tableau contenant pour chaque indice si l'\xE9l\xE9ment repr\xE9sent\xE9 par cette indice a \xE9t\xE9 effac\xE9.
+ * @return le nombre d'\xE9l\xE9ment effac\xE9.
+ */
+ private int computeNbEltsNotErased(final boolean[] isErased) {
+ int nbEltsErased = 0;
+
+ for (int i = 0; i < isErased.length; i++) {
+ if (!isErased[i]) {
+ nbEltsErased++;
+ }
}
- private EfElement[] degenerateExteriorElts(boolean[] isExteriorPts)
- {
- EfGridInterface grid = this.initGrid.getGrid();
- EfElement[] newElements = new EfElement[grid.getEltNb()];
-
- //TODO Degenerer les \xE9l\xE9ments ext\xE9rieurs.
-
- return newElements;
+ return nbEltsErased;
+ }
+
+ /**
+ * Projette les points fronti\xE8res sur le polygone.
+ *
+ * @param nodes un tableau contenant tout les noeuds.
+ * @param isModified un tableau permettant de savoir si un noeud a \xE9t\xE9 modifi\xE9 (d\xE9plac\xE9 sur le polygone).
+ * @param ptsIndicator un tableau contenant des indication pour chaque noeud (0 = ext\xE9rieur, 1 = int\xE9rieur, 2 =
+ * fronti\xE8re).
+ * @param dx le dx actuel.
+ * @param dy le dy actuel.
+ * @param x1 le x du premier point du segment actuel du polygone.
+ * @param y1 le y du premier point du segment actuel du polygone.
+ * @param x2 le x du deuxi\xE8me point du segment actuel du polygone.
+ * @param y2 le y du deuxi\xE8me point du segment actuel du polygone.
+ */
+ private void projectPts(final EfNode[] nodes, final boolean[] isModified, final int[] ptsIndicator, double dx,
+ double dy, double x1, double y1, double x2, double y2) {
+ double a1 = 1d / (Math.pow(dx, 2) + Math.pow(dy, 2));
+ double a2 = a1 * ((x1 * y2) - (y1 * x2));
+
+ for (int i = 0; i < nodes.length; i++) {
+ // Si le point en cours est sur la fronti\xE8re, il est d\xE9plac\xE9 sur le polygone.
+ if (ptsIndicator[i] == 2) {
+ double a3 = a1 * ((nodes[i].getX() * dx) + (nodes[i].getY() * dy));
+
+ nodes[i] = new EfNode(new Coordinate((dx * a3) + (dy * a2), (dy * a3) - (dx * a2)));
+
+ isModified[i] = true;
+ }
}
-*/
- public GISPolygone getPolygone() {
- return polygone;
- }
+ }
- public void setPolygone(GISPolygone polygone) {
- this.polygone = polygone;
+ /**
+ * Creer le tableau des indicateurs.
+ *
+ * @param nodes un tableau contenant tout les noeuds.
+ * @param dx le dx actuel.
+ * @param dy le dy actuel.
+ * @param x1 le x du premier point du segment actuel du polygone.
+ * @param y1 le y du premier point du segment actuel du polygone.
+ * @return un tableau contenant des indication pour chaque noeud (0 = ext\xE9rieur, 1 = int\xE9rieur, 2 = fronti\xE8re mais pas
+ * setter dans cette m\xE9thode).
+ */
+ private int[] computePtsIndicator(final EfNode[] nodes, double dx, double dy, double x1, double y1) {
+ int[] ptsIndicator = new int[nodes.length];
+
+ for (int i = 0; i < ptsIndicator.length; i++) {
+ double nodeX = nodes[i].getX();
+ ...
[truncated message content] |