From: <bma...@us...> - 2009-03-17 14:55:41
|
Revision: 4551 http://fudaa.svn.sourceforge.net/fudaa/?rev=4551&view=rev Author: bmarchan Date: 2009-03-17 14:55:30 +0000 (Tue, 17 Mar 2009) Log Message: ----------- Tache #199 : Modeleur 1D : La modification d'un Z profil n'?\195?\169tait pas conserv?\195?\169e. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainer.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2009-03-17 14:53:40 UTC (rev 4550) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlVisuPanel.java 2009-03-17 14:55:30 UTC (rev 4551) @@ -105,12 +105,12 @@ protected EbliActionInterface[] getActionsInterface(){ EbliActionInterface[] actions=super.getActionsInterface(); - EbliActionInterface[] allActions=new EbliActionInterface[actions.length+4]; + EbliActionInterface[] allActions=new EbliActionInterface[actions.length+3]; allActions[0]=null; - allActions[2]=new SceneShowOrientationAction(gisEditor_.getPanel().getArbreCalqueModel()); - allActions[3]=new SceneShowLabelAction(gisEditor_.getPanel().getArbreCalqueModel()); + allActions[1]=new SceneShowOrientationAction(gisEditor_.getPanel().getArbreCalqueModel()); + allActions[2]=new SceneShowLabelAction(gisEditor_.getPanel().getArbreCalqueModel()); for(int i=0;i<actions.length;i++) - allActions[i+4]=actions[i]; + allActions[i+3]=actions[i]; return allActions; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainer.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainer.java 2009-03-17 14:53:40 UTC (rev 4550) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainer.java 2009-03-17 14:55:30 UTC (rev 4551) @@ -60,14 +60,14 @@ public double getAbsCurvAxeHydrauliqueOnProfil(); /** - * Enregistre l'abcisse curviligne du point indiqu\xE9 en param\xE8tre. - * Ce changement d'abscisse curviligne fonctionne sur tout les points. - * Si un points extr\xE9mit\xE9 est chang\xE9, le point 2D est d\xE9plac\xE9 sur son axe, - * la longueur globale n'est pas concerv\xE9e dans l'op\xE9ration. + * Enregistre l'abscisse curviligne du point indiqu\xE9 en param\xE8tre. + * Ce changement d'abscisse curviligne fonctionne sur tous les points. + * Si un point extr\xE9mit\xE9 est chang\xE9, le point 2D est d\xE9plac\xE9 sur son axe, + * la longueur globale n'est pas conserv\xE9e dans l'op\xE9ration. * Si c'est un point de rupture le point 2D est d\xE9plac\xE9 de telle mani\xE8re - * que la longueur globale soit concerv\xE9e. - * Pour les autres points, le point 2D est d\xE9plac\xE9 sur son axe en concervant - * la longeur globale. + * que la longueur globale soit conserv\xE9e. + * Pour les autres points, le point 2D est d\xE9plac\xE9 sur son axe en conservant + * la longueur globale. */ public void setCurv(int _idxPoint, double _value, CtuluCommandContainer _cmd) throws ProfilContainerException; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java 2009-03-17 14:53:40 UTC (rev 4550) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/ProfilContainerAdapter.java 2009-03-17 14:55:30 UTC (rev 4551) @@ -112,12 +112,14 @@ private BiefContainer biefContainer_; /** Le profil selectionn\xE9. */ private int idxProfilSelected_=-1; + /** La collection contenant les Z des points du profil selectionn\xE9. */ private CtuluCollection z_; + /** La liste contenant les abscisses en travers du profil selectionn\xE9 */ private List<Double> curv_; // Caches \\ private int idxZMax_; private int idxZMin_; - /** D\xE9calage de l'axe hydraulique. */ + /** D\xE9calage de d\xE9but d'axe hydraulique. */ private double curviligneDecalage_; /** Les points de ruptures du profils sont contenus dans cet ensemble. */ private Set<Integer> idxRuptures_=new HashSet<Integer>(); @@ -239,8 +241,6 @@ int idxAttrDecCurv=biefContainer_.getZoneAxeHydraulique().getIndiceOf(GISAttributeConstants.CURVILIGNE_DECALAGE); curviligneDecalage_=(Double) biefContainer_.getZoneAxeHydraulique().getValue(idxAttrDecCurv, 0); } - z_=(CtuluCollection)biefContainer_.getZoneProfils().getValue(biefContainer_.getZoneProfils().getIndiceOf(biefContainer_.getZoneProfils().getAttributeIsZ()), idxProfilSelected_); - curv_=new ArrayList<Double>(); CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)biefContainer_.getZoneProfils().getGeometry(idxProfilSelected_)).getCoordinateSequence(); // Verifie qu'on a bien au minimum deux points. \\ if (seq.size()<2) @@ -249,11 +249,7 @@ /* for (int i=1; i<seq.size(); i++) if (seq.getX(i-1)==seq.getX(i)&&seq.getY(i-1)==seq.getY(i)) throw new ProfilContainerException(FudaaLib.getS("Au moins deux points dans le profil sont confondus.")); -*/ // Calcul des acbscisses curvilignes => hypoth\xE8se d'ordonnancement correcte des points \\ - updateCacheCurv(); - // Remplissage du cache Z \\ - updateCacheZ(); - +*/ // Verifie que le profil donn\xE9 ne poss\xE8de pas des axes qui se coupent entre eux \\ for(int i=1;i<seq.size();i++){ Geometry mainAxe=GISGeometryFactory.INSTANCE.createLineString(new Coordinate[]{seq.getCoordinate(i-1), seq.getCoordinate(i)}); @@ -300,7 +296,17 @@ for (int i=0; i<idxRuptures_.size(); i++) idxRuptures[i+1]=it.next(); idxRuptures[idxRuptures.length-1]=seq.size()-1; - LibUtils.linearisePolyligne(biefContainer_.getZoneProfils(), idxProfilSelected_, idxRuptures, null); + // On ne lin\xE9arise plus. Pose des probl\xE8me lors des undo, car les collections sont modifi\xE9es. Ce n'est pas priori pas g\xE9nant, + // les points de ruptures fonctionnent semblent regler une partie du probl\xE8me. +// LibUtils.linearisePolyligne(biefContainer_.getZoneProfils(), idxProfilSelected_, idxRuptures, null); + + z_=(CtuluCollection)biefContainer_.getZoneProfils().getValue(biefContainer_.getZoneProfils().getIndiceOf(biefContainer_.getZoneProfils().getAttributeIsZ()), idxProfilSelected_); + curv_=new ArrayList<Double>(); + // Calcul des acbscisses curvilignes => hypoth\xE8se d'ordonnancement correcte des points \\ + updateCacheCurv(); + // Remplissage du cache Z \\ + updateCacheZ(); + } catch(ProfilContainerException _exp) { // Remise dans un \xE9tat coh\xE9rent @@ -679,6 +685,8 @@ } public void setCurv(int _idxPoint, double _value, CtuluCommandContainer _cmd) throws ProfilContainerException { + if (getCurv(_idxPoint)==_value) return; + if(curv_==null||_idxPoint<0||_idxPoint>=curv_.size()) // Si curv_!=null alors z et index_ ont des valeurs coh\xE9rentes throw new IllegalArgumentException("Cet index n'existe pas."); // Extraction des coordonn\xE9es de la g\xE9om\xE9trie pour pouvoir les modifier par la suite @@ -717,7 +725,7 @@ curv_.set(_idxPoint, _value); } else - throw new ProfilContainerException(FudaaLib.getS("Point de rupture non d\xE9pla\xE7able.")); + throw new ProfilContainerException(FudaaLib.getS("Point de rupture non d\xE9pla\xE7able suivant l'abscisse en travers")); // // Cas complexe : l'index est sur un point de rupture \\ // else { @@ -926,6 +934,8 @@ } public void setZ(int _idxPoint, double _value, CtuluCommandContainer _cmd) { + if (getZ(_idxPoint)==_value) return; + if (z_==null||_idxPoint<0||_idxPoint>=z_.getSize()) throw new IllegalArgumentException("Cet index n'existe pas."); CtuluCommandComposite cmd=new CtuluCommandComposite("Changement z"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |