From: <emm...@us...> - 2008-12-12 17:04:49
|
Revision: 4298 http://fudaa.svn.sourceforge.net/fudaa/?rev=4298&view=rev Author: emmanuel_martin Date: 2008-12-12 17:04:43 +0000 (Fri, 12 Dec 2008) Log Message: ----------- Commit de base sur le modeleur 1d : a consid?\195?\169r?\195?\169 comme une version alpha (bogu?\195?\169e et ne pr?\195?\169sentant pas toutes les fonctionnalit?\195?\169s attendues). Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryListener.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java Removed Paths: ------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille1d.java Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille1d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille1d.java 2008-12-12 08:32:49 UTC (rev 4297) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlFille1d.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -1,71 +0,0 @@ -/* - * @creation 20 janv. 08 - * @modification $Date$ - * @license GNU General Public License 2 - * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.fudaa.modeleur; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.print.PageFormat; - -import com.db4o.ObjectContainer; - -import com.memoire.bu.BuCutCopyPasteInterface; -import com.memoire.bu.BuInformationsDocument; -import com.memoire.bu.BuUndoRedoInterface; - -import org.fudaa.ctulu.CtuluCommandManager; -import org.fudaa.ctulu.CtuluExportDataInterface; -import org.fudaa.ctulu.CtuluUI; -import org.fudaa.ctulu.CtuluUndoRedoInterface; -import org.fudaa.ctulu.ProgressionInterface; -import org.fudaa.ctulu.image.CtuluImageImporter; -import org.fudaa.ctulu.image.CtuluImageProducer; - -import org.fudaa.ebli.calque.ZEbliFilleCalques; -import org.fudaa.ebli.impression.EbliFilleImprimable; - -import org.fudaa.fudaa.commun.impl.FudaaCommonImplementation; -import org.fudaa.fudaa.commun.save.FudaaFilleVisuPersistence; -import org.fudaa.fudaa.commun.save.FudaaSavable; -import org.fudaa.fudaa.commun.save.FudaaSaveZipWriter; -import org.fudaa.fudaa.sig.FSigResource; - -/** - * La fenetre interne vue 2D des donn\xE9es du modeleur. Elle construit le composant arbre de - * calques {@link org.fudaa.ebli.calque.BArbreCalque}. La plupart des traitements est - * d\xE9l\xE9gu\xE9e au composant {@link org.fudaa.ebli.calque.ZEbliCalquesPanel} encapsul\xE9. - * - * @author fred deniger - * @author bertrand marchand - * @version $Id$ - */ -public class MdlFille1d extends EbliFilleImprimable { - - public MdlFille1d(FudaaCommonImplementation _appli) { - super("", true, false, true, true, _appli, null); - setName("mdlFille1d"); - setTitle(FSigResource.FSIG.getString("Vue 1D")); - setPreferredSize(new Dimension(500, 400)); - setClosable(true); - } - - /* (non-Javadoc) - * @see org.fudaa.ebli.impression.EbliPageable#print(java.awt.Graphics, java.awt.print.PageFormat, int) - */ - public int print(Graphics _g, PageFormat _format, int _page) { - // TODO Auto-generated method stub - return 0; - } - - /* (non-Javadoc) - * @see java.awt.print.Pageable#getNumberOfPages() - */ - public int getNumberOfPages() { - // TODO Auto-generated method stub - return 0; - } -} Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java 2008-12-12 08:32:49 UTC (rev 4297) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlImplementation.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -43,6 +43,7 @@ import org.fudaa.fudaa.commun.save.FudaaSaveZipLoader; import org.fudaa.fudaa.modeleur.action.MdlShow1DFrameAction; import org.fudaa.fudaa.modeleur.action.MdlShow2DFrameAction; +import org.fudaa.fudaa.modeleur.modeleur1d.MdlFille1d; import org.fudaa.fudaa.ressource.FudaaResource; import org.fudaa.fudaa.sig.FSigProjectPersistence; import org.fudaa.fudaa.sig.FSigResource; @@ -193,14 +194,14 @@ if (mdl1dFrame_==null) { mdl1dFrame_ = new MdlFille1d(this); } - boolean alwaysInstalled=false; + boolean alreadyInstalled=false; for (JInternalFrame f: getAllInternalFrames()) { if (f.equals(mdl1dFrame_)) { - alwaysInstalled=true; + alreadyInstalled=true; break; } } - if (!alwaysInstalled) addInternalFrame(mdl1dFrame_); + if (!alreadyInstalled) addInternalFrame(mdl1dFrame_); activateInternalFrame(mdl1dFrame_); } @@ -584,7 +585,7 @@ protected BuMenu buildProjectMenu() { BuMenu mn=new BuMenu(FudaaResource.FUDAA.getString("Projet"),"mnPROJECT"); mn.add(new MdlShow2DFrameAction(this)); -// mn.add(new MdlShow1DFrameAction(this)); + mn.add(new MdlShow1DFrameAction(this)); mn.setVisible(false); return mn; Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,196 @@ +/* + * @creation 9 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +import java.util.List; + +import javax.swing.JComponent; +import javax.swing.JDesktopPane; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import org.fudaa.ctulu.CtuluListSelectionEvent; +import org.fudaa.ctulu.CtuluListSelectionListener; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.ebli.calque.BArbreCalqueModel; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZSelectionEvent; +import org.fudaa.ebli.calque.ZSelectionListener; +import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.fudaa.commun.FudaaLib; +import org.fudaa.fudaa.modeleur.MdlImplementation; + +import com.memoire.bu.BuDesktop; + +/** + * Cette classe a la charge et la responsabilit\xE9 de g\xE9rer toutes les actions, + * interactions et r\xE9actions de la fen\xEAtre 1d dans son ensemble. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class Controller1d extends InternalFrameAdapter implements ZSelectionListener, ListSelectionListener, CtuluListSelectionListener { + + /** La vue du bief. */ + private VueBief vueBief_; + /** La vue d'un profil par tableau. */ + private VueTableau vueTableau_; + /** La vue d'un profil via une courbe. */ + private VueCourbe vueCourbe_; + /** Le lien avec le reste de l'application. */ + private MdlImplementation appli_; + /** La frame contenant tous les widgets 1d. */ + private MdlFille1d frame1d_; + /** Indique si on doit \xE9couter les \xE9venements de selection. */ + private boolean listenEventSelection_=true; + /** L'adapter des donn\xE9es de la geometry en cours de manipulation. */ + private DataGeometryAdapter dataGeomAdapter_; + + public Controller1d(MdlImplementation _appli, MdlFille1d _frame1d){ + appli_=_appli; + frame1d_=_frame1d; + frame1d_.addInternalFrameListener(this); + vueBief_=new VueBief(appli_, this); + vueBief_.getScene().addSelectionListener(this); + treeModel_=vueBief_.getArbreCalqueModel(); + dataGeomAdapter_=new DataGeometryAdapter(null, -1); + vueTableau_=new VueTableau(this, dataGeomAdapter_); + vueTableau_.addSelectionListener(this); + vueCourbe_=new VueCourbe(this, dataGeomAdapter_); + vueCourbe_.addSelectionListener(this); + } + + public VueBief getVueBief(){ + return vueBief_; + } + public VueTableau getVueTableau(){ + return vueTableau_; + } + public VueCourbe getVueCourbe(){ + return vueCourbe_; + } + + // Gestion de l'arbre \\ + + /** Le model de l'arbre a afficher sur la droite de l'\xE9cran. */ + private BArbreCalqueModel treeModel_; + + /** Retourne le model de l'abre a afficher sur la droite de l'\xE9can. */ + public BArbreCalqueModel getTreeModel(){ + return treeModel_; + } + + /** + * Mise \xE0 jour de l'arbre des calques a chaque activation de la fen\xEAtre 1d. La + * mise \xE0 jour s'effectue en fonction des calques 2d. + */ + public void internalFrameActivated(InternalFrameEvent e) { + vueBief_.updateTree(); + } + + // Gestion des actions \\ + + /** Les action \xE0 la fen\xEAtre 1d. */ + JComponent[] specificTools_; + + /** + * Renvoie les actions sp\xE9cifiques \xE0 la fen\xEAtre 1d. Ils seront affiches dans la + * tool bar de l'application. + * + * @return specificTools_ + */ + public JComponent[] getToolsActions() { + if (specificTools_==null) { + final JDesktopPane j=frame1d_.getDesktopPane(); + BuDesktop buJ=null; + if (j instanceof BuDesktop) + buJ=(BuDesktop)j; + final List<?> l=EbliLib.updateToolButtons(vueBief_.getController().getActions(), buJ); + specificTools_=new JComponent[l.size()]; + l.toArray(specificTools_); + } + if (specificTools_==null) + return null; + final JComponent[] r=new JComponent[specificTools_.length]; + System.arraycopy(specificTools_, 0, r, 0, r.length); + return r; + } + + // Gestion de la selection entre les trois widgets (tableau, bief et courbe) \\ + + /** + * Changement de la selection dans le widget de bief. + */ + public void selectionChanged(ZSelectionEvent _evt) { + ZScene scene=vueBief_.getScene(); + int sceneIdSelected=scene.getSelectionHelper().getUniqueSelectedIdx(); + if(sceneIdSelected==-1) + // Aucune selection + dataGeomAdapter_.setData(null, -1); + else { + int idSelected=scene.sceneId2LayerId(sceneIdSelected); + // Seulement en cas de changement de selection + if (idSelected!=dataGeomAdapter_.getIdxGeom()) { + // Extraction des diff\xE9rentes informations n\xE9c\xE9ssaires au changement de + // courbe \\ + ZCalqueAffichageDonneesInterface calque=scene.getLayerForId(sceneIdSelected); + if (calque.modeleDonnees() instanceof ZModeleLigneBriseeEditable) { + GISZoneCollectionLigneBrisee zone=((ZModeleLigneBriseeEditable)calque.modeleDonnees()).getGeomData(); + if (zone.getIndiceOf(GISAttributeConstants.NATURE)!=-1) { + if (zone.getValue(zone.getIndiceOf(GISAttributeConstants.NATURE), idSelected)==GISAttributeConstants.ATT_NATURE_PF) { + try { + dataGeomAdapter_.setData(zone, idSelected); + } + catch (IllegalArgumentException _exp) { + appli_.warn(FudaaLib.getS("Profil incorrect"), _exp.getMessage()); + } + } + else { + // On a pas selectionn\xE9 un profil, on annule la selection + dataGeomAdapter_.setData(null, -1); + scene.clearSelection(); + } + } + else + // Il n'y a pas d'attribut Nature, on annule la selection + scene.clearSelection(); + } + else + // Le type de model ne correspond pas, on annule la selection + scene.clearSelection(); + } + } + } + + /** + * Changement de la selection dans le widget du tableau. + */ + public void valueChanged(ListSelectionEvent e) { + if (listenEventSelection_) { + listenEventSelection_=false; + vueCourbe_.setSelection(vueTableau_.getSelection()); + listenEventSelection_=true; + } + } + + /** + * Changement de la selection dans le widget de la courbe. + */ + public void listeSelectionChanged(CtuluListSelectionEvent _e) { + if (listenEventSelection_) { + listenEventSelection_=false; + vueTableau_.setSelection(vueCourbe_.getSelection()); + listenEventSelection_=true; + } + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/Controller1d.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometry.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometry.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,57 @@ +/* + * @creation 10 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +/** + * Une interface permettant d'acc\xE9der aux informations manipul\xE9es par les + * widgets tableau et courbe. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public interface DataGeometry { + + /** Ajout d'un nouveau listener. */ + public void addDataGeometryListener(DataGeometryListener _listener); + + /** Supprime le listener. */ + public void removeDataGeometryListener(DataGeometryListener _listener); + + /** Retourne le nombre de points total de la geometry. */ + public int getNbPoint(); + + /** Retourne l'abcisse curviligne du point indiqu\xE9 en param\xE8tre. */ + public double getCurv(int _idxPoint); + + /** Retourne la valeur maximal de l'abcisse curviligne. */ + public double getCurvMax(); + + /** Retourne la valeur minimal de l'abcisse curvilgne. */ + public double getCurvMin(); + + /** Retourne la valeur de z du point indiqu\xE9 en param\xE8tre. */ + public double getZ(int _idxPoint); + + /** Retourne la valeur maximal de z. */ + public double getZMax(); + + /** Retourne la valeur minimal de z. */ + public double getZMin(); + + /** Enregistre l'abcisse curviligne du point indiqu\xE9 en param\xE8tre. */ + public void setCurv(int _idxPoint, double _value); + + /** Enregistre la valeur de z du point indiqu\xE9 en param\xE8tre. */ + public void setZ(int _idxPoint, double _value); + + /** Enregistre l'abcisse curviligne et la valeur de z du point indiqu\xE9 en param\xE8tre. */ + public void setValues(int _idxPoint, double _valueCurv, double _valueZ); + + /** Supprime le point indiqu\xE9 en param\xE8tre. */ + public void remove(int _idxPoint); +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometry.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,375 @@ +/* + * @creation 10 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +import java.util.ArrayList; +import java.util.List; + +import org.fudaa.ctulu.collection.CtuluCollection; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISGeometryFactory; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.fudaa.commun.FudaaLib; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; + +/** + * Cette classe permet d'adapter une GISZoneCollection en un model manipulable + * simplement. Cette simplification se fait en cachant toutes les informations + * inutils et en ajoutant une information d'abcisse curviligne. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +class DataGeometryAdapter implements DataGeometry { + private GISZoneCollectionLigneBrisee zone_; + private int idxGeom_; + private CtuluCollection z_; + private List<Double> curv_; + // Caches \\ + int idxZMax_; + int idxZMin_; + // Le profil est potentiellement coup\xE9 en trois, les deux indices qui suivent + // indique l'index de chacune de ces ruptures. + int idxRupture1_; + int idxRupture2_; + + public DataGeometryAdapter(GISZoneCollectionLigneBrisee _zone, int _idxGeom) throws IllegalArgumentException { + setData(_zone, _idxGeom); + } + + /** + * Permet de choisir la g\xE9om\xE9trie sur lequel l'instance va travailler. + * Hypoth\xE8se importante : les points de la g\xE9om\xE9tries sont correctement + * ordonn\xE9s (les points sont ordonn\xE9s en ordre croissant de leur abscisse + * curviligne). La veracit\xE9 de cette hypoth\xE8se n'est PAS v\xE9rifi\xE9 dans setData. + * + * @param _zone la zone contenant la g\xE9om\xE9trie + * @param _idxGeom l'indice de la g\xE9om\xE9trie dans _zone + */ + public void setData(GISZoneCollectionLigneBrisee _zone, int _idxGeom) throws IllegalArgumentException { + if (_zone==null&&_idxGeom==-1) { + zone_=null; + idxGeom_=-1; + z_=null; + curv_=null; + } + else if (_zone!=null&&_idxGeom>=0&&_idxGeom<_zone.getNbGeometries()&&_zone.getAttributeIsZ()!=null) { + try { + zone_=_zone; + idxGeom_=_idxGeom; + z_=(CtuluCollection)zone_.getValue(zone_.getIndiceOf(zone_.getAttributeIsZ()), idxGeom_); + curv_=new ArrayList<Double>(); + CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)zone_.getGeometry(idxGeom_)).getCoordinateSequence(); + // Verifie qu'on a bien au minimum deux points. \\ + if (seq.size()<2) + throw new IllegalArgumentException(FudaaLib.getS("La g\xE9ometrie doit avoir au minimum deux points.")); + // Verifie que deux points cons\xE9cutifs ne sont pas confondus. \\ + 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 IllegalArgumentException(FudaaLib.getS("Au moins deux points dans la g\xE9om\xE9trie sont confondus.")); + // Calcul des acbscisses curvilignes => hypoth\xE8se d'ordonnancement + // correcte des points \\ + double curvPre=0; + curv_.add((double)0); + for (int i=1; i<seq.size(); i++) { + double partialCurv=Math.sqrt(Math.pow(seq.getX(i)-seq.getX(i-1), 2)+Math.pow(seq.getY(i)-seq.getY(i-1), 2)); + curvPre=curvPre+partialCurv; + curv_.add(curvPre); + } + // Remplissage du cache Z \\ + idxZMax_=0; + idxZMin_=0; + for (int i=1; i<z_.getSize(); i++) { + double val=(Double)z_.getObjectValueAt(i); + if (val>(Double)z_.getObjectValueAt(idxZMax_)) + idxZMax_=i; + else if (val<(Double)z_.getObjectValueAt(idxZMin_)) + idxZMin_=i; + } + // / D\xE9termination des points de ruptures et verification qu'il y en a + // au maximun deux. \\\ + idxRupture1_=-1; + idxRupture2_=-1; + double upsilon=0.0001; // Marge d'erreur des calculs sur double + double coefDirecteur=0; + // coefDirX : Indique si le coefficient directeur est calcul\xE9 sur les x + // ou sur les y (au d\xE9nominateur). + boolean coefDirX; + // Initialisation : calcul du premier cofficient directeur \\ + int idx=1; + // Calcul du coefficient directeur + if (seq.getX(idx)!=seq.getX(idx-1)) { + // Calcul sur les x + coefDirX=true; + coefDirecteur=(seq.getY(idx)-seq.getY(idx-1))/(seq.getX(idx)-seq.getX(idx-1)); + } + else { + // Calcul sur les y + coefDirX=false; + coefDirecteur=0; + } + // Coeur : Calcul de tous les coefficients directeur et m\xE9morisation des + // ruptures \\ + for (idx=2; idx<seq.size(); idx++) { + double newCoefDirecteur; + boolean newCoefDirX; + // Calcul du coefficient directeur + if (seq.getX(idx)!=seq.getX(idx-1)) { + // Calcul sur les x + newCoefDirX=true; + newCoefDirecteur=(seq.getY(idx)-seq.getY(idx-1))/(seq.getX(idx)-seq.getX(idx-1)); + } + else { + // Calcul sur les y + newCoefDirX=false; + newCoefDirecteur=0; + } + // D\xE9tection des ruptures + if (coefDirX!=newCoefDirX||Math.abs(coefDirecteur-newCoefDirecteur)>upsilon) { + if (idxRupture1_==-1) + idxRupture1_=idx-1; + else if (idxRupture2_==-1) + idxRupture2_=idx-1; + else + throw new IllegalArgumentException(FudaaLib.getS("Il y a plus que deux ruptures dans la g\xE9om\xE9trie.")); + } + // Pr\xE9paration de l'it\xE9ration suivante + coefDirecteur=newCoefDirecteur; + coefDirX=newCoefDirX; + } + } + catch(IllegalArgumentException _exp) { + // Remise dans un \xE9tat coh\xE9rent + zone_=null; + idxGeom_=-1; + z_=null; + curv_=null; + fireDataGeometryNewGeom(); + // Propagation de l'exception + throw _exp; + } + } + else + throw new IllegalArgumentException(FudaaLib.getS("Les arguments sont invalides.")); + // Fin des verifications, tous est ok => accept\xE9 + fireDataGeometryNewGeom(); + } + + public GISZoneCollection getGISZoneCollection(){ + return zone_; + } + + public int getIdxGeom(){ + return idxGeom_; + } + + public int getNbPoint() { + if (zone_==null) + return 0; + else + return zone_.getGeometry(idxGeom_).getNumPoints(); + } + + public double getCurv(int _idxPoint) { + if(curv_==null) + return 0; + else + return curv_.get(_idxPoint); + } + + public double getZ(int _idxPoint) { + if (z_==null) + return 0; + else + return ((Double)z_.getObjectValueAt(_idxPoint)).doubleValue(); + } + + public void setCurv(int _idxPoint, double _value) { + if(curv_==null) + return; + CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)zone_.getGeometry(idxGeom_)).getCoordinateSequence(); + Coordinate[] coords=seq.toCoordinateArray(); + if(_idxPoint==0||_idxPoint==seq.size()-1){ + System.out.println("Le d\xE9placement curviligne est points extr\xE9mit\xE9s n'est pour l'instant pas g\xE9r\xE9."); + return; + } + if(_value<0) + return; + // Cas o\xF9 l'index n'est pas sur un point de rupture \\ + if(_idxPoint!=idxRupture1_&&_idxPoint!=idxRupture2_){ + // Cas o\xF9 le point reste encadr\xE9 par les deux m\xEAme points (noralement toujours le cas) => le signe de xa-xb et de ya-yb ne change pas + if((_idxPoint==0||_value>curv_.get(_idxPoint-1))&&(_idxPoint==curv_.size()-1||_value<curv_.get(_idxPoint+1))){ + // D\xE9termination des deux index \xE0 utiliser + int idx1; + int idx2; + double valCurv; + if(_idxPoint>0){ // On a pas selectionn\xE9 le premier point + idx1=_idxPoint-1; + idx2=_idxPoint; + valCurv=_value-curv_.get(idx1); + } + else { + idx1=_idxPoint+1; + idx2=_idxPoint; + valCurv=Math.abs(_value-curv_.get(idx1)); + } + // Calcul des nouvelles coordonn\xE9es + if (seq.getX(idx2)!=seq.getX(idx1)) { + // Extraction du signe de xa-xb + double sign=Math.signum(seq.getX(idx2)-seq.getX(idx1)); + double coefDirecteur=(seq.getY(idx2)-seq.getY(idx1))/(seq.getX(idx2)-seq.getX(idx1)); + double newX=seq.getX(idx1)+sign*valCurv/Math.sqrt(1+coefDirecteur*coefDirecteur); + double newY=seq.getY(idx1)+coefDirecteur*(newX-seq.getX(idx1)); + coords[_idxPoint].x=newX; + coords[_idxPoint].y=newY; + } + else { // Cas du bout de profil vertical + // Extraction du signe de ya-yb + double sign=Math.signum(seq.getY(idx2)-seq.getY(idx1)); + double newY=seq.getY(idx1)+sign*(valCurv-curv_.get(idx1)); + coords[_idxPoint].y=newY; + } + zone_.setCoordinateSequence(idxGeom_, GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(coords), null); + // Mise a jour de la table des valeurs curvilignes + if (_idxPoint!=0) + curv_.set(_idxPoint, _value); + else { + for (int i=1; i<curv_.size(); i++) + curv_.set(i, curv_.get(i)-_value); + } + } + // Cas o\xF9 il y a d\xE9pacement d'un autre point => le signe de xa-xb va potentiellement chang\xE9 => cas interdit + else + //TODO : ne rien faire + System.out.println("le point est d\xE9plac\xE9 au dela de ses points l'encadrants, mouvement impossible."); + } + else + // Cas complexe : l'index est sur un point de rupture \\ + // TODO : d\xE9placement sur l'\xE9llipse avec verification de non croisement des axes du profil + System.out.println("Le point selectionn\xE9 est un point de rupture, cas non g\xE9r\xE9 pour l'instant."); + } + + public void setZ(int _idxPoint, double _value) { + if (z_!=null) { + z_.setObject(_idxPoint, _value, null); + // Mise \xE0 jour de idxZMin_ et idxZMax_ + if (_idxPoint==idxZMax_||_idxPoint==idxZMin_) { + idxZMax_=0; + idxZMin_=0; + for (int i=1; i<z_.getSize(); i++) { + double val=(Double)z_.getObjectValueAt(i); + if (val>(Double)z_.getObjectValueAt(idxZMax_)) + idxZMax_=i; + else if (val<(Double)z_.getObjectValueAt(idxZMin_)) + idxZMin_=i; + } + } + else if (_value>(Double)z_.getObjectValueAt(idxZMax_)) + idxZMax_=_idxPoint; + else if (_value<(Double)z_.getObjectValueAt(idxZMin_)) + idxZMin_=_idxPoint; + fireDataGeometryChanged(); + } + } + + public double getCurvMax() { + if(curv_==null) + return 0; + else + return curv_.get(curv_.size()-1); + } + + public double getCurvMin() { + if(curv_==null) + return 0; + else + return curv_.get(0); + } + + public double getZMax() { + if(z_==null) + return 0; + else + return (Double) z_.getObjectValueAt(idxZMax_); + } + + public double getZMin() { + if(z_==null) + return 0; + else + return (Double) z_.getObjectValueAt(idxZMin_); + } + + public void setValues(int _idxPoint, double _valueCurv, double _valueZ){ + setZ(_idxPoint, _valueZ); + setCurv(_idxPoint, _valueCurv); + } + + public void remove(int _idxPoint){ + if(zone_==null||z_==null||curv_==null) + return; + if(_idxPoint>=0&&_idxPoint<z_.getSize()){ + // Suppression du point dans la zone + CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)zone_.getGeometry(idxGeom_)).getCoordinateSequence(); + Coordinate[] points=new Coordinate[seq.size()-1]; + for(int i=0;i<_idxPoint;i++) + points[i]=seq.getCoordinate(i); + for(int i=_idxPoint+1;i<seq.size();i++) + points[i]=seq.getCoordinate(i); + zone_.setGeometry(idxGeom_, GISGeometryFactory.INSTANCE.createGeometry(zone_.getGeometry(idxGeom_).getClass(), + GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(points)), null); + // Mise \xE0 jour des informations curvilignes \\ + if(_idxPoint==0){ + // Si _idxPoint est le premier point + curv_.remove(0); + for(int i=curv_.size();i>=0;i--) + curv_.set(i, curv_.get(i)-curv_.get(0)); + } + else if (_idxPoint>0&&_idxPoint<curv_.size()-1) { + // Cas g\xE9n\xE9ral si _idxPoint est entre le premier et le dernier + // Attention 'curv_' contient encore _idxPoint alors que 'points' ne le + // contient plus + double delta=-curv_.get(_idxPoint)-curv_.get(_idxPoint+1) + +Math.sqrt(Math.pow(points[_idxPoint-1].x-points[_idxPoint].x, 2) + +Math.pow(points[_idxPoint-1].y-points[_idxPoint].y, 2)); + curv_.remove(_idxPoint); + for(int i=_idxPoint;i<curv_.size();i++) + curv_.set(i, curv_.get(i)+delta); + } + else + // Si _idxPoint est le dernier + curv_.remove(curv_.size()-1); + } + } + + /** List de listener. */ + List<DataGeometryListener> listeners_=new ArrayList<DataGeometryListener>(); + + public void addDataGeometryListener(DataGeometryListener _listener) { + if(!listeners_.contains(_listener)) + listeners_.add(_listener); + } + + public void removeDataGeometryListener(DataGeometryListener _listener) { + if(listeners_.contains(_listener)) + listeners_.remove(_listener); + } + + protected void fireDataGeometryChanged(){ + for(DataGeometryListener listener:listeners_) + listener.dataGeometryChanged(); + } + + protected void fireDataGeometryNewGeom(){ + for(DataGeometryListener listener:listeners_) + listener.dataGeometryNewGeom(); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryAdapter.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryListener.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryListener.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryListener.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,25 @@ +/* + * @creation 10 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +/** + * Listener de DataGeometry. + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public interface DataGeometryListener { + /** + * Callback lors d'une modification dans le dataGeometry. + */ + public void dataGeometryChanged(); + + /** + * Callback lors que l'objet vis\xE9 par dataGeometry \xE0 \xE9t\xE9 chang\xE9. + */ + public void dataGeometryNewGeom(); +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/DataGeometryListener.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,103 @@ +/* + * @creation 20 janv. 08 + * @modification $Date: 2008-12-05 15:33:27 +0100 (ven., 05 déc. 2008) $ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.print.PageFormat; + +import javax.swing.JComponent; +import javax.swing.JSplitPane; + +import org.fudaa.ctulu.gui.CtuluFilleWithComponent; +import org.fudaa.ebli.calque.BArbreCalque; +import org.fudaa.ebli.impression.EbliFilleImprimable; +import org.fudaa.ebli.ressource.EbliResource; +import org.fudaa.fudaa.modeleur.MdlImplementation; +import org.fudaa.fudaa.sig.FSigResource; + +/** + * La fenetre interne vue 2D des donn\xE9es du modeleur. Elle construit le composant arbre de + * calques {@link org.fudaa.ebli.calque.BArbreCalque}. La plupart des traitements est + * d\xE9l\xE9gu\xE9e au composant {@link org.fudaa.ebli.calque.ZEbliCalquesPanel} encapsul\xE9. + * + * @author fred deniger + * @author bertrand marchand + * @author Emmanuel Martin + * @version $Id$ + */ +public class MdlFille1d extends EbliFilleImprimable implements CtuluFilleWithComponent { + + /** Le controller 1d */ + private Controller1d controller_; + + public MdlFille1d(MdlImplementation _appli) { + super("", true, false, true, true, _appli, null); + // Configuration de la fen\xEAtre 1d \\ + setName("mdlFille1d"); + setTitle(FSigResource.FSIG.getString("Vue 1D")); + setPreferredSize(new Dimension(500, 400)); + setClosable(true); + controller_=new Controller1d(_appli, this); + // Construction des vues contenues dans la fen\xEAtre. \\ + add(new JSplitPane(JSplitPane.VERTICAL_SPLIT, controller_.getVueBief(), new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, controller_.getVueTableau(), controller_.getVueCourbe()))); + setPreferredSize(new Dimension(500, 500)); + setSize(getPreferredSize()); + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.impression.EbliPageable#print(java.awt.Graphics, java.awt.print.PageFormat, int) + */ + public int print(Graphics _g, PageFormat _format, int _page) { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see java.awt.print.Pageable#getNumberOfPages() + */ + public int getNumberOfPages() { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gui.CtuluFilleWithComponent#createComponent() + */ + public JComponent createComponent() { + BArbreCalque tree=new BArbreCalque(controller_.getTreeModel()); + tree.setRootVisible(false); + return tree; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gui.CtuluFilleWithComponent#getComponentClass() + */ + public Class<?> getComponentClass() { + return BArbreCalque.class; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gui.CtuluFilleWithComponent#getComponentTitle() + */ + public String getComponentTitle() { + return EbliResource.EBLI.getString("Calques"); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gui.CtuluFilleWithComponent#majComponent(java.lang.Object) + */ + public void majComponent(Object _o) { + if (_o instanceof BArbreCalque) + ((BArbreCalque) _o).setModel(controller_.getTreeModel()); + } + + public JComponent[] getSpecificTools() { + return controller_.getToolsActions(); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/MdlFille1d.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,105 @@ +/* + * @creation 8 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +import java.awt.Dimension; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +import org.fudaa.ebli.calque.BCalque; +import org.fudaa.ebli.calque.BGroupeCalque; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.calque.edition.ZCalqueLigneBriseeEditable; +import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; +import org.fudaa.fudaa.modeleur.MdlImplementation; +import org.fudaa.fudaa.modeleur.layer.MdlLayer2dLine; +import org.fudaa.fudaa.sig.layer.FSigEditor; + + +/** + * Cette classe permet le visionnage du bief sur lequel la fenetre 1d travail. + * La vue y est de dessus. + * Il est possible de selectionner les profils pour indiquer lequel doit \xEAtre + * \xE9dit\xE9 via la vue par graphe 1d. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class VueBief extends ZEbliCalquesPanel { + + private MdlImplementation impl_; + /** Le controller de la fen\xEAtre 1d. */ + Controller1d controller_; + + public VueBief(MdlImplementation _impl, Controller1d _controller) { + super(_impl); + controller_=_controller; + getScene().setRestrictedToCalqueActif(false); + impl_=_impl; + gisEditor_=new FSigEditor(this); + gisEditor_.setUi(_impl); + addCalque(duplicateCalquesBiefs(impl_.get2dFrame().getVisuPanel().getArbreCalqueModel().getRootCalque().getCalqueParNom("gcBiefs")), true); + setPreferredSize(new Dimension(200, 200)); + setSize(getPreferredSize()); + } + + /** + * Duplique r\xE9cursivement la h\xE9rarchie de calque pass\xE9 en param\xE8tre. N'accepte + * que les BGroupeCalques et les calques du modeleur. + */ + private BCalque duplicateCalquesBiefs(BCalque _rootCalque) { + if (_rootCalque==null) + return null; + if (_rootCalque instanceof BGroupeCalque) { + BGroupeCalque bCalque; + try { + bCalque=(BGroupeCalque)_rootCalque.getClass().newInstance(); + } + catch (InstantiationException _exc) {return null;} + catch (IllegalAccessException _exc) {return null;} + // Reprise des param\xE8tres de l'instance + bCalque.setTitle(_rootCalque.getTitle()); + bCalque.setName(_rootCalque.getName()); + BCalque[] calquesFils=_rootCalque.getCalques(); + for (int i=0; i<calquesFils.length; i++) { + BCalque calqueFils=duplicateCalquesBiefs(calquesFils[i]); + if (calqueFils!=null) + bCalque.add(calqueFils); + } + return bCalque; + } + else if (_rootCalque instanceof MdlLayer2dLine) { + // R\xE9cup\xE9ration d'un constructeur pour cloner l'instance + Constructor<?> constructor; + try { + constructor=_rootCalque.getClass().getConstructor(FSigEditor.class); + } + catch (NoSuchMethodException excep) {return null;} + // Reprise des param\xE8tres de l'instance + ZCalqueLigneBriseeEditable calque; + try { + calque=(ZCalqueLigneBriseeEditable)constructor.newInstance((FSigEditor)gisEditor_); + } + catch (IllegalArgumentException _exc) {return null;} + catch (InstantiationException _exc) {return null;} + catch (IllegalAccessException _exc) {return null;} + catch (InvocationTargetException _exc) {return null;} + calque.modele((ZModeleLigneBriseeEditable)((MdlLayer2dLine)_rootCalque).modeleDonnees()); + calque.setTitle(_rootCalque.getTitle()); + calque.setName(_rootCalque.getName()); + return calque; + } + else + return null; + } + + /** Permet de mettre \xE0 jour les calques dans l'arbre en fonction des calques dans l'arbre 2d. */ + public void updateTree(){ + + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueBief.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,267 @@ +/* + * @creation 8 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +import java.awt.Color; +import java.awt.Dimension; +import java.util.Arrays; + +import javax.swing.JComponent; + +import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.CtuluListSelectionInterface; +import org.fudaa.ctulu.CtuluListSelectionListener; +import org.fudaa.ebli.commun.EbliActionInterface; +import org.fudaa.ebli.commun.EbliComponentFactory; +import org.fudaa.ebli.courbe.EGAxeHorizontal; +import org.fudaa.ebli.courbe.EGAxeVertical; +import org.fudaa.ebli.courbe.EGCourbeSimple; +import org.fudaa.ebli.courbe.EGFillePanel; +import org.fudaa.ebli.courbe.EGGraphe; +import org.fudaa.ebli.courbe.EGGrapheSimpleModel; +import org.fudaa.ebli.courbe.EGModel; +import org.fudaa.ebli.palette.BPaletteInfo.InfoData; +import org.fudaa.ebli.trace.TraceLigne; +import org.fudaa.ebli.trace.TraceLigneModel; +import org.fudaa.fudaa.commun.FudaaLib; + +import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuPanel; +import com.memoire.bu.BuSpecificBar; + +/** + * Cette vue permet la modification et le visionnage d'un profil (pr\xE9alablement + * selectionn\xE9 dans la vue du bief). + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class VueCourbe extends BuPanel { + + /** + * Ce nouveau model de courbe permet d'utiliser un model d\xE9j\xE0 existant sous la + * forme d'une DataGeometry. + */ + protected class CourbeGeomModel implements EGModel, DataGeometryListener { + + private DataGeometry data_; + + public CourbeGeomModel(DataGeometry _data) { + if(_data==null) + throw new IllegalArgumentException("_data ne doit pas \xEAtre null."); + data_=_data; + data_.addDataGeometryListener(this); + } + + public void dataGeometryChanged() { + grapheVue_.fullRepaint(); + } + + public void dataGeometryNewGeom(){ + grapheVue_.restore(); + grapheVue_.fullRepaint(); + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.courbe.EGModel#addValue(double, double, org.fudaa.ctulu.CtuluCommandContainer) + */ + public boolean addValue(double _x, double _y, CtuluCommandContainer _cmd) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.courbe.EGModel#addValue(double[], double[], org.fudaa.ctulu.CtuluCommandContainer) + */ + public boolean addValue(double[] _x, double[] _y, CtuluCommandContainer _cmd) { + // TODO Auto-generated method stub + return false; + } + + public boolean deplace(int[] idx, double _deltax, double _deltay, CtuluCommandContainer _cmd) { + Arrays.sort(idx); + // Selon le sens de d\xE9placement, il faut commencer par le d\xE9but ou la fin du tableau + if(_deltax<0) + for(int index:idx) + setValue(index, getX(index)+_deltax, getY(index)+_deltay, _cmd); + else + for(int i=idx.length-1;i>=0;i--) + setValue(idx[i], getX(idx[i])+_deltax, getY(idx[i])+_deltay, _cmd); + return true; + } + + public void fillWithInfo(InfoData _table, CtuluListSelectionInterface pt) { + } + + public int getNbValues() { + return data_.getNbPoint(); + } + + public String getTitle() { + return FudaaLib.getS("Courbe"); + } + + public double getX(int _idx) { + return data_.getCurv(_idx); + } + + public double getXMax() { + return data_.getCurvMax(); + } + + public double getXMin() { + return data_.getCurvMin(); + } + + public double getY(int _idx) { + return data_.getZ(_idx); + } + + public double getYMax() { + return data_.getZMax(); + } + + public double getYMin() { + return data_.getZMin(); + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.courbe.EGModel#isDuplicatable() + */ + public boolean isDuplicatable() { + // TODO Auto-generated method stub + return false; + } + + public boolean isModifiable() { + return true; + } + + public boolean isPointDrawn(int _i) { + return true; + } + + public boolean isRemovable() { + return true; + } + + public boolean isSegmentDrawn(int _i) { + return true; + } + + public boolean isTitleModifiable() { + return false; + } + + public boolean isXModifiable() { + return true; + } + + public boolean removeValue(int _i, CtuluCommandContainer _cmd) { + data_.remove(_i); + return true; + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.courbe.EGModel#removeValue(int[], org.fudaa.ctulu.CtuluCommandContainer) + */ + public boolean removeValue(int[] _i, CtuluCommandContainer _cmd) { + // TODO Auto-generated method stub + return false; + } + + public boolean setTitle(String name) { + return false; + } + + public boolean setValue(int _i, double _x, double _y, CtuluCommandContainer _cmd) { + data_.setValues(_i, _x, _y); + return true; + } + + public boolean setValues(int[] _idx, double[] _x, double[] _y, CtuluCommandContainer _cmd) { + for(int index: _idx) + setValue(index, _x[index], _y[index], _cmd); + return true; + } + } + + + /** Le controller de la fen\xEAtre 1d. */ + Controller1d controller_; + /** La courbe. */ + private EGCourbeSimple courbe_; + /** Le container principal de la courbe. */ + private EGGraphe grapheVue_; + /** Le container principal de la courbe. */ + private EGFillePanel containerCourbe_; + + public VueCourbe(Controller1d _controller, DataGeometry _dataGeom){ + controller_=_controller; + + // Cr\xE9ation du container des courbes \\ + EGGrapheSimpleModel grapheModel=new EGGrapheSimpleModel(); + grapheVue_=new EGGraphe(grapheModel); + // Axe X \\ + EGAxeHorizontal axeX = new EGAxeHorizontal(false); + axeX.setTitre(FudaaLib.getS("Abscisse curviligne")); + axeX.setUnite(FudaaLib.getS("m\xE8tre")); + axeX.setBounds(0, 500); // Minimum et maximum de l'axe + axeX.setGraduations(true); + grapheVue_.setXAxe(axeX); + // Axe Y \\ + EGAxeVertical axeY = new EGAxeVertical(); + axeY.setGraduations(true); + axeY.setGrille(new TraceLigneModel(TraceLigne.LISSE, 1, Color.LIGHT_GRAY)); + axeY.setTitre(FudaaLib.getS("Ordonn\xE9e : z")); + axeY.setUnite(FudaaLib.getS("m\xE8tre")); + axeY.setBounds(0, 50); + axeY.setLineColor(Color.BLACK); + // Cr\xE9ation de la courbe \\ + EGModel courbeModel=new CourbeGeomModel(_dataGeom); + courbe_=new EGCourbeSimple(axeY, courbeModel); + courbe_.setAspectContour(Color.RED); + grapheModel.addCourbe(courbe_, null); + // Cr\xE9ation du panel contenant l'ensemble des courbes \\ + containerCourbe_ = new EGFillePanel(grapheVue_); + setLayout(new BuBorderLayout()); + + BuSpecificBar speBar=new BuSpecificBar(); + EbliActionInterface[] actionAbs=containerCourbe_.getSpecificActions(); + JComponent[] actions=new JComponent[actionAbs.length]; + for(int i=0;i<actionAbs.length;i++){ + if(actionAbs[i]!=null) + actions[i]=actionAbs[i].buildToolButton(EbliComponentFactory.INSTANCE); + } + speBar.addTools(actions); + + add(speBar, BuBorderLayout.NORTH); + add(containerCourbe_, BuBorderLayout.CENTER); + + setPreferredSize(new Dimension(200, 200)); + setSize(getPreferredSize()); + } + + /** Ajout un listener \xE0 la selection dans le tableau. */ + public void addSelectionListener(CtuluListSelectionListener _listener){ + containerCourbe_.getSelection().addListeSelectionListener(_listener); + } + + /** Retourne un tableau contenant les index selectionn\xE9s. */ + public int[] getSelection(){ + return containerCourbe_.getSelection().getSelectedIndex(); + } + + /** Selectionne les points dont les indices sont pass\xE9s en param\xE8tre. */ + public void setSelection(int[] _idxSelection){ + containerCourbe_.getSelection().clear(); + if(_idxSelection!=null) + for(int i=0;i<_idxSelection.length;i++) + containerCourbe_.getSelection().add(_idxSelection[i]); + } +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueCourbe.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native Added: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java 2008-12-12 17:04:43 UTC (rev 4298) @@ -0,0 +1,118 @@ +/* + * @creation 8 d\xE9c. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.modeleur1d; + +import java.awt.Dimension; + +import javax.swing.JTable; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.DefaultTableModel; + +import org.fudaa.fudaa.commun.FudaaLib; + +import com.memoire.bu.BuBorderLayout; +import com.memoire.bu.BuPanel; +import com.memoire.bu.BuScrollPane; + +/** + * Cette classe permet le visionnage des informations sous forme d'un tableau. + * Chaque ligne repr\xE9sente un point de la courbe, la colonne de gauche indique + * l'abscisse curviligne et la colonne de droite indique la valeur bathym\xE9tique + * du point. + * + * @author Emmanuel MARTIN + * @version $Id:$ + */ +public class VueTableau extends BuPanel { + + /** + * Le model du tableau. Celui ci extrait les informations du DataGeometryAdapter. + */ + protected class TableGeomModel extends DefaultTableModel implements DataGeometryListener { + + private DataGeometry data_; + + public TableGeomModel(DataGeometry _data){ + super(new String[]{FudaaLib.getS("Abs curv"), FudaaLib.getS("Z")}, 0); + if(_data==null) + throw new IllegalArgumentException("_data ne doit pas \xEAtre null."); + data_=_data; + data_.addDataGeometryListener(this); + } + + public void dataGeometryChanged() { + fireTableDataChanged(); + } + + public void dataGeometryNewGeom(){ + fireTableDataChanged(); + } + + public Class<?> getColumnClass(int columnIndex) { + return Double.class; + } + + public int getRowCount() { + if(data_==null) + return 0; + else + return data_.getNbPoint(); + } + + public Object getValueAt(int rowIndex, int columnIndex) { + if(columnIndex==0) + return data_.getCurv(rowIndex); + else + return data_.getZ(rowIndex); + } + + public void setValueAt(Object value, int rowIndex, int columnIndex) { + if(columnIndex==0) + data_.setCurv(rowIndex, (Double) value); + else + data_.setZ(rowIndex, (Double) value); + } + } + + /** Le controller de la fen\xEAtre 1d. */ + @SuppressWarnings("unused") + private Controller1d controller_; + /** La vue du tableau. */ + private JTable table_; + /** Le model du tableau affich\xE9 par le panel. */ + private DefaultTableModel modelTable_; + + public VueTableau(Controller1d _controller, DataGeometry _data){ + controller_=_controller; + setLayout(new BuBorderLayout(2, 2)); + modelTable_=new TableGeomModel(_data); + table_=new JTable(modelTable_); + add(new BuScrollPane(table_)); + setPreferredSize(new Dimension(200, 200)); + setSize(getPreferredSize()); + } + + /** Ajout un listener \xE0 la selection dans le tableau. */ + public void addSelectionListener(ListSelectionListener _listener){ + table_.getSelectionModel().addListSelectionListener(_listener); + } + + /** Retourne un tableau contenant les index selectionn\xE9s. */ + public int[] getSelection(){ + return table_.getSelectedRows(); + } + + /** Selectionne les points dont les indices sont pass\xE9s en param\xE8tre. */ + public void setSelection(int[] _idxSelection){ + table_.getSelectionModel().clearSelection(); + if(_idxSelection!=null) + for(int i=0;i<_idxSelection.length;i++) + table_.getSelectionModel().addSelectionInterval(_idxSelection[i], _idxSelection[i]); + } + +} Property changes on: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/modeleur1d/VueTableau.java ___________________________________________________________________ Added: svn:keywords + Id Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |