From: <had...@us...> - 2009-01-20 19:35:51
|
Revision: 4386 http://fudaa.svn.sourceforge.net/fudaa/?rev=4386&view=rev Author: hadouxad Date: 2009-01-20 19:35:40 +0000 (Tue, 20 Jan 2009) Log Message: ----------- Modified Paths: -------------- branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MVProfileCourbeModel.java branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileTreeModel.java branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeModel.java branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeTreeModel.java branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostVisuPanel.java branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrReplayCurvesData.java branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/dialogSpec/TrPostWizardProfilSpatial.java Modified: branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MVProfileCourbeModel.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MVProfileCourbeModel.java 2009-01-20 19:33:53 UTC (rev 4385) +++ branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MVProfileCourbeModel.java 2009-01-20 19:35:40 UTC (rev 4386) @@ -26,10 +26,12 @@ import org.fudaa.dodico.ef.operation.EfLineIntersectionsResultsI; import org.fudaa.dodico.h2d.type.H2dVariableType; import org.fudaa.ebli.calque.BCalqueLegende; +import org.fudaa.ebli.courbe.EGGrapheTreeModel; import org.fudaa.ebli.palette.BPaletteInfo.InfoData; import org.fudaa.ebli.visuallibrary.EbliWidget; import org.fudaa.fudaa.tr.common.TrResource; import org.fudaa.fudaa.tr.post.TrPostCommonImplementation; +import org.fudaa.fudaa.tr.post.TrPostCourbeTreeModel; import org.fudaa.fudaa.tr.post.TrPostProjet; import org.fudaa.fudaa.tr.post.TrPostSource; import org.fudaa.fudaa.tr.post.TrPostVisuPanel; @@ -234,8 +236,9 @@ return res_.getIntersect(_i).isRealIntersection(); } + public boolean isRemovable_=false; public boolean isRemovable() { - return false; + return isRemovable_; } public boolean isSegmentDrawn(final int _i) { @@ -402,7 +405,7 @@ TrPostCommonImplementation implementation=(TrPostCommonImplementation)impl; //-- on cree une vue 2d a partir du fichier source fourni et on le centre sur le point interpol\xE9 ou non --// - TrReplayCurvesData.getInstance().constructProfilSpatialOrigine(this, implementation); + TrReplayCurvesData.getInstance().getProfilSpatialOrigine(this, implementation); } @@ -421,7 +424,20 @@ public void setBuilder(EfLineIntersectionsResultsBuilder _builder) { this.builder_ = _builder; } + + + public void replayData(org.fudaa.ebli.courbe.EGGrapheTreeModel model,Map infos, CtuluUI impl) { + if(!(impl instanceof TrPostCommonImplementation)){ + impl.error(TrResource.getS("Impossible de r\xE9cup\xE9rer la bonne interface fudaa")); + return; + } + TrPostCommonImplementation implementation=(TrPostCommonImplementation)impl; + + //-- on cree une vue 2d a partir du fichier source fourni et on le centre sur le point interpol\xE9 ou non --// + TrReplayCurvesData.getInstance().getProfilSpatialReplayData((MvProfileTreeModel)model, this, implementation); + + } } Modified: branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java 2009-01-20 19:33:53 UTC (rev 4385) +++ branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileBuilder.java 2009-01-20 19:35:40 UTC (rev 4386) @@ -246,18 +246,10 @@ public String format(double value,int nbChiffresSignificatifs){ - - double val=0; - String forme="#."; - for(int i=0;i<nbChiffresSignificatifs;i++) forme+="0"; - DecimalFormat df = new DecimalFormat(forme); - - - return df.format(value); } Modified: branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileTreeModel.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileTreeModel.java 2009-01-20 19:33:53 UTC (rev 4385) +++ branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/meshviewer/profile/MvProfileTreeModel.java 2009-01-20 19:35:40 UTC (rev 4386) @@ -10,6 +10,7 @@ import java.awt.Color; import java.awt.Component; import java.awt.EventQueue; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -31,6 +32,7 @@ import org.fudaa.ctulu.CtuluVariable; import org.fudaa.ctulu.ProgressionInterface; import org.fudaa.ctulu.gis.GISGeometryFactory; +import org.fudaa.ctulu.gis.GISZoneCollectionPoint; import org.fudaa.ctulu.gui.CtuluLibSwing; import org.fudaa.dodico.commun.DodicoLib; import org.fudaa.dodico.ef.operation.EfLineIntersection; @@ -42,6 +44,7 @@ import org.fudaa.dodico.h2d.type.H2dVariableType; import org.fudaa.dodico.mesure.EvolutionReguliere; import org.fudaa.dodico.mesure.EvolutionReguliereInterface; +import org.fudaa.ebli.calque.BCalqueLegende; import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.ebli.courbe.EGActionReplayDataCourbe; import org.fudaa.ebli.courbe.EGAxeVertical; @@ -53,6 +56,7 @@ import org.fudaa.ebli.courbe.EGGrapheTreeModel; import org.fudaa.ebli.courbe.EGGroup; import org.fudaa.ebli.courbe.EGObject; +import org.fudaa.ebli.visuallibrary.EbliWidget; import org.fudaa.fudaa.commun.courbe.FudaaCourbeModel; import org.fudaa.fudaa.commun.courbe.FudaaCourbeTimeListModel; import org.fudaa.fudaa.commun.courbe.ScopeCourbeModel; @@ -61,15 +65,19 @@ import org.fudaa.fudaa.meshviewer.export.MvExportChooseVarAndTime; import org.fudaa.fudaa.tr.post.ScopCourbeTreeModel; +import org.fudaa.fudaa.tr.post.TrPostCommonImplementation; import org.fudaa.fudaa.tr.post.TrPostCourbeModel; import org.fudaa.fudaa.tr.post.TrPostProjet; import org.fudaa.fudaa.tr.post.TrPostSource; +import org.fudaa.fudaa.tr.post.TrPostVisuPanel; import org.fudaa.fudaa.tr.post.actions.TrPostProfileAction; import com.memoire.bu.BuLib; import com.memoire.bu.BuResource; import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LineString; /** @@ -83,17 +91,17 @@ EfLineIntersectionsResultsBuilder builderMesh_; EfLineIntersectionsResultsMng resMesh_; - EfLineIntersectionsCorrectionTester tester_; - - /** - * Ligne initialement utilis\xE9e pour la creation de la courbe - */ - LineString initLineNode; - LineString initLineMesh; - - - public MvProfileTarget target_; + EfLineIntersectionsCorrectionTester tester_; + /** + * Ligne initialement utilis\xE9e pour la creation de la courbe + */ + LineString initLineNode; + LineString initLineMesh; + + + public MvProfileTarget target_; + public MvProfileTreeModel(final MvProfileTarget _target, final EfLineIntersectionsCorrectionTester _tester) { super(); timeModel_ = _target.getTimeModel(); @@ -123,8 +131,8 @@ builderNode_ = _builderNode; if(builderNode_!=null ) initLineNode=builderNode_.getInitLine_(); - - + + } public EfLineIntersectionsResultsBuilder getBuilderFor(final CtuluVariable _v) { @@ -192,6 +200,105 @@ } + /** + * Rejoue les donn\xE9es de la polyligne avec les nouvelles infos. + * Si boolean ecraser est a false, Cree sune nouvelle courbe avec le mod\xE8le qui convient. + * Dans le cas ou ecraser est \xE0 true, on ecrase les infos du modele par ceux des param d'entree. + * Version r\xE9serv\xE9s aux points r\xE9els + * @param _model + * @param _src + * @param _idxToAdd + * @param _cmd + * @param _prog + * @param newVariable + * @param ecraser + */ + public void replayPoints(TrPostCommonImplementation impl,TrPostVisuPanel vue2d,MVProfileCourbeModel _model,final TrPostSource _src, final int[] _idxToAdd, final CtuluCommandContainer _cmd, + final ProgressionInterface _prog, H2dVariableType newVariable,int newTimeStep, boolean ecraser) { + + //-- ajout de la variable --// + final MvProfileCourbeGroup groupVar = getGroup(newVariable, true); + + + //-- creation de la polyligne --// + GISZoneCollectionPoint points=new GISZoneCollectionPoint(); + for(int i=0;i<_idxToAdd.length;i++) + points.add(_src.getGrid().getPtX(_idxToAdd[i]),_src.getGrid().getPtY(_idxToAdd[i]),0); + LineString polyligne=new LineString(points,new GeometryFactory()); + + + //-- on cree la nouvelle courbe pour la variable correspondante --// + MvProfileTarget target=new TrPostProfileAction.ProfileAdapter(_src,impl.getCurrentProject()); + MvProfileBuilder builder=new MvProfileBuilderFromLine(target,impl,polyligne,vue2d,new MvProfileCoteTester()); + //-- intersectionResultI --// + EfLineIntersectionsResultsI res=builder.getDefaultRes(_model.variable_, impl.getMainProgression()); + //-- EfLineIntersectionsResultsBuilder --// + EfLineIntersectionsResultsBuilder efbuilder=new EfLineIntersectionsResultsBuilder(polyligne,_model.res_,new MvProfileCoteTester()); + MVProfileCourbeModel newModele=new MVProfileCourbeModel(newVariable,_src,newTimeStep,efbuilder,impl.getMainProgression()); + + //-- titre --// + String title=newVariable.toString() + CtuluLibString.ESPACE ; + if(newVariable.getCommonUnit()!=null) + title+="("+newVariable.getCommonUnit()+")"+ CtuluLibString.ESPACE ; + title+=_src.getTimeStep(newTimeStep); + //-- on ajoute les extremites du segment choisi --// + title+=", P1("+format(polyligne.getCoordinateN(0).x,2)+";"+format(polyligne.getCoordinateN(0).y,2)+")"+";"+"P"+polyligne.getNumPoints()+"("+format(polyligne.getCoordinateN(polyligne.getNumPoints()-1).x,2)+";"+format(polyligne.getCoordinateN(polyligne.getNumPoints()-1).y,2)+")"; + newModele.setTitle(title); + + //-- creation de la nouvelle courbe --// + MvProfileCourbeTime newchild = new MvProfileCourbeTime(groupVar, newModele, target.getTimeModel()); + groupVar.addEGComponent(newchild); + + + //-- si ecraser, on supprime la courbe --// + if(ecraser){ + this.removeModele(_model,_cmd); + + } + + + fireStructureChanged(); + + } + + /** + * Methode qui supprime la courbe pour son modele du profil spatial. + * Supprime \xE9galement le groupe de variable si ce dernier ne contient pas d'autres courbes. + * @param model de la courbe a supprimer + * @param mng + */ + public void removeModele(MVProfileCourbeModel model,CtuluCommandContainer mng){ + model.isRemovable_=true; + //-- on recupere le groupe du modele --// + final MvProfileCourbeGroup groupVar = getGroup(model.getVariable(), false); + EGCourbeChild[] liste=new EGCourbeChild[1]; + boolean trouve=false; + for (int i = groupVar.getChildCount() - 1;!trouve && i >= 0; i--) { + final MVProfileCourbeModel res = (MVProfileCourbeModel) groupVar.getCourbeAt(i).getModel(); + if (res==model) { + liste[0]=groupVar.getCourbeAt(i); + trouve=true; + } + } + if(trouve) + removeCurves(liste,mng ); + + //-- test si le groupe ne contient rien, on le degage --// + if(groupVar.getEGChilds()==null || groupVar.getEGChilds().length==0){ + this.remove(groupVar); + + } + } + + public String format(double value,int nbChiffresSignificatifs){ + String forme="#."; + for(int i=0;i<nbChiffresSignificatifs;i++) + forme+="0"; + DecimalFormat df = new DecimalFormat(forme); + return df.format(value); + } + + MvProfileGridPalette paletteGrid_; public EfLineIntersectionsResultsI[] getDefaultRes() { @@ -646,7 +753,7 @@ } - + /** * Methode qui permet de fusionner le model courant avec un autre model. Utilsier poru la fusion de courbes spatiales * et l ajout dans d autres courbes. @@ -656,31 +763,31 @@ */ public void mergeWithAnotherScopeTreeModel(final ScopCourbeTreeModel anotherModel) { // -- parcours de la liste des variables du graphe a fusionner --// - - - // -- on recherche le group associe a la variale dans l autre graphe - // sinon on le cree --// - final MvProfileCourbeGroup group = this.getGroup(H2dVariableType.SANS, true); - - // -- on recupere toutes les courbes associees a la var pour le - // graphe merges - - final EGGroup g = anotherModel.getGroupFor(H2dVariableType.SANS); - for (int i = g.getChildCount() - 1; i >= 0; i--) { - if (g.getCourbeAt(i).getModel() instanceof ScopeCourbeModel) { - - group.addEGComponent((EGCourbeChild) g.getCourbeAt(i).duplicate(group, new EGGrapheDuplicator())); - - } + // -- on recherche le group associe a la variale dans l autre graphe + // sinon on le cree --// + final MvProfileCourbeGroup group = this.getGroup(H2dVariableType.SANS, true); - } + + // -- on recupere toutes les courbes associees a la var pour le + // graphe merges + + final EGGroup g = anotherModel.getGroupFor(H2dVariableType.SANS); + for (int i = g.getChildCount() - 1; i >= 0; i--) { + if (g.getCourbeAt(i).getModel() instanceof ScopeCourbeModel) { + + + group.addEGComponent((EGCourbeChild) g.getCourbeAt(i).duplicate(group, new EGGrapheDuplicator())); + + } + + } this.fireStructureChanged(); } - + protected MvProfileGridPalette getPaletteGrid() { return paletteGrid_; } @@ -698,10 +805,10 @@ final List<EGCourbeChild> childs = new ArrayList<EGCourbeChild>(_crb.length); for (int i = 0; i < _crb.length; i++) { final EGCourbeChild child = new EGCourbeChild(gr, new FudaaCourbeModel(new EvolutionReguliere(_crb[i]))); - + //-- on met a jour si la courbe est un nuage de points ou non --// child.setNuagePoints_(_crb[i].isNuagePoints()); - + childs.add(child); gr.addEGComponent(child); } @@ -713,66 +820,67 @@ } - - public void finalizePersistance(){ - - //-- recupere les groupes de la persistance qui doivent etre supprim\xE9 car ne sont pas des liens directs avec les variables H2dVariableType du projet--// + + public void finalizePersistance(){ + + //-- recupere les groupes de la persistance qui doivent etre supprim\xE9 car ne sont pas des liens directs avec les variables H2dVariableType du projet--// ArrayList<EGGroup> listeGroupeAsupprimer=new ArrayList<EGGroup>(); - - - for(int i=0;i<this.getNbEGObject();i++){ - EGObject eg=this.getEGObject(i); - if((this.getEGObject(i) instanceof EGGroup) && !(this.getEGObject(i) instanceof MvProfileCourbeGroup)){ - - EGGroup groupe=(EGGroup) this.getEGObject(i); - ArrayList<EGCourbeChild> listeCourbeToAdd=new ArrayList<EGCourbeChild>(); - MvProfileCourbeGroup nvGroupe=null; - for(int k=0;k<groupe.getChildCount();k++){ + + + for(int i=0;i<this.getNbEGObject();i++){ + EGObject eg=this.getEGObject(i); + if((this.getEGObject(i) instanceof EGGroup) && !(this.getEGObject(i) instanceof MvProfileCourbeGroup)){ + + EGGroup groupe=(EGGroup) this.getEGObject(i); + ArrayList<EGCourbeChild> listeCourbeToAdd=new ArrayList<EGCourbeChild>(); + MvProfileCourbeGroup nvGroupe=null; + for(int k=0;k<groupe.getChildCount();k++){ if(groupe.getCourbeAt(k)!=null){ EGCourbeChild courbe=groupe.getCourbeAt(k); - + if(courbe.getModel()!=null && (courbe.getModel() instanceof MVProfileCourbeModel)){ // List childrens=groupe.getChildren(); MVProfileCourbeModel model=(MVProfileCourbeModel) courbe.getModel(); //-- recherche ou creation du bon groupe correspondant--// - nvGroupe=getGroup(model.variable_,true); + nvGroupe=getGroup(model.variable_,true); //nvGroupe.addEGComponent(courbe); - + listeCourbeToAdd.add(courbe); - - + + }else{ //-- on cree le groupe sans car la courbe n'est pas profil spatioal, elel peut etre socpgen--// - nvGroupe=getGroup(H2dVariableType.SANS,true); + nvGroupe=getGroup(H2dVariableType.SANS,true); //nvGroupe.addEGComponent(courbe); //listeVar.put(groupe, MvProfileFillePanel.createGroupFor(H2dVariableType.SANS)); listeCourbeToAdd.add(courbe); } - - } - + } - - //-- ajout de la liste des children dans le bon groupe --// + + } + + //-- ajout de la liste des children dans le bon groupe --// + if(nvGroupe!=null) nvGroupe.addEGComponent(listeCourbeToAdd); - - //-- ajout du groupe dans la liste a supprimer --// - listeGroupeAsupprimer.add(groupe); - } + + //-- ajout du groupe dans la liste a supprimer --// + listeGroupeAsupprimer.add(groupe); } - - this.fireStructureChanged(); - //-- ensuite on vire tout les eggroup et on les remplies dans les goup --// - for(EGGroup groupe:listeGroupeAsupprimer){ + } + this.fireStructureChanged(); + //-- ensuite on vire tout les eggroup et on les remplies dans les goup --// + for(EGGroup groupe:listeGroupeAsupprimer){ + super.remove(groupe); - - } - - - - } - + + } + + + + } + @Override public EGGrapheModel duplicate(final EGGrapheDuplicator _duplicator) { final MvProfileTreeModel duplic = new MvProfileTreeModel(); @@ -792,7 +900,7 @@ //-- duplication du target --// duplic.target_=this.target_; - + return duplic; } @@ -822,21 +930,22 @@ MvProfileTreeModelPersist dataPersistante=(MvProfileTreeModelPersist) sepcPersitData; //-- remplissage du model avec les datas--// dataPersistante.fillModelWithData(this,Params); -} - - + } + + /** - * Les actions des courbes specifiques: l'ajout de variable. - */ - public List<EbliActionInterface> getSpecificsActionsCurvesOnly(EGGraphe _target,CtuluUI ui) { - List<EbliActionInterface> listeActions=new ArrayList<EbliActionInterface>(); - - - //-- action replay data --// + * Les actions des courbes specifiques: l'ajout de variable. + */ + public List<EbliActionInterface> getSpecificsActionsCurvesOnly(EGGraphe _target,CtuluUI ui) { + List<EbliActionInterface> listeActions=new ArrayList<EbliActionInterface>(); + + if(EbliWidget.AMELIO_LOT_VISIBLE){ + //-- action replay data --// listeActions.add(new EGActionReplayDataCourbe.CourbeOnly(this,this.getSelectedComponent().getModel(),ui)); - return listeActions; - } - + return listeActions; + } + + } \ No newline at end of file Modified: branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeModel.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeModel.java 2009-01-20 19:33:53 UTC (rev 4385) +++ branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeModel.java 2009-01-20 19:35:40 UTC (rev 4386) @@ -108,8 +108,9 @@ final EfData data = source_.getData(var_, i); if (data == null) { FuLog.warning("TRP: data is null for " + var_); + + }else super.y_[i] = ptIdx_.getInterpolateValue(getVar(), data, i, source_); - } } } @@ -534,7 +535,7 @@ TrPostCommonImplementation implementation=(TrPostCommonImplementation)impl; //-- on cree une vue 2d a partir du fichier source fourni et on le centre sur le point interpol\xE9 ou non --// - TrReplayCurvesData.getInstance().constructEvolTemporelleOrigine(this, implementation); + TrReplayCurvesData.getInstance().getEvolTemporelleOrigine(this, implementation); } @@ -546,7 +547,7 @@ TrPostCommonImplementation implementation=(TrPostCommonImplementation)impl; //-- on cree une vue 2d a partir du fichier source fourni et on le centre sur le point interpol\xE9 ou non --// - TrReplayCurvesData.getInstance().constructEvolTemporelleReplayData((TrPostCourbeTreeModel)model, this, implementation); + TrReplayCurvesData.getInstance().getEvolTemporelleReplayData((TrPostCourbeTreeModel)model, this, implementation); } Modified: branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeTreeModel.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeTreeModel.java 2009-01-20 19:33:53 UTC (rev 4385) +++ branches/Prepro-0.92-SNAPSHOT/fudaa/src/org/fudaa/fudaa/tr/post/TrPostCourbeTreeModel.java 2009-01-20 19:35:40 UTC (rev 4386) @@ -25,6 +25,7 @@ import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.CtuluLibArray; +import org.fudaa.ctulu.CtuluRange; import org.fudaa.ctulu.CtuluUI; import org.fudaa.ctulu.ProgressionInterface; import org.fudaa.ctulu.ProgressionUpdater; @@ -45,6 +46,7 @@ import org.fudaa.ebli.courbe.EGGroup; import org.fudaa.ebli.courbe.EGModel; import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.visuallibrary.EbliWidget; import org.fudaa.fudaa.commun.courbe.FudaaCourbeModel; import org.fudaa.fudaa.commun.courbe.ScopeCourbeModel; import org.fudaa.fudaa.commun.courbe.FudaaCourbeImporter.Target; @@ -59,1029 +61,1152 @@ public class TrPostCourbeTreeModel extends EGGrapheTreeModel implements TrPostTimeContentListener, Target { - FudaaCommonImplementation impl_; + FudaaCommonImplementation impl_; - Set intepolPt_; + Set intepolPt_; -// private final boolean isAllTimeStep_; + // private final boolean isAllTimeStep_; - int[] objIdx_; + int[] objIdx_; - // private int[] tidx_; + // private int[] tidx_; - TrPostProjet projet_; + TrPostProjet projet_; - protected EGGroup updating_; + protected EGGroup updating_; - final Map varGroup_; + final Map varGroup_; - Set varSupported_; + Set varSupported_; - /** - * NE PAS UTILISER POUR L'INSTANT SAUVEGARDE. - */ - public TrPostCourbeTreeModel() { - // src_ = null; - varGroup_ = new HashMap(); - impl_ = null; -// isAllTimeStep_ = true; - } + /** + * NE PAS UTILISER POUR L'INSTANT SAUVEGARDE. + */ + public TrPostCourbeTreeModel() { + // src_ = null; + varGroup_ = new HashMap(); + impl_ = null; + // isAllTimeStep_ = true; + } - // les sources devront etre affectees au CourbeModel - // final TrPostSource src_; + // les sources devront etre affectees au CourbeModel + // final TrPostSource src_; - // double[] timeSteps_; + // double[] timeSteps_; - public TrPostCourbeTreeModel(final FudaaCommonImplementation _impl, final TrPostSource _src, final int[] _timeIdx, - final TrPostInterpolatePoint _interpol, final H2dVariableType[] _vars, final TrPostProjet _projet) { - this(_vars, _projet); - intepolPt_.add(_interpol); - } + public TrPostCourbeTreeModel(final FudaaCommonImplementation _impl, final TrPostSource _src, final int[] _timeIdx, + final TrPostInterpolatePoint _interpol, final H2dVariableType[] _vars, final TrPostProjet _projet) { + this(_vars, _projet); + intepolPt_.add(_interpol); + } - /** - * Constructeur permettant de creer un treemodel avec plusieurs point interpol\xE9s - * - * @param _impl - * @param _src - * @param _timeIdx - * @param _interpol : le tableau de points interpoles - * @param _vars - * @param _projet - * @author Adrien Hadoux - */ - public TrPostCourbeTreeModel(final FudaaCommonImplementation _impl, final TrPostSource _src, final int[] _timeIdx, - final TrPostInterpolatePoint[] _interpol, final H2dVariableType[] _vars, final TrPostProjet _projet) { - this(_vars, _projet); + /** + * Constructeur permettant de creer un treemodel avec plusieurs point interpol\xE9s + * + * @param _impl + * @param _src + * @param _timeIdx + * @param _interpol : le tableau de points interpoles + * @param _vars + * @param _projet + * @author Adrien Hadoux + */ + public TrPostCourbeTreeModel(final FudaaCommonImplementation _impl, final TrPostSource _src, final int[] _timeIdx, + final TrPostInterpolatePoint[] _interpol, final H2dVariableType[] _vars, final TrPostProjet _projet) { + this(_vars, _projet); - for (int i = 0; i < _interpol.length; i++) - intepolPt_.add(_interpol[i]); - } + for (int i = 0; i < _interpol.length; i++) + intepolPt_.add(_interpol[i]); + } - /** - * @param _src - */ - public TrPostCourbeTreeModel(final H2dVariableType[] _vars, final TrPostProjet _projet) { - // src_ = _src; - varGroup_ = new HashMap(); - // tidx_ = _timeIdx; - // Arrays.sort(tidx_); - objIdx_ = FuEmptyArrays.INT0; - intepolPt_ = new HashSet(); - varSupported_ = new HashSet(Arrays.asList(_vars)); - projet_ = _projet; - impl_ = projet_.getImpl(); -// isAllTimeStep_ = true;// tidx_.length == _src.getNbTimeStep(); + /** + * @param _src + */ + public TrPostCourbeTreeModel(final H2dVariableType[] _vars, final TrPostProjet _projet) { + // src_ = _src; + varGroup_ = new HashMap(); + // tidx_ = _timeIdx; + // Arrays.sort(tidx_); + objIdx_ = FuEmptyArrays.INT0; + intepolPt_ = new HashSet(); + varSupported_ = new HashSet(Arrays.asList(_vars)); + projet_ = _projet; + impl_ = projet_.getImpl(); + // isAllTimeStep_ = true;// tidx_.length == _src.getNbTimeStep(); - } + } - public TrPostCourbeTreeModel(final int[] _objIdx, final H2dVariableType[] _vars, final TrPostProjet _projet) { - this(/* _src , _timeIdx */_vars, _projet); - objIdx_ = _objIdx; - Arrays.sort(objIdx_); - } + public TrPostCourbeTreeModel(final int[] _objIdx, final H2dVariableType[] _vars, final TrPostProjet _projet) { + this(/* _src , _timeIdx */_vars, _projet); + objIdx_ = _objIdx; + Arrays.sort(objIdx_); + } - protected void addAllCourbes(final TrPostSource _src, final ProgressionInterface _prog, - final CtuluCommandContainer _cmd) { - // buildTimeSteps(); - startUpdating(); - final List modelToUpdate = new ArrayList(); - final List courbeToMem = _cmd == null ? null : new ArrayList(); - final List groupToMem = _cmd == null ? null : new ArrayList(); - // double[] timesInSec = _src.getTime().getTimeListModel().getTimesInSec(); - for (final Iterator it = varSupported_.iterator(); it.hasNext();) { - final H2dVariableType t = (H2dVariableType) it.next(); - final EGGroup g = getGroupFor(t); - final int nb = objIdx_.length; - for (int i = 0; i < nb; i++) { - final int idx = objIdx_[i]; - final TrPostCourbeModel c = containsCourbeFor(t, g, idx); - if (c == null) { + protected void addAllCourbes(final TrPostSource _src, final ProgressionInterface _prog, + final CtuluCommandContainer _cmd) { + // buildTimeSteps(); + startUpdating(); + final List modelToUpdate = new ArrayList(); + final List courbeToMem = _cmd == null ? null : new ArrayList(); + final List groupToMem = _cmd == null ? null : new ArrayList(); + // double[] timesInSec = _src.getTime().getTimeListModel().getTimesInSec(); + for (final Iterator it = varSupported_.iterator(); it.hasNext();) { + final H2dVariableType t = (H2dVariableType) it.next(); + final EGGroup g = getGroupFor(t); + final int nb = objIdx_.length; + for (int i = 0; i < nb; i++) { + final int idx = objIdx_[i]; + final TrPostCourbeModel c = containsCourbeFor(t, g, idx); + if (c == null) { - final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, idx, g, _src); - if (courbeToMem != null) { - courbeToMem.add(courbe); - groupToMem.add(g); - } - modelToUpdate.add(courbe.getModel()); - } else if (c.isYNull()) { - modelToUpdate.add(c); - } - } - for (final Iterator iter = intepolPt_.iterator(); iter.hasNext();) { - final TrPostInterpolatePoint element = (TrPostInterpolatePoint) iter.next(); - final TrPostCourbeModel c = containsCourbeFor(t, g, element); - if (c == null) { - final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, element, g, _src); - if (courbeToMem != null) { - courbeToMem.add(courbe); - groupToMem.add(g); - } - modelToUpdate.add(courbe.getModel()); - } else if (c.isYNull()) { - modelToUpdate.add(c); - } - } - } - if (courbeToMem != null && _cmd != null) { - _cmd.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem - .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem - .toArray(new EGGroup[groupToMem.size()]))); - } - updateCurves((TrPostCourbeModel[]) modelToUpdate.toArray(new TrPostCourbeModel[modelToUpdate.size()]), _prog); - reupdateGroup(); + final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, idx, g, _src); + if (courbeToMem != null) { + courbeToMem.add(courbe); + groupToMem.add(g); + } + modelToUpdate.add(courbe.getModel()); + } else if (c.isYNull()) { + modelToUpdate.add(c); + } + } + for (final Iterator iter = intepolPt_.iterator(); iter.hasNext();) { + final TrPostInterpolatePoint element = (TrPostInterpolatePoint) iter.next(); + final TrPostCourbeModel c = containsCourbeFor(t, g, element); + if (c == null) { + final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, element, g, _src); + if (courbeToMem != null) { + courbeToMem.add(courbe); + groupToMem.add(g); + } + modelToUpdate.add(courbe.getModel()); + } else if (c.isYNull()) { + modelToUpdate.add(c); + } + } + } + if (courbeToMem != null && _cmd != null) { + _cmd.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem + .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem + .toArray(new EGGroup[groupToMem.size()]))); + } + updateCurves((TrPostCourbeModel[]) modelToUpdate.toArray(new TrPostCourbeModel[modelToUpdate.size()]), _prog); + reupdateGroup(); - } + } - /** - * Refonte de la methode addpoints pour gerer les fusions de graphes. fusionne les variables des 2 graphes model afin - * de recuperer toutes les variabels. - * - * @author Adrien Hadoux - * @param _idxToAdd - * @param _cmd - * @param _prog - * @param variablesGrapheMerge - */ - public void addPoints(final TrPostSource _src, final int[] _idxToAdd, final CtuluCommandContainer _cmd, - final ProgressionInterface _prog, final Set variablesGrapheMerge) { - // pour le undo - final int[] old = CtuluLibArray.copy(objIdx_); - final TIntHashSet hasset = new TIntHashSet(objIdx_); - hasset.addAll(_idxToAdd); - objIdx_ = hasset.toArray(); - Arrays.sort(objIdx_); - Arrays.sort(_idxToAdd); - // buildTimeSteps(); - startUpdating(); - final List modelToUpdate = new ArrayList(); - final List courbeToMem = _cmd == null ? null : new ArrayList(); - final List groupToMem = _cmd == null ? null : new ArrayList(); + /** + * Refonte de la methode addpoints pour gerer les fusions de graphes. fusionne les variables des 2 graphes model afin + * de recuperer toutes les variabels. + * + * @author Adrien Hadoux + * @param _idxToAdd + * @param _cmd + * @param _prog + * @param variablesGrapheMerge + */ + public void addPoints(final TrPostSource _src, final int[] _idxToAdd, final CtuluCommandContainer _cmd, + final ProgressionInterface _prog, final Set variablesGrapheMerge) { + // pour le undo + final int[] old = CtuluLibArray.copy(objIdx_); + final TIntHashSet hasset = new TIntHashSet(objIdx_); + hasset.addAll(_idxToAdd); + objIdx_ = hasset.toArray(); + Arrays.sort(objIdx_); + Arrays.sort(_idxToAdd); + // buildTimeSteps(); + startUpdating(); + final List modelToUpdate = new ArrayList(); + final List courbeToMem = _cmd == null ? null : new ArrayList(); + final List groupToMem = _cmd == null ? null : new ArrayList(); - // -- completer les variables du graphe avec celles du graphe merg\xE9 --// - if (variablesGrapheMerge != null) { - for (final Iterator it = variablesGrapheMerge.iterator(); it.hasNext();) { - final H2dVariableType t = (H2dVariableType) it.next(); - varSupported_.add(t); - } - } + // -- completer les variables du graphe avec celles du graphe merg\xE9 --// + if (variablesGrapheMerge != null) { + for (final Iterator it = variablesGrapheMerge.iterator(); it.hasNext();) { + final H2dVariableType t = (H2dVariableType) it.next(); + varSupported_.add(t); + } + } - for (final Iterator it = varSupported_.iterator(); it.hasNext();) { - final H2dVariableType t = (H2dVariableType) it.next(); - final EGGroup g = getGroupFor(t); - final int nb = _idxToAdd.length; - for (int i = 0; i < nb; i++) { - final int idx = _idxToAdd[i]; - final TrPostCourbeModel c = containsCourbeFor(t, g, idx); - if (c == null) { - final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, idx, g, _src); - if (courbeToMem != null) { - courbeToMem.add(courbe); - groupToMem.add(g); - } - modelToUpdate.add(courbe.getModel()); - } else if (c.isYNull()) { - modelToUpdate.add(c); - } - } - } - if (courbeToMem != null && _cmd != null) { - _cmd.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem - .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem - .toArray(new EGGroup[groupToMem.size()])) { + for (final Iterator it = varSupported_.iterator(); it.hasNext();) { + final H2dVariableType t = (H2dVariableType) it.next(); + final EGGroup g = getGroupFor(t); + final int nb = _idxToAdd.length; + for (int i = 0; i < nb; i++) { + final int idx = _idxToAdd[i]; + final TrPostCourbeModel c = containsCourbeFor(t, g, idx); + if (c == null) { + final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, idx, g, _src); + if (courbeToMem != null) { + courbeToMem.add(courbe); + groupToMem.add(g); + } + modelToUpdate.add(courbe.getModel()); + } else if (c.isYNull()) { + modelToUpdate.add(c); + } + } + } + if (courbeToMem != null && _cmd != null) { + _cmd.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem + .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem + .toArray(new EGGroup[groupToMem.size()])) { - @Override - public void redo() { - super.redo(); - final TIntHashSet hassetRedo = new TIntHashSet(objIdx_); - hassetRedo.addAll(_idxToAdd); - objIdx_ = hassetRedo.toArray(); - Arrays.sort(objIdx_); - reupdateGroup(); - } + @Override + public void redo() { + super.redo(); + final TIntHashSet hassetRedo = new TIntHashSet(objIdx_); + hassetRedo.addAll(_idxToAdd); + objIdx_ = hassetRedo.toArray(); + Arrays.sort(objIdx_); + reupdateGroup(); + } - @Override - public void undo() { - super.undo(); - objIdx_ = old; - reupdateGroup(); - } - }); - } - updateCurves((TrPostCourbeModel[]) modelToUpdate.toArray(new TrPostCourbeModel[modelToUpdate.size()]), _prog); - reupdateGroup(); + @Override + public void undo() { + super.undo(); + objIdx_ = old; + reupdateGroup(); + } + }); + } + updateCurves((TrPostCourbeModel[]) modelToUpdate.toArray(new TrPostCourbeModel[modelToUpdate.size()]), _prog); + reupdateGroup(); - } + } - /** - * Refonte de la methode addpoints pour gerer les fusions de graphes. fusionne les variables des 2 graphes model afin - * de recuperer toutes les variabels. - * - * @author Adrien Hadoux - */ - public void addPoints(final TrPostSource _src, final TrPostInterpolatePoint _idxToAdd, - final CtuluCommandContainer _cmd, final ProgressionInterface _prog, final Set variablesGrapheMerge) { - startUpdating(); - // pour le undo - final List modelToUpdate = new ArrayList(); - final List courbeToMem = _cmd == null ? null : new ArrayList(); - final List groupToMem = _cmd == null ? null : new ArrayList(); - this.intepolPt_.add(_idxToAdd); - // -- completer les variables du graphe avec celles du graphe merg\xE9 --// - if (variablesGrapheMerge != null) { - for (final Iterator it = variablesGrapheMerge.iterator(); it.hasNext();) { - final H2dVariableType t = (H2dVariableType) it.next(); - varSupported_.add(t); - } - } - for (final Iterator it = varSupported_.iterator(); it.hasNext();) { - final H2dVariableType t = (H2dVariableType) it.next(); - final EGGroup g = getGroupFor(t); - final TrPostCourbeModel c = containsCourbeFor(t, g, _idxToAdd); - if (c == null) { - final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, _idxToAdd, g, _src); - if (courbeToMem != null) { - courbeToMem.add(courbe); - groupToMem.add(g); - } - modelToUpdate.add(courbe.getModel()); - } else if (c.isYNull()) { - modelToUpdate.add(c); - } - } - if (courbeToMem != null && _cmd != null) { - _cmd.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem - .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem - .toArray(new EGGroup[groupToMem.size()])) { + /** + * Rejoue les donn\xE9es du point avec les nouvelles infos. + * Cree syst\xE9matiquement une nouvelle courbe avec le mod\xE8le qui convient. + * Dans le cas ou ecraser est \xE0 true, on supprime le modele pass\xE9 en paramtere. + * Version r\xE9serv\xE9s aux points r\xE9els + * @param _model + * @param _src + * @param _idxToAdd + * @param _cmd + * @param _prog + * @param newVariable + * @param ecraser + */ + public void replayPoints(TrPostCourbeModel _model,final TrPostSource _src, final int _idxToAdd, final CtuluCommandContainer _cmd, + final ProgressionInterface _prog, H2dVariableType newVariable, boolean ecraser) { - @Override - public void redo() { - super.redo(); - intepolPt_.add(_idxToAdd); - reupdateGroup(); - } + //-- ajout de la variable --// + varSupported_.add(newVariable); + final EGGroup g = getGroupFor(newVariable); + final TrPostCourbeModel c = containsCourbeFor(newVariable, g, _idxToAdd); + EGCourbeChild courbe = null; + if (c == null) { + courbe = TrPostCourbeModel.buildCourbeModel(newVariable, _idxToAdd, g, _src); + } - @Override - public void undo() { - super.undo(); - intepolPt_.remove(_idxToAdd); - reupdateGroup(); - } - }); - } - updateCurves((TrPostCourbeModel[]) modelToUpdate.toArray(new TrPostCourbeModel[modelToUpdate.size()]), _prog); - reupdateGroup(); - } + - /** - * Ajoute une variable par rapport a une courbe evolution temporelle selectionnee. - * La variable a ete choisie ainsi que le fichier source. - * @param modelCourbe - * @param _src - * @param _var - * @param _prog - * @param _cmd - */ - protected void addVariables(TrPostCourbeModel modelCourbe,final TrPostSource _src, final List _var, final ProgressionInterface _prog, - final CtuluCommandContainer _cmd) { - // buildTimeSteps(); - - - //-- Attention cas particulier, il faut conserver le groupe sans variable pour le rajouter a la fin --// -// EGGroup groupeSansVariables =null; -// if(existGroupFor(H2dVariableType.SANS)) -// groupeSansVariables=getGroupFor(H2dVariableType.SANS); - - startUpdating(); - - if(varSupported_==null) - varSupported_= new HashSet(); - - - // fusion graphes - _var.removeAll(varSupported_); - //final int nbPt = objIdx_.length; - final double[] timesInSec = _src.getTime().getTimeListModel().getTimesInSec(); - final TrPostCourbeModel[] model = new TrPostCourbeModel[_var.size()];//_var.size() * (nbPt + intepolPt_.size())]; - int idx = 0; - final List courbeToMem = _cmd == null ? null : new ArrayList(); - final List groupToMem = _cmd == null ? null : new ArrayList(); - for (int i = 0; i < _var.size(); i++) { - final H2dVariableType var = (H2dVariableType) _var.get(i); - final EGGroup g = getGroupFor(var); - // for (int idxPt = 0; idxPt < nbPt; idxPt++) { - - //-- cas reel --// - if(modelCourbe instanceof TrPostCourbeModel.Node){ - final EGCourbeChild c = TrPostCourbeModel.buildCourbeModel(var, ((Integer)modelCourbe.getSelectionPoint()).intValue(), g, _src); - courbeToMem.add(c); - groupToMem.add(g); - model[idx++] = (TrPostCourbeModel) c.getModel(); - } - else{ - //for (final Iterator iter = intepolPt_.iterator(); iter.hasNext();) { - //-- cas point interpol\xE9 --// - - final TrPostInterpolatePoint element = (TrPostInterpolatePoint)modelCourbe.getSelectionPoint(); - final EGCourbeChild c = TrPostCourbeModel.buildCourbeModel(var, element, g, _src); - courbeToMem.add(c); - groupToMem.add(g); - model[idx++] = (TrPostCourbeModel) c.getModel(); - } - } - updateCurves(model, _prog); - varSupported_.addAll(_var); - reupdateCourbes(); - if (courbeToMem != null && _cmd != null) { - final CtuluCommandComposite cmp = new CtuluCommandComposite() { + TrPostCourbeModel[] listeUpdate=new TrPostCourbeModel[1]; + listeUpdate[0]=((TrPostCourbeModel)courbe.getModel()); + updateCurves(listeUpdate, _prog); + + //-- on reajuste les y --// + CtuluRange range=new CtuluRange(courbe.getModel().getYMin(),courbe.getModel().getYMax()); + g.ajusteY(range); + // reupdateGroup(); + + if(ecraser){ + //-- il faut supprimer le modele initial --// + this.removeModele(_model,_cmd); - @Override - protected void actionToDoAfterUndoOrRedo() { - reupdateGroup(); - }; + } + + fireStructureChanged(); + fireAxeAspectChanged(courbe.getAxeY()); + } - @Override - protected boolean isActionToDoAfterUndoOrRedo() { - return true; - }; - }; - cmp.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem - .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem - .toArray(new EGGroup[groupToMem.size()]))); - cmp.addCmd(new CtuluCommand() { + /** + * Rejoue les donn\xE9es du point avec les nouvelles infos. + * Cree syst\xE9matiquement une nouvelle courbe avec le mod\xE8le qui convient. + * Dans le cas ou ecraser est \xE0 true, on supprime le modele pass\xE9 en paramtere. + * Version r\xE9serv\xE9s aux points r\xE9els + * @param _model + * @param _src + * @param _idxToAdd + * @param _cmd + * @param _prog + * @param newVariable + * @param ecraser + */ + public void replayPoints(TrPostCourbeModel _model,final TrPostSource _src, final TrPostInterpolatePoint _idxToAdd, final CtuluCommandContainer _cmd, + final ProgressionInterface _prog, H2dVariableType newVariable, boolean ecraser) { - public void redo() { - varSupported_.addAll(_var); - } + //-- ajout de la variable --// + varSupported_.add(newVariable); + final EGGroup g = getGroupFor(newVariable); + final TrPostCourbeModel c = containsCourbeFor(newVariable, g, _idxToAdd); + EGCourbeChild courbe = null; + if (c == null) { + courbe = TrPostCourbeModel.buildCourbeModel(newVariable, _idxToAdd, g, _src); + } - public void undo() { - varSupported_.removeAll(_var); - } - }); + - _cmd.addCmd(cmp); - } - - - //-- on ajoute de le groupe sans variable si il existait avant les modif: --// -// if(groupeSansVariables!=null){ -// add(groupeSansVariables); -// fireStructureChanged(); -// } + TrPostCourbeModel[] listeUpdate=new TrPostCourbeModel[1]; + listeUpdate[0]=((TrPostCourbeModel)courbe.getModel()); + updateCurves(listeUpdate, _prog); + // reupdateGroup(); + + if(ecraser){ + //-- il faut supprimer le modele initial --// + this.removeModele(_model,_cmd); - } + } + fireStructureChanged(); + fireAxeAspectChanged(courbe.getAxeY()); + + + } - - - - private void buildUpdating() { - if (updating_ == null) { - updating_ = new EGGroup(); - updating_.setTitle(TrResource.getS("Mise \xE0 jour")); - } - } + /** + * Methode qui supprime la courbe pour son modele du profil spatial. + * Supprime \xE9galement le groupe de variable si ce dernier ne contient pas d'autres courbes. + * @param model + * @param mng + */ + public void removeModele(TrPostCourbeModel model,CtuluCommandContainer mng){ - @Override - public boolean canDeleteCourbes() { - return true; - } + //-- on recupere le groupe du modele --// + EGGroup group = (EGGroup) varGroup_.get(model.var_); + EGCourbeChild[] liste=new EGCourbeChild[1]; + boolean trouve=false; + for (int i = group.getChildCount() - 1;!trouve && i >= 0; i--) { + final TrPostCourbeModel res = (TrPostCourbeModel) group.getCourbeAt(i).getModel(); + if (res==model) { + liste[0]=group.getCourbeAt(i); + trouve=true; + } + } + if(trouve) + removeCurves(liste,mng ); - protected TrPostCourbeModel containsCourbeFor(final H2dVariableType _t, final EGGroup _g, final int _idx) { - for (int i = _g.getChildCount() - 1; i >= 0; i--) { - final TrPostCourbeModel res = (TrPostCourbeModel) _g.getCourbeAt(i).getModel(); - if (_t == res.getVar() && res.isCourbeForObject(_idx)) { return res; } - } - return null; - } + //-- test si le groupe ne contient rien, on le degage --// + if(group.getEGChilds()==null || group.getEGChilds().length==0){ + this.remove(group); + this.varGroup_.remove(model.var_); + } + } - protected TrPostCourbeModel containsCourbeFor(final H2dVariableType _t, final EGGroup _g, - final TrPostInterpolatePoint _idx) { - for (int i = _g.getChildCount() - 1; i >= 0; i--) { - final TrPostCourbeModel res = (TrPostCourbeModel) _g.getCourbeAt(i).getModel(); - if (_t == res.getVar() && res.isCourbeForInterpolation(_idx)) { return res; } - } - return null; - } + /** + * Refonte de la methode addpoints pour gerer les fusions de graphes. fusionne les variables des 2 graphes model afin + * de recuperer toutes les variabels. + * + * @author Adrien Hadoux + */ + public void addPoints(final TrPostSource _src, final TrPostInterpolatePoint _idxToAdd, + final CtuluCommandContainer _cmd, final ProgressionInterface _prog, final Set variablesGrapheMerge) { + startUpdating(); + // pour le undo + final List modelToUpdate = new ArrayList(); + final List courbeToMem = _cmd == null ? null : new ArrayList(); + final List groupToMem = _cmd == null ? null : new ArrayList(); + this.intepolPt_.add(_idxToAdd); - /** - * Il n'y a rien a faire. - */ - public void dataAdded(final boolean _isFleche) {} + // -- completer les variables du graphe avec celles du graphe merg\xE9 --// + if (variablesGrapheMerge != null) { + for (final Iterator it = variablesGrapheMerge.iterator(); it.hasNext();) { + final H2dVariableType t = (H2dVariableType) it.next(); + varSupported_.add(t); + } + } - public void dataChanged(final H2dVariableType _old, final H2dVariableType _new, final boolean _contentChanged, - final boolean _isFleche, final Set _varsUsing, final ProgressionInterface _prog) { - if (_isFleche) { return; } - varSupported_.remove(_old); - varSupported_.add(_new); - // si le contenu n'est pas modifie, il faut juste changer les pointeurs des variables - if (_contentChanged || _old == _new) { - final EGCourbe[] cs = getCourbes(); - if (cs == null) { return; } - // rebuild a true si on doit reconstruire le tout - final List modelToUpdate = new ArrayList(); - for (int i = cs.length - 1; i >= 0; i--) { - final TrPostCourbeModel model = (TrPostCourbeModel) cs[i].getModel(); - if (model.getVar() == _old) { - model.setY(null); - model.setVar(_new); - modelToUpdate.add(model); - } else if (_varsUsing != null && _varsUsing.contains(model.getVar())) { - model.setY(null); - modelToUpdate.add(model); - startUpdating(); - } + for (final Iterator it = varSupported_.iterator(); it.hasNext();) { + final H2dVariableType t = (H2dVariableType) it.next(); + final EGGroup g = getGroupFor(t); + final TrPostCourbeModel c = containsCourbeFor(t, g, _idxToAdd); + if (c == null) { + final EGCourbeChild courbe = TrPostCourbeModel.buildCourbeModel(t, _idxToAdd, g, _src); + if (courbeToMem != null) { + courbeToMem.add(courbe); + groupToMem.add(g); + } + modelToUpdate.add(courbe.getModel()); + } else if (c.isYNull()) { + modelToUpdate.add(c); + } + } + if (courbeToMem != null && _cmd != null) { + _cmd.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem + .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem + .toArray(new EGGroup[groupToMem.size()])) { - } - // mise a jour des modeles dans un thread s\xE9par\xE9. - if (modelToUpdate.size() > 0) { + @Override + public void redo() { + super.redo(); + intepolPt_.add(_idxToAdd); + reupdateGroup(); + } - updateCurves((TrPostCourbeModel[]) modelToUpdate.toArray(new TrPostCourbeModel[modelToUpdate.size()]), _prog); - reupdateGroup(); - } - } else { - final ArrayList crbUsingOld = new ArrayList(); - getCourbeFor(_old, crbUsingOld); - for (final Iterator iter = crbUsingOld.iterator(); iter.hasNext();) { - final TrPostCourbeModel model = (TrPostCourbeModel) ((EGCourbe) iter.next()).getModel(); - // on change le pointeur - model.setVar(_new); - } - } - } + @Override + public void undo() { + super.undo(); + intepolPt_.remove(_idxToAdd); + reupdateGroup(); + } + }); + } + updateCurves((TrPostCourbeModel[]) modelToUpdate.toArray(new TrPostCourbeModel[modelToUpdate.size()]), _prog); + reupdateGroup(); - // protected void buildTimeSteps() { - // if (timeSteps_ == null) { - // timeSteps_ = new double[this.src_.getNbTimeStep()/* - // * tidx_.length - // */]; - // // mise a jour des pas de temps - // for (int i = this.src_.getNbTimeStep() - 1; i >= 0; i--) { - // // timeSteps_[i] = src_.getTimeStep(tidx_[i]); - // timeSteps_[i] = src_.getTimeStep(i); - // } - // } - // } + } - public void dataRemoved(final H2dVariableType[] _vars, final boolean _isFleche) { - if (_isFleche || _vars == null) { return; } - varSupported_.removeAll(Arrays.asList(_vars)); - final List courbeToRemove = new ArrayList(); - for (int i = _vars.length - 1; i >= 0; i--) { - getCourbeFor(_vars[i], courbeToRemove); - } - removeCurves((EGCourbeChild[]) courbeToRemove.toArray(new EGCourbeChild[courbeToRemove.size()]), null); + /** + * Ajoute une variable par rapport a une courbe evolution temporelle selectionnee. + * La variable a ete choisie ainsi que le fichier source. + * @param modelCourbe + * @param _src + * @param _var + * @param _prog + * @param _cmd + */ + protected void addVariables(TrPostCourbeModel modelCourbe,final TrPostSource _src, final List _var, final ProgressionInterface _prog, + final CtuluCommandContainer _cmd) { + // buildTimeSteps(); - } - @Override - protected EGCourbeChild duplicateCourbe(final EGCourbeChild _c) { - return null; - } + //-- Attention cas particulier, il faut conserver le groupe sans variable pour le rajouter a la fin --// + // EGGroup groupeSansVariables =null; + // if(existGroupFor(H2dVariableType.SANS)) + // groupeSansVariables=getGroupFor(H2dVariableType.SANS); - /** - * OVERIDE. methode qui demande a l user de choisir sa courbe puis genere une copie avec la source en cours. - * - * @param _child - * @return - */ - @Override - protected EGCourbeChild duplicateWithChooseSrc(final EGCourbeChild _child) { + startUpdating(); - // -- mise en place du chooser des projets sources disponibles --// + if(varSupported_==null) + varSupported_= new HashSet(); - // -- recuperation du source voulu --// - // -- recuperation de la liste des src sous forme de liste --// - final String[] values = formattageDonnees(); - // -- ouverture du chooser --// - final BuDialogChoice chooser = new BuDialogChoice(projet_.impl_.getApp(), projet_.impl_.getInformationsSoftware(), - TrResource.getS("Cr\xE9ation d'un calque"), TrResource.getS("S\xE9lectionnez le jeux de donn\xE9es "), values); + // fusion graphes + _var.removeAll(varSupported_); + //final int nbPt = objIdx_.length; + final double[] timesInSec = _src.getTime().getTimeListModel().getTimesInSec(); + final TrPostCourbeModel[] model = new TrPostCourbeModel[_var.size()];//_var.size() * (nbPt + intepolPt_.size())]; + int idx = 0; + final List courbeToMem = _cmd == null ? null : new ArrayList(); + final List groupToMem = _cmd == null ? null : new ArrayList(); + for (int i = 0; i < _var.size(); i++) { + final H2dVariableType var = (H2dVariableType) _var.get(i); + final EGGroup g = getGroupFor(var); + // for (int idxPt = 0; idxPt < nbPt; idxPt++) { - final int response = chooser.activate(); + //-- cas reel --// + if(modelCourbe instanceof TrPostCourbeModel.Node){ + final EGCourbeChild c = TrPostCourbeModel.buildCourbeModel(var, ((Integer)modelCourbe.getSelectionPoint()).intValue(), g, _src); + courbeToMem.add(c); + groupToMem.add(g); + model[idx++] = (TrPostCourbeModel) c.getModel(); + } + else{ + //for (final Iterator iter = intepolPt_.iterator(); iter.hasNext();) { + //-- cas point interpol\xE9 --// - if (response == 0) { + final TrPostInterpolatePoint element = (TrPostInterpolatePoint)modelCourbe.getSelectionPoint(); + final EGCourbeChild c = TrPostCourbeModel.buildCourbeModel(var, element, g, _src); + courbeToMem.add(c); + groupToMem.add(g); + model[idx++] = (TrPostCourbeModel) c.getModel(); + } + } + updateCurves(model, _prog); + varSupported_.addAll(_var); + reupdateCourbes(); + if (courbeToMem != null && _cmd != null) { + final CtuluCommandComposite cmp = new CtuluCommandComposite() { - final int indiceSOURCESelect = chooser.getSelectedIndex(); + @Override + protected void actionToDoAfterUndoOrRedo() { + reupdateGroup(); + }; - final TrPostSource srcChoisie = projet_.getSource(indiceSOURCESelect); + @Override + protected boolean isActionToDoAfterUndoOrRedo() { + return true; + }; + }; + cmp.addCmd(new CommandAddCourbesMulti((EGCourbeChild[]) courbeToMem + .toArray(new EGCourbeChild[courbeToMem.size()]), (EGGroup[]) groupToMem + .toArray(new EGGroup[groupToMem.size()]))); + cmp.addCmd(new CtuluCommand() { - EGCourbeChild newCurve = null; + public void redo() { + varSupported_.addAll(_var); + } - // -- recuperation du point interpol\xE9 ou non selon le cas --// - // if(_child.getModel() instanceof TrPostCourbeModel.Node){ + public void undo() { + varSupported_.removeAll(_var); + } - // -- CAS COURBE REELLE --// - final TrPostCourbeModel modelBase = (TrPostCourbeModel) _child.getModel(); - final H2dVariableType var = modelBase.getVar(); + }); - // -- verification si le point du model choisi est reel ou interpol\xE9 - // dans la nouvelle source --// - // if (srcChoisie.getGrid().contientPoint(modelBase.getPtX(), modelBase.getPtY())) { - // - // // -- CREATION DE LA COURBE REELE DEPUIS COURBE REELLE --// - // newCurve = TrPostCourbeModel.buildCourbeModel(var, ((TrPostCourbeModel.Node) modelBase).ptIdx_, _child - // .getParentGroup(), srcChoisie); - // } else { - // -- on recupere le point le plus proche pour interpoler --// - final GrPoint pointAInterpole = new GrPoint(modelBase.getPtX(), modelBase.getPtY(), 0); - final int newPtIdx = TrIsoLayerDefault.sondeSelection(pointAInterpole, srcChoisie.getGrid()); + _cmd.addCmd(cmp); + } - if (newPtIdx != -1) { - final TrPostInterpolatePoint interpolatePoint = new TrPostInterpolatePoint(newPtIdx, pointAInterpole.x_, - pointAInterpole.y_, new GISPrecision()); + //-- on ajoute de le groupe sans variable si il existait avant les modif: --// + // if(groupeSansVariables!=null){ + // add(groupeSansVariables); + // fireStructureChanged(); + // } - // -- CREATION DE LA COURBE INTERPOLEE DEPUIS COURBE REELLE --// - newCurve = TrPostCourbeModel.buildCourbeModel(modelBase.getVar(), interpolatePoint, _child.getParentGroup(), - srcChoisie); - // } - } + } - // -- recuperation des y de son duplicata --// - ((TrPostCourbeModel) newCurve.getModel()).setY(new double[modelBase.getY().length]); - final double[] ds = modelBase.getTime(); - for (int i = 0; i < ds.length; i++) { - ((TrPostCourbeModel) newCurve.getModel()).updateY(); - } - newCurve.setTitle(newCurve.getTitle() + " " - + projet_.formatName(projet_.getSource(indiceSOURCESelect).getTitle())); - return newCurve; - } - return null; - } + private void buildUpdating() { + if (updating_ == null) { + updating_ = new EGGroup(); + updating_.setTitle(TrResource.getS("Mise \xE0 jour")); + } + } - String[] formattageDonnees() { + @Override + public boolean canDeleteCourbes() { + return true; + } - final String[] listeSimul = new String[projet_.listeSrc_.size()]; - int cpt = 0; - for (final Iterator<TrPostSource> it = projet_.listeSrc_.iterator(); it.hasNext();) { + protected TrPostCourbeModel containsCourbeFor(final H2dVariableType _t, final EGGroup _g, final int _idx) { + for (int i = _g.getChildCount() - 1; i >= 0; i--) { + final TrPostCourbeModel res = (TrPostCourbeModel) _g.getCourbeAt(i).getModel(); + if (_t == res.getVar() && res.isCourbeForObject(_idx)) { return res; } + } + return null; + } - final TrPostSource src = it.next(); + protected TrPostCourbeModel containsCourbeFor(final H2dVariableType _t, final EGGroup _g, + final TrPostInterpolatePoint _idx) { + for (int i = _g.getChildCount() - 1; i >= 0; i--) { + final TrPostCourbeModel res = (TrPostCourbeModel) _g.getCourbeAt(i).getModel(); + if (_t == res.getVar() && res.isCourbeForInterpolation(_idx)) { return res; } + } + return null; + } - // --ajout dans la liste des titres --// - listeSimul[cpt++] = projet_.formatInfoSource(src); - } + /** + * Il n'y a rien a faire. + */ + public void dataAdded(final boolean _isFleche) {} - return listeSimul; - } + public void dataChanged(final H2dVariableType _old, final H2dVariableType _new, final boolean _contentChanged, + final boolean _isFleche, final Set _varsUsing, final ProgressionInterface _prog) { + if (_isFleche) { return; } + varSupported_.remove(_old); + varSupported_.add(_new); + // si le contenu n'est pas modifie, il faut juste changer les pointeurs des variables + if (_contentChanged || _old == _new) { + final EGCourbe[] cs = getCourbes(); + if (cs == null) { return; } + // rebuild a true si on doit reconstruire le tout + final List modelToUpdate = new ArrayList(); + for (int i = cs.length - 1; i >= 0; i--) { + final TrPostCourbeModel model = (TrPostCourbeModel) cs[i].getModel(); + if (model.getVar() == _old) { + model.setY(null); + model.setVar(_new); + modelToUpdate.add(model); + } else if (_varsUsing != null && _varsUsing.contains(model.getVar())) { + model.setY(null); + modelToUpdate.add(model); + startUpdating(); + } - /** - * Determine les courbes qui correspondent a la variable et les stocke dans la liste _l. - * - * @param _var - * @param _l contient toutes les courbes qui appartiennent a la variable - */ - void getCourbeFor(final H2dVariableType _var, final List _l) { - final EGGroup g = getGroupFor(_var); - for (int i = g.getChildCount() - 1; i >= 0; i--) { - if (((TrPostCourbeModel) g.getCourbeAt(i).getModel()).getVar() == _var) { - _l.add(g.getCourbeAt(i)); - } - } - } + } + // mise a jour des modeles dans un thread s\xE9par\xE9. + if (modelToUpdate.size() > 0) { - /** - * Recherche ou cree un groupe correspondant a la variable pour eviter les doublons. - * - * @param _t - * @return - */ - public EGGroup getGroupFor(final H2dVariableType _t) { - i... [truncated message content] |