From: <emm...@us...> - 2009-01-08 15:58:22
|
Revision: 4336 http://fudaa.svn.sourceforge.net/fudaa/?rev=4336&view=rev Author: emmanuel_martin Date: 2009-01-08 15:58:18 +0000 (Thu, 08 Jan 2009) Log Message: ----------- Les donn?\195?\169es des attributs des g?\195?\169om?\195?\169tries volatiles (rives, limites de stockages...) sont concerv?\195?\169s dans le temps. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/ControllerBief.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/ControllerBief.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/ControllerBief.java 2009-01-08 13:57:00 UTC (rev 4335) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/controller/ControllerBief.java 2009-01-08 15:58:18 UTC (rev 4336) @@ -67,7 +67,7 @@ public void disableSynchronisers() { String[] names=biefSet_.getBiefNames(); for(int i=0;i<names.length;i++) - biefSet_.getBief(names[i]).disableSynchroniser(false); + biefSet_.getBief(names[i]).disableSynchroniser(); } /** Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java 2009-01-08 13:57:00 UTC (rev 4335) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/model/Bief.java 2009-01-08 15:58:18 UTC (rev 4336) @@ -18,6 +18,7 @@ import org.fudaa.ctulu.CtuluNamedCommand; import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; import org.fudaa.ctulu.gis.GISCoordinateSequenceFactory; import org.fudaa.ctulu.gis.GISPolyligne; @@ -26,7 +27,6 @@ import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; import org.fudaa.ebli.calque.ZModelGeometryListener; import org.fudaa.ebli.calque.ZModeleLigneBrisee; -import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; import org.fudaa.fudaa.commun.FudaaLib; import org.fudaa.fudaa.modeleur.layer.MdlModel1dAxe; import org.fudaa.fudaa.modeleur.layer.MdlModel1dBank; @@ -194,7 +194,7 @@ seqProfil=((GISCoordinateSequenceContainerInterface)profil).getCoordinateSequence(); } double abscisseCurvIntersectionAxe=UtilsProfil1d.abscisseCurviligne(seqProfil, interAxeProfil); - // Ajout des points au profil si n\xE9c\xE9ssaire pour les intersections \\ + // Ajout des points au profil si n\xE9c\xE9ssaire pour les intersections \\ // Rives for (int l=0; l<rives_.getNombre(); l++) createPointIfNeeded(k, (GISPolyligne) rives_.getObject(l)); @@ -217,15 +217,6 @@ valuateProfilIntersection(k, (Geometry) limitesStockages_.getObject(l), idxAttlsGauche, idxAttlsDroite, abscisseCurvIntersectionAxe); } } - // Suppression des anciennes g\xE9om\xE9tries de rives, limites de stockage et lignes directrices \\ - int[] idxRives=new int[rives_.getNombre()]; - for(int i=0;i<rives_.getNombre();i++) - idxRives[i]=i; - ((ZModeleLigneBriseeEditable) rives_).removeLigneBrisee(idxRives, null); - int[] idxLimiteStockage=new int[limitesStockages_.getNombre()]; - for(int i=0;i<limitesStockages_.getNombre();i++) - idxLimiteStockage[i]=i; - limitesStockages_.getGeomData().removeGeometries(idxLimiteStockage, null); // Activation du synchroniser gisSynchroniser_.enable(); } @@ -327,7 +318,7 @@ public void redo() { boolean synchroniserEnable=isSynchroniserActived(); if(synchroniserEnable) - gisSynchroniser_.disable(true); + gisSynchroniser_.disable(); cmd_.redo(); if(synchroniserEnable) gisSynchroniser_.enable(); @@ -335,7 +326,7 @@ public void undo() { boolean synchroniserEnable=isSynchroniserActived(); if(synchroniserEnable) - gisSynchroniser_.disable(true); + gisSynchroniser_.disable(); cmd_.undo(); if(synchroniserEnable) gisSynchroniser_.enable(); @@ -347,7 +338,7 @@ CtuluCommandComposite cmd=new CtuluCommandComposite("R\xE9ordonnancement des profils"); boolean synchroniserEnable=isSynchroniserActived(); if(synchroniserEnable) - gisSynchroniser_.disable(true); + gisSynchroniser_.disable(); Geometry axeHydraulique=(Geometry)axeHydraulique_.getObject(0); CoordinateSequence seqAxeHydraulique=((GISCoordinateSequenceContainerInterface)axeHydraulique).getCoordinateSequence(); // R\xE9ordonnancement des profils selon leur placement sur l'axe hydaulique (abs curv) \\ @@ -412,13 +403,9 @@ /** * D\xE9sactive le synchroniser. - * - * @param _removeGeom - * si \xE0 vrai les g\xE9om\xE9tries g\xE9n\xE9r\xE9es par le synchroniser seront - * d\xE9ruites dans l'op\xE9ration. */ - public void disableSynchroniser(boolean _removeGeom) { - gisSynchroniser_.disable(_removeGeom); + public void disableSynchroniser() { + gisSynchroniser_.disable(); } /** @@ -427,7 +414,7 @@ * Note : * Une fois activ\xE9 le synchroniser met automatiquement \xE0 jour les gis. Cette * m\xE9thode n'est utile que si les instances des models ont \xE9t\xE9 manuellement - * chang\xE9, auquel cas le synchroniser continuea sa synchronisation sur les + * chang\xE9, sinon le synchroniser continuea sa synchronisation sur les * anciens models. */ public void updateSynchroniser() { @@ -458,7 +445,6 @@ private int idxAttRiveDroite_=-1; private int idxAttlsGauche_=-1; private int idxAttlsDroite_=-1; - // TODO lignes directrices /** * Active/met \xE0 jour le synchroniser. @@ -476,18 +462,74 @@ idxAttRiveDroite_=profilsListen_.getGeomData().getIndiceOf(GISAttributeConstants.INTERSECTION_RIVE_DROITE); idxAttlsGauche_=profilsListen_.getGeomData().getIndiceOf(GISAttributeConstants.INTERSECTION_LIMITE_STOCKAGE_GAUCHE); idxAttlsDroite_=profilsListen_.getGeomData().getIndiceOf(GISAttributeConstants.INTERSECTION_LIMITE_STOCKAGE_DROITE); - // TODO lignes directrices + // D\xE9termination des index de g\xE9om\xE9tries + // Rives + if(rivesModified_.getNombre()>0) { + if(isDroite(rivesModified_.getGeomData().getGeometry(0))) + idxRiveDroite_=0; + else + idxRiveGauche_=0; + } + if(rivesModified_.getNombre()>1) { + if(isDroite(rivesModified_.getGeomData().getGeometry(1))) + idxRiveDroite_=1; + else + idxRiveGauche_=1; + } + if(rivesModified_.getNombre()>2) + throw new IllegalArgumentException("Le nombre de rives est sup\xE9rieur \xE0 deux."); + // Limites de stockages + if(limitesStockagsesModified_.getNombre()>0) { + if(isDroite(limitesStockagsesModified_.getGeomData().getGeometry(0))) + idxLimiteStockageDroite_=0; + else + idxLimiteStockageGauche_=0; + } + if(limitesStockagsesModified_.getNombre()>1) { + if(isDroite(limitesStockagsesModified_.getGeomData().getGeometry(1))) + idxLimiteStockageDroite_=1; + else + idxLimiteStockageGauche_=1; + } + if(limitesStockagsesModified_.getNombre()>2) + throw new IllegalArgumentException("Le nombre de limite de stockage est sup\xE9rieur \xE0 deux."); } regenerateAll(); } /** + * D\xE9termine si la courbe est \xE0 gauche de l'axe hydraulique. + */ + private boolean isDroite(Geometry _geom) { + // Recherche d'intersection de _geom avec un profil + boolean found=false; + int i=-1; + Coordinate intersectionRive=null; + while(!found&&++i<profilsListen_.getNombre()) { + Geometry inter=_geom.intersection((Geometry) profilsListen_.getObject(i)); + if(inter.getNumPoints()==1) { + found=true; + intersectionRive=inter.getCoordinate(); + } + } + // Calcul de l'abscisse curviligne de l'axe hydraulique sur le profil. + Geometry axeHydraulique=(Geometry) axeHydraulique_.getObject(0); + Geometry intersection=((Geometry) profilsListen_.getObject(i)).intersection(axeHydraulique); + // D\xE9termination de la gauche + if(found&&intersection.getNumPoints()==1) { + CoordinateSequence seqProfil=profilsListen_.getGeomData().getCoordinateSequence(i); + double abscisseCurvIntersectionAxe=UtilsProfil1d.abscisseCurviligne(seqProfil, intersection.getCoordinate()); + if(abscisseCurvIntersectionAxe>UtilsProfil1d.abscisseCurviligne(seqProfil, intersectionRive)) + return true; + } + return false; + } + + /** * D\xE9active le synchroniser. * @param indique si les g\xE9om\xE9tries volatiles doivent \xEAtre d\xE9truites */ - public void disable(boolean _destroyGeometries) { - if(_destroyGeometries) - destroyGeometries(); + public void disable() { if(profilsListen_!=null) { profilsListen_.removeModelListener(this); profilsListen_=null; @@ -503,7 +545,6 @@ idxAttRiveDroite_=-1; idxAttlsGauche_=-1; idxAttlsDroite_=-1; - // TODO lignes directrices } } @@ -562,7 +603,6 @@ updateGeom(_idxGeom, limitesStockagsesModified_, idxLimiteStockageGauche_, idxAttlsGauche_); else if(_att==GISAttributeConstants.INTERSECTION_LIMITE_STOCKAGE_DROITE) updateGeom(_idxGeom, limitesStockagsesModified_, idxLimiteStockageDroite_, idxAttlsDroite_); - // TODO lignes directrices } public void geometryAction(Object _source, int _idxGeom, Geometry _geom, int _action) { @@ -571,7 +611,6 @@ updateGeom(_idxGeom, rivesModified_, idxRiveDroite_, idxAttRiveDroite_); updateGeom(_idxGeom, limitesStockagsesModified_, idxLimiteStockageGauche_, idxAttlsGauche_); updateGeom(_idxGeom, limitesStockagsesModified_, idxLimiteStockageDroite_, idxAttlsDroite_); - // TODO lignes directrices } } @@ -580,8 +619,6 @@ */ private void regenerateAll() { GISZoneCollection zone=profilsListen_.getGeomData(); - // Suppression des anciennes g\xE9om\xE9tries \\ - destroyGeometries(); // Cr\xE9ation des nouvelles g\xE9om\xE9tries \\ // Rives Coordinate[] riveGauche=new Coordinate[profilsListen_.getNombre()]; @@ -597,26 +634,44 @@ lsGauche[i]=zone.getCoordinateSequence(i).getCoordinate((Integer)zone.getValue(idxAttlsGauche_, i)); lsDroite[i]=zone.getCoordinateSequence(i).getCoordinate((Integer)zone.getValue(idxAttlsDroite_, i)); } - // Lignes directrices - //TODO // Ajout des nouvelles g\xE9o\xE9mtries \\ - //Rives + // Extraction des anciennes donn\xE9es + Object[] dataRiveGauche=getData(idxRiveGauche_, rivesModified_.getGeomData()); + Object[] dataRiveDroite=getData(idxRiveDroite_, rivesModified_.getGeomData()); + Object[] dataLsGauche=getData(idxLimiteStockageGauche_, rivesModified_.getGeomData()); + Object[] dataLsDroite=getData(idxLimiteStockageDroite_, rivesModified_.getGeomData()); + // Destruction des g\xE9om\xE9tries + destroyGeometries(); + // Ajout des geometries if (riveGauche.length>1&&riveGauche[0]!=null&&rivesModified_!=null) - idxRiveGauche_=rivesModified_.getGeomData().addGeometry(new GISPolyligne(new GISCoordinateSequenceFactory().create(riveGauche)), null, null); + idxRiveGauche_=rivesModified_.getGeomData().addGeometry(new GISPolyligne(new GISCoordinateSequenceFactory().create(riveGauche)), dataRiveGauche, null); if (riveDroite.length>1&&riveDroite[0]!=null&&rivesModified_!=null) - idxRiveDroite_=rivesModified_.getGeomData().addGeometry(new GISPolyligne(new GISCoordinateSequenceFactory().create(riveDroite)), null, null); + idxRiveDroite_=rivesModified_.getGeomData().addGeometry(new GISPolyligne(new GISCoordinateSequenceFactory().create(riveDroite)), dataRiveDroite, null); // Limites de stockages if (lsGauche.length>1&&lsGauche[0]!=null&&limitesStockagsesModified_!=null) idxLimiteStockageGauche_=limitesStockagsesModified_.getGeomData().addGeometry( - new GISPolyligne(new GISCoordinateSequenceFactory().create(lsGauche)), null, null); + new GISPolyligne(new GISCoordinateSequenceFactory().create(lsGauche)), dataLsGauche, null); if (lsDroite.length>1&&lsDroite[0]!=null&&limitesStockagsesModified_!=null) idxLimiteStockageDroite_=limitesStockagsesModified_.getGeomData().addGeometry( - new GISPolyligne(new GISCoordinateSequenceFactory().create(lsDroite)), null, null); - // Lignes directrices - // TODO + new GISPolyligne(new GISCoordinateSequenceFactory().create(lsDroite)), dataLsDroite, null); } /** + * Retourne les donn\xE9es. + * retourne null si _idxGeom est invalide. + */ + private Object[] getData(int _idxGeom, GISZoneCollection _zone) { + Object[] data=null; + if (_idxGeom>=0&&_idxGeom<_zone.getNbGeometries()) { + GISAttributeModel[] models=_zone.getModels(); + data=new Object[models.length]; + for (int i=0; i<data.length; i++) + data[i]=models[i].getObjectValueAt(_idxGeom); + } + return data; + } + + /** * Met \xE0 jour la geometrie volatile indiqu\xE9. Le param\xE8tre pass\xE9 est l'index du point \xE0 * mettre \xE0 jour (qui correspond \xE9galement \xE0 la g\xE9om\xE9trie modifi\xE9). */ Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java 2009-01-08 13:57:00 UTC (rev 4335) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/view/VueCourbe.java 2009-01-08 15:58:18 UTC (rev 4336) @@ -95,11 +95,11 @@ // Limite stockage gauche absCurv=data_.getAbsCurvLimiteStockageGauche(); if(absCurv!=-1) - courbe_.addLabel(absCurv, "LG"); + courbe_.addLabel(absCurv, "SG"); // Limite stockage droite absCurv=data_.getAbsCurvLimiteStockageDroite(); if(absCurv!=-1) - courbe_.addLabel(absCurv, "LD"); + courbe_.addLabel(absCurv, "SD"); } public void profilContainerDataModified() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |