From: <bma...@us...> - 2008-08-14 15:03:07
|
Revision: 3802 http://fudaa.svn.sourceforge.net/fudaa/?rev=3802&view=rev Author: bmarchan Date: 2008-08-14 15:03:15 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Ajout de 2 m?\195?\169thodes pour le maintien de la coh?\195?\169rence ZAttribut<->ZCoordinate Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionLigneBrisee.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java 2008-08-14 10:01:56 UTC (rev 3801) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java 2008-08-14 15:03:15 UTC (rev 3802) @@ -1,567 +1,631 @@ -/* - * @creation 7 avr. 2005 - * @modification $Date: 2008-03-26 16:46:43 $ - * @license GNU General Public License 2 - * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail de...@fu... - */ -package org.fudaa.ctulu.gis; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.vividsolutions.jts.geom.CoordinateSequence; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.GeometryFactory; - -import org.fudaa.ctulu.CtuluCommand; -import org.fudaa.ctulu.CtuluCommandContainer; -import org.fudaa.ctulu.ProgressionInterface; -import org.fudaa.ctulu.collection.CtuluCollection; -import org.fudaa.ctulu.collection.CtuluCollectionDoubleEdit; -import org.geotools.feature.type.SetAttributeType; - -/** - * Une classe abstraite d'objets g\xE9ometriques auquels sont associ\xE9s des attributs dont les valeurs - * sont g\xE9r\xE9es par des mod\xE8les. - * Ces mod\xE8les d'attributs sont ordonn\xE9s dans la liste des mod\xE8les d'attributs. - * - * @author Fred Deniger - * @version $Id: GISZoneCollection.java,v 1.16.6.4 2008-03-26 16:46:43 bmarchan Exp $ - */ -public abstract class GISZoneCollection extends GISCollectionData implements GISAttributeListener, GISDataModel { - - private String title_; - - /** La liste ordonn\xE9e des mod\xE8les d'attributs associ\xE9es \xE0 la collection. */ - protected GISAttributeModelListener[] attr_; - /** La valeur de la nature pour pour cette collection si elle est impos\xE9e. null : non impos\xE9e. */ - protected Map fixedAttributes_=new HashMap(); - - protected GISAttributeDouble attributeIsZ_ = null;//GISAttributeConstants.BATHY; // Devrait \xEAtre null par defaut. - - protected boolean isGeomModifiable_ = true; - - public GISZoneCollection() { - super(); - } - - public GISZoneCollection(final boolean _isGeomModifiable) { - isGeomModifiable_ = _isGeomModifiable; - } - - /** - * @param _factory - * @param _nbObject - */ - public GISZoneCollection(final GeometryFactory _factory, final int _nbObject) { - super(_factory, _nbObject); - } - - /** - * @param _nbObject - */ - public GISZoneCollection(final int _nbObject) { - super(_nbObject); - } - - public long getId() { return -1; } - - protected void fireAttributesChanged(final GISAttributeInterface _att) { - if (listener_ != null) { - listener_.attributeChanged(this, _att); - } - } - - protected final void fireObjectAdded() { - if (listener_ != null) { - listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.INSERT); - } - } - - protected final void fireObjectChanged() { - if (listener_ != null) { - listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.UPDATE); - } - } - - protected final void fireObjectRemoved() { - if (listener_ != null) { - listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.DELETE); - } - - } - - protected final void fireObjectStructureChanged() { - if (listener_ != null) { - listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.ALL); - } - } - - protected void fireTitleChanged() { - - } - - /** - * Retourne le mod\xE8le d'attribut associ\xE9 \xE0 l'attribut en indice. - * @param _i L'indice suivant l'ordre de la liste des mod\xE8le d'attributs. - */ - protected CtuluCollection getData(final int _i) { - return isDataCreated(_i) ? attr_[_i] : null; - } - - protected Object getDefaultValuesObject(final int _idxValues) { - return isDataCreated(_idxValues) ? attr_[_idxValues].getAttribute().getDefaultValue() : null; - } - - /** - * @param _i l'indice de l'attribut - * @return le model si existant (null sinon). - */ - protected GISAttributeModelListener getModelListener(final int _i) { - return (GISAttributeModelListener) getData(_i); - } - - protected void initAttributes(final GISAttributeInterface[] _att) { - if (_att != null) { - attr_ = new GISAttributeModelListener[_att.length]; - for (int i = _att.length - 1; i >= 0; i--) { - attr_[i] = (GISAttributeModelListener) GISZoneAttributeFactory.createModel(this, _att[i]); - if (_att[i] == GISAttributeConstants.BATHY) { - setAttributeIsZ(GISAttributeConstants.BATHY); - } - } - } - - } - - protected void initAttributes(final GISAttributeModelListener[] _att) { - attr_ = _att; - } - - /** - * A utiliser avec precaution: change les modeles sans aucune v\xE9rification. - * - * @param _att - * @param _cmd - */ - protected void initAttributes(final GISAttributeModelListener[] _att, final CtuluCommandContainer _cmd) { - if (!Arrays.equals(_att, attr_)) { - final GISAttributeModelListener[] old = attr_; - attr_ = _att; - fireAttributesChanged(null); - if (_cmd != null) { - _cmd.addCmd(new CtuluCommand() { - - public void redo() { - initAttributes(_att, null); - } - - public void undo() { - initAttributes(old, null); - - } - - }); - } - - } - - } - - protected boolean isDataCreated(final int _i) { - return attr_ != null && attr_.length > _i && attr_[_i] != null; - } - - public abstract boolean accept(GISVisitor _v); - - /** - * Ne fait pas de verif quant a l'origine des donnees. - * Remarque : Le modele a ajouter doit avoir le m\xEAme nombre d'attributs que le mod\xE8le courant. Si ce n'est pas - * le cas, une erreur est d\xE9clench\xE9e. - * - * @param _model le model a ajouter - * @param _cmd le receveur de commande - * @param _doPostImport true si on doit lancer l'action de post-traitement. - * @return true si ok. - */ - public boolean addAll(final GISDataModel _model, final CtuluCommandContainer _cmd, final boolean _doPostImport) { - if (!isGeomModifiable_ || _model == null) { - return false; - } - if (_model.getNbAttributes() != getNbAttributes()) { - throw new IllegalArgumentException("Bad attributes"); - } - final int nbGeom = _model.getNumGeometries(); - final Geometry[] pt = new Geometry[nbGeom]; - for (int i = nbGeom - 1; i >= 0; i--) { - pt[i] = _model.getGeometry(i); - } - final int nbAttribute = getNbAttributes(); - final List data = new ArrayList(nbAttribute); - for (int iatt = 0; iatt < nbAttribute; iatt++) { - final GISAttributeInterface gi = getAttribute(iatt); - final Object[] os = new Object[nbGeom]; - for (int igeom = 0; igeom < nbGeom; igeom++) { -// os[igeom] = gi.createDataForGeom(_model.getValue(iatt, igeom), pt[igeom].getNumPoints()); - os[igeom] = createOrAssignAttribut(iatt, _model.getValue(iatt, igeom), pt[igeom]); - } - data.add(nbGeom == 1 ? os[0] : os); - - } - - final int firstIdx = super.geometry_.getSize() - 1; - super.geometry_.addAll(pt, data, _cmd); - if (_doPostImport) { - postImport(firstIdx); - } - - return true; - } - - /** - * Cr\xE9e ou assigne la valeur d'attribut pass\xE9e. Si la valeur pass\xE9e est null, une valeur par d\xE9faut est affect\xE9e. - * Si la valeur est scalaire et l'attribut atomique, un tableau de valeurs est cr\xE9e. Si la valeur est un tableau et - * l'attribut est global, une valeur scalaire moyenne et cr\xE9ee. - * - * @param _iatt L'indice d'attribut dans la liste des attributs. - * @param _valatt La valeur de l'attribut. Peut \xEAtre null. - * @param _dest La g\xE9om\xE9trie pour la cr\xE9ation de la valeur. - * @return La valeur pour l'attribut et la g\xE9om\xE9trie donn\xE9e. - */ - protected Object createOrAssignAttribut(int _iatt, final Object _init, final Geometry _dest) { - Object ret; - final int nbPt = _dest.getNumPoints(); - Object val=fixedAttributes_.get(getAttribute(_iatt)); - if (val==null) val=_init; - ret = getDataModel(_iatt).getAttribute().createDataForGeom(val,nbPt); - if (attributeIsZ_ != null && attributeIsZ_.isAtomicValue() && _init == null && - getDataModel(_iatt).getAttribute() == attributeIsZ_) { - final GISAttributeModelDoubleArray array = (GISAttributeModelDoubleArray) ret; - for (int k = nbPt - 1; k >= 0; k--) { - array.set(k, ((GISCoordinateSequenceContainerInterface)_dest).getCoordinateSequence().getOrdinate(k,2)); - } - } - return ret; - } - - public abstract void addCoordinateSequence(CoordinateSequence _seq, Object[] _datas, CtuluCommandContainer _cmd); - - /** - * Ajoute une g\xE9om\xE9trie du bon type \xE0 la collection. En cas de mauvaise g\xE9ometrie ajout\xE9e, une Exception est lev\xE9e. - * @param _geom La g\xE9om\xE9trie. - * @param _datas Les valeurs d'attributs, dans l'ordre. - * @param _cmd Le manager de commandes. - */ - public abstract void addGeometry(Geometry _geom, Object[] _datas, CtuluCommandContainer _cmd); - - public void removeGeometries(final int[] _idx, CtuluCommandContainer _cmd) { - super.geometry_.remove(_idx, _cmd); - } - - public GISAttributeModel[] getAtomicAttributeSubModel(final int _geomIdx) { - final int nb = getNbAttributes(); - final List r = new ArrayList(nb); - for (int i = 0; i < nb; i++) { - final GISAttributeModel model = getDataModel(i); - if (model.getAttribute().isAtomicValue()) { - // cast inutile mais utilise pour detecte le plus tot les erreur d - r.add(model.getObjectValueAt(_geomIdx)); - } - } - final GISAttributeModel[] rf = new GISAttributeModel[r.size()]; - r.toArray(rf); - return rf; - } - - public GISAttributeInterface getAttribute(final int _i) { - final GISAttributeModel model = getDataModel(_i); - return model == null ? null : model.getAttribute(); - } - - /** - * @return l'attribut qui correspond \xE0 z: il sera automatiquement mis \xE0 jour lors de l'ajout de geometri\xE9 - */ - public final GISAttributeDouble getAttributeIsZ() { - return attributeIsZ_; - } - - /** - * @return les attributs utilises. - */ - public GISAttributeInterface[] getAttributes() { - final GISAttributeInterface[] res = new GISAttributeInterface[getNbAttributes()]; - for (int i = res.length - 1; i >= 0; i--) { - res[i] = getAttribute(i); - } - return res; - - } - - /** - * Retourne le mod\xE8le d'attribut associ\xE9 \xE0 l'attribut en indice. - * @param _i L'indice suivant l'ordre de la liste des mod\xE8le d'attributs. null si aucun mod\xE8le associ\xE9. - */ - public GISAttributeModel getDataModel(final int _i) { - return (GISAttributeModel) getData(_i); - } - - /** - * @return la classe a utiliser pour les sauvegardes dans les data stores - */ - public abstract Class getDataStoreClass(); - - public int getIndiceOf(final GISAttributeInterface _att) { - if (attr_ != null && _att != null) { - for (int i = attr_.length - 1; i >= 0; i--) { - if (_att.equals(getAttribute(i))) { - return i; - } - } - } - return -1; - } - - /** - * @param _att l'attribut recherche - * @return le modele correspondant ou null si aucun. - */ - public GISAttributeModel getModel(final GISAttributeInterface _att) { - if (attr_ != null) { - for (int i = attr_.length - 1; i >= 0; i--) { - if (attr_[i].getAttribute() == _att || attr_[i].getAttribute().equals(_att)) { - return attr_[i]; - } - } - } - return null; - } - - public GISAttributeModel getModel(final int _i) { - return (GISAttributeModelListener) getData(_i); - } - - public GISAttributeModel[] getModels() { - final GISAttributeModel[] res = new GISAttributeModel[attr_.length]; - System.arraycopy(attr_, 0, res, 0, attr_.length); - return res; - } - - public int getNbAttributes() { - return attr_ == null ? 0 : attr_.length; - } - - public int getNbGeometries() { - return super.getNumGeometries(); - } - - /** - * @return le titre ce cette collection - */ - public final String getTitle() { - return title_; - } - - public Object getValue(final int _idxAtt, final int _idxGeom) { - if (_idxAtt<0 || _idxAtt>getNbAttributes()) return null; - return getModel(_idxAtt).getObjectValueAt(_idxGeom); - } - - /** - * Wrapper pour d\xE9finir la valeur d'un attribut. - * @param _idxAtt L'indice de l'attribut. - * @param _idxGeom La g\xE9om\xE9trie. - * @param _data La valeur de l'attribut. - * @param _cmd Le manager undo/redo. - */ - public void setAttributValue(final int _idxAtt, final int _idxGeom, Object _data, CtuluCommandContainer _cmd) { - if (_idxAtt<0 || _idxAtt>getNbAttributes()) return; - getModel(_idxAtt).setObject(_idxGeom, _data, _cmd); - } - - public void gisDataChanged(final GISAttributeInterface _src) { - if (listener_ != null) { - listener_.dataChanged(_src, this); - } - } - - /** - * Mise a jour des listeners et du listener principal. A utiliser lors de la restauration uniquement. - */ - public void initListeners(final GISZoneListener _listener) { - super.setListener(_listener); - updateListeners(); - } - - /** - * @return true si les objets geometriques sont editables - */ - public final boolean isGeomModifiable() { - return isGeomModifiable_; - } - - /** - * Initialise le mod\xE8le d'attribut utilis\xE9 pour Z avec les coordonn\xE9es Z des points des g\xE9om\xE9tries. - * Principalement utilis\xE9 \xE0 la suite d'un import. - * - * @param _firstIdx l'indice de la premiere geometrie utilis\xE9e pour l'initialisation. - * @see #setAttributeIsZ(GISAttributeDouble) - * @see {@link #prepareExport()} pour la m\xE9thode inverse - */ - public abstract void postImport(final int _firstIdx); - - public void preload(final GISAttributeInterface[] _att, final ProgressionInterface _prog) {} - - /** - * Pr\xE9pare l'export des g\xE9om\xE9tries, en affectant \xE0 la coordonn\xE9e Z de leurs points les valeurs contenues - * dans l'attribut utilis\xE9 pour Z. - * - * @see #setAttributeIsZ(GISAttributeDouble) - * @see {@link #postImport(int)} pour la m\xE9thode inverse - */ - public void prepareExport() { - if (attributeIsZ_ != null) { - final GISAttributeModel model = getModel(attributeIsZ_); - if (model instanceof GISAttributeModelObjectInterface) { - final int nb = getNumGeometries(); - for (int i = 0; i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - final GISAttributeModelDoubleArray arr = (GISAttributeModelDoubleArray) model.getObjectValueAt(i); - for (int k = seq.size() - 1; k >= 0; k--) { - seq.setOrdinate(k, 2, arr.getValue(k)); - } - } - } else if (model instanceof CtuluCollectionDoubleEdit) { - final int nb = getNumGeometries(); - final CtuluCollectionDoubleEdit dModel = (CtuluCollectionDoubleEdit) model; - for (int i = 0; i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - final double value = dModel.getValue(i); - for (int k = seq.size() - 1; k >= 0; k--) { - - seq.setOrdinate(k, 2, value); - } - } - } - - } - } - - /** - * D\xE9finit l'attribut qui correspond \xE0 Z. Il est alors utilis\xE9 lors des d\xE9placements en Z de l'objet, - * ou pour la persistence en chaque point s'il est atomique. Seul les attributs de type {@link GISAttributeDouble} - * sont autoris\xE9s.<p> - * Remarque : L'attribut doit \xEAtre dans la liste des attributs de la collection, sinon l'appel de la m\xE9thode n'a pas d'effet. - * - * @param _attributeIsZ l'attribut qui correspond \xE0 z: il sera automatiquement mis \xE0 jour lors de - * l'ajout de geometrie. Peut \xEAtre null. - */ - public final void setAttributeIsZ(final GISAttributeDouble _attributeIsZ) { - if (getIndiceOf(_attributeIsZ)==-1) return; - attributeIsZ_ = _attributeIsZ; - } - - /** - * Definit les attributs pour lesquels la valeur est immuable.<p> - * <b>Remarque</b> : Si des objets existent d\xE9j\xE0 avec une valeur pour l'attribut \xE0 rendre immuable, ces valeurs ne seront pas - * remplac\xE9e par la valeur constante. Utilisez {@link GISZoneCollection#setAttributes()} - * pour r\xE9initialiser les valeurs pour la collection. - * - * @param _att L'attribut \xE0 fixer. - * @param _value La valeur constante. Si null, l'attribut n'est pas obligatoirement fix\xE9. - */ - public void setFixedAttributeValue(GISAttributeInterface _att, Object _value) { - if (_value==null) - fixedAttributes_.remove(_att); - else - fixedAttributes_.put(_att, _value); - } - - /** - * Associe les attributs aux objets de la collection. Pour chaque attribut inexistant dans la liste est cr\xE9\xE9 un nouveau mod\xE8le. - * @param _att La liste des attributs, conditionnant l'ordre des mod\xE8les dans la liste des mod\xE8les. - * @param _cmd Le conteneur de commande. - */ - public void setAttributes(final GISAttributeInterface[] _att, final CtuluCommandContainer _cmd) { - if (_att == attr_ || Arrays.equals(attr_, _att)) { - return; - } - // on sauvegarde les anciens attributs - final GISAttributeModelListener[] old = attr_; - - // on recupere les valeurs d\xE9j\xE0 utilis\xE9es - final Map exist = new HashMap(attr_ == null ? 0 : attr_.length); - if (attr_ != null) { - for (int i = attr_.length - 1; i >= 0; i--) { - exist.put(attr_[i].getAttribute(), attr_[i]); - } - } - final GISAttributeModelListener[] newAtt = _att == null ? null : new GISAttributeModelListener[_att.length]; - if (_att != null) { - for (int i = _att.length - 1; i >= 0; i--) { - newAtt[i] = (GISAttributeModelListener) exist.get(_att[i]); - if (newAtt[i] == null) { - newAtt[i] = (GISAttributeModelListener) GISZoneAttributeFactory.createModel(this, _att[i]); - } - } - } - attr_ = newAtt; - fireAttributesChanged(null); - if (_cmd != null) { - _cmd.addCmd(new CtuluCommand() { - - public void redo() { - attr_ = newAtt; - fireAttributesChanged(null); - } - - public void undo() { - attr_ = old; - fireAttributesChanged(null); - } - - }); - } - - } - - public abstract void setCoordinateSequence(int _idx, CoordinateSequence _newSeq, CtuluCommandContainer _cmd); - - /** - * @param _title le nouveau titre - * @param _cmd la commande - * @return true si modif - */ - public final boolean setTitle(final String _title, final CtuluCommandContainer _cmd) { - // test pour ne pas mettre le meme titre - if (_title == title_ || (_title != null && _title.equals(title_))) { - return false; - } - final String old = _title; - title_ = _title; - fireTitleChanged(); - if (_cmd != null) { - _cmd.addCmd(new CtuluCommand() { - - public void redo() { - setTitle(_title, null); - } - - public void undo() { - setTitle(old, null); - } - }); - } - return true; - - } - - /** - * Mise a jour des listeners. - */ - public abstract void updateListeners(); - -} +/* + * @creation 7 avr. 2005 + * @modification $Date: 2008-03-26 16:46:43 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ctulu.gis; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryFactory; + +import org.fudaa.ctulu.CtuluCommand; +import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.ProgressionInterface; +import org.fudaa.ctulu.collection.CtuluCollection; +import org.fudaa.ctulu.collection.CtuluCollectionDoubleEdit; + +/** + * Une classe abstraite d'objets g\xE9ometriques auquels sont associ\xE9s des attributs dont les valeurs + * sont g\xE9r\xE9es par des mod\xE8les. + * Ces mod\xE8les d'attributs sont ordonn\xE9s dans la liste des mod\xE8les d'attributs. + * + * @author Fred Deniger + * @version $Id: GISZoneCollection.java,v 1.16.6.4 2008-03-26 16:46:43 bmarchan Exp $ + */ +public abstract class GISZoneCollection extends GISCollectionData implements GISAttributeListener, GISDataModel { + + private String title_; + + /** La liste ordonn\xE9e des mod\xE8les d'attributs associ\xE9es \xE0 la collection. */ + protected GISAttributeModelListener[] attr_; + /** La valeur de la nature pour pour cette collection si elle est impos\xE9e. null : non impos\xE9e. */ + protected Map<GISAttributeInterface,Object> fixedAttributes_=new HashMap<GISAttributeInterface,Object>(); + /** L'attribut utilis\xE9 pour Z */ + protected GISAttributeDouble attributeIsZ_=null; + /** L'indice dans la liste des mod\xE8le de l'attribut pris pour Z (pour optimisation des temps). + * Est remis a jour \xE0 chaque modification sur la liste. Si \xE9gal -1, pas d'attribut pris pour Z */ + private int idxAttZ_=-1; + /** L'indice de l'attribut pris pour Z doit \xEAtre remis a jour */ + protected boolean badIdxAttZ_=true; + + protected boolean isGeomModifiable_ = true; + + public GISZoneCollection() { + super(); + } + + public GISZoneCollection(final boolean _isGeomModifiable) { + isGeomModifiable_ = _isGeomModifiable; + } + + /** + * @param _factory + * @param _nbObject + */ + public GISZoneCollection(final GeometryFactory _factory, final int _nbObject) { + super(_factory, _nbObject); + } + + /** + * @param _nbObject + */ + public GISZoneCollection(final int _nbObject) { + super(_nbObject); + } + + public long getId() { return -1; } + + protected void fireAttributesChanged(final GISAttributeInterface _att) { + if (listener_ != null) { + listener_.attributeChanged(this, _att); + } + } + + protected final void fireObjectAdded() { + if (listener_ != null) { + listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.INSERT); + } + } + + protected final void fireObjectChanged() { + if (listener_ != null) { + listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.UPDATE); + } + } + + protected final void fireObjectRemoved() { + if (listener_ != null) { + listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.DELETE); + } + + } + + protected final void fireObjectStructureChanged() { + if (listener_ != null) { + listener_.geometryChanged(this, getDataStoreClass(), GISZoneListener.ALL); + } + } + + protected void fireTitleChanged() { + + } + + /** + * Retourne le mod\xE8le d'attribut associ\xE9 \xE0 l'attribut en indice. + * @param _i L'indice suivant l'ordre de la liste des mod\xE8le d'attributs. + */ + protected CtuluCollection getData(final int _i) { + return isDataCreated(_i) ? attr_[_i] : null; + } + + protected Object getDefaultValuesObject(final int _idxValues) { + return isDataCreated(_idxValues) ? attr_[_idxValues].getAttribute().getDefaultValue() : null; + } + + /** + * @param _i l'indice de l'attribut + * @return le model si existant (null sinon). + */ + protected GISAttributeModelListener getModelListener(final int _i) { + return (GISAttributeModelListener) getData(_i); + } + + protected void initAttributes(final GISAttributeInterface[] _att) { + if (_att != null) { + badIdxAttZ_=true; + attr_ = new GISAttributeModelListener[_att.length]; + for (int i = _att.length - 1; i >= 0; i--) { + attr_[i] = (GISAttributeModelListener) GISZoneAttributeFactory.createModel(this, _att[i]); + // FIXME : B.M. : Je laisse, mais c'est douteux. Dans une collection, l'attribut Z n'est pas forcement + // la bathy. + if (_att[i] == GISAttributeConstants.BATHY) { + setAttributeIsZ(GISAttributeConstants.BATHY); + } + } + } + } + + protected void initAttributes(final GISAttributeModelListener[] _att) { + badIdxAttZ_=true; + attr_ = _att; + } + + /** + * A utiliser avec precaution: change les modeles sans aucune v\xE9rification. + * + * @param _att + * @param _cmd + */ + protected void initAttributes(final GISAttributeModelListener[] _att, final CtuluCommandContainer _cmd) { + if (!Arrays.equals(_att, attr_)) { + badIdxAttZ_=true; + final GISAttributeModelListener[] old = attr_; + attr_ = _att; + fireAttributesChanged(null); + if (_cmd != null) { + _cmd.addCmd(new CtuluCommand() { + + public void redo() { + initAttributes(_att, null); + } + + public void undo() { + initAttributes(old, null); + + } + + }); + } + + } + + } + + protected boolean isDataCreated(final int _i) { + return attr_ != null && attr_.length > _i && attr_[_i] != null; + } + + public abstract boolean accept(GISVisitor _v); + + /** + * Ne fait pas de verif quant a l'origine des donnees. + * Remarque : Le modele a ajouter doit avoir le m\xEAme nombre d'attributs que le mod\xE8le courant. Si ce n'est pas + * le cas, une erreur est d\xE9clench\xE9e. + * + * @param _model le model a ajouter + * @param _cmd le receveur de commande + * @param _doPostImport true si on doit lancer l'action de post-traitement. + * @return true si ok. + */ + public boolean addAll(final GISDataModel _model, final CtuluCommandContainer _cmd, final boolean _doPostImport) { + if (!isGeomModifiable_ || _model == null) { + return false; + } + if (_model.getNbAttributes() != getNbAttributes()) { + throw new IllegalArgumentException("Bad attributes"); + } + final int nbGeom = _model.getNumGeometries(); + final Geometry[] pt = new Geometry[nbGeom]; + for (int i = nbGeom - 1; i >= 0; i--) { + pt[i] = _model.getGeometry(i); + } + final int nbAttribute = getNbAttributes(); + final List data = new ArrayList(nbAttribute); + for (int iatt = 0; iatt < nbAttribute; iatt++) { + final GISAttributeInterface gi = getAttribute(iatt); + final Object[] os = new Object[nbGeom]; + for (int igeom = 0; igeom < nbGeom; igeom++) { +// os[igeom] = gi.createDataForGeom(_model.getValue(iatt, igeom), pt[igeom].getNumPoints()); + os[igeom] = createOrAssignAttribut(iatt, _model.getValue(iatt, igeom), pt[igeom]); + } + data.add(nbGeom == 1 ? os[0] : os); + + } + + final int firstIdx = super.geometry_.getSize() - 1; + super.geometry_.addAll(pt, data, _cmd); + if (_doPostImport) { + postImport(firstIdx); + } + + return true; + } + + /** + * Cr\xE9e ou assigne la valeur d'attribut pass\xE9e. Si la valeur pass\xE9e est null, une valeur par d\xE9faut est affect\xE9e. + * Si la valeur est scalaire et l'attribut atomique, un tableau de valeurs est cr\xE9e. Si la valeur est un tableau et + * l'attribut est global, une valeur scalaire moyenne et cr\xE9ee. + * + * @param _iatt L'indice d'attribut dans la liste des attributs. + * @param _valatt La valeur de l'attribut. Peut \xEAtre null. + * @param _dest La g\xE9om\xE9trie pour la cr\xE9ation de la valeur. + * @return La valeur pour l'attribut et la g\xE9om\xE9trie donn\xE9e. + */ + protected Object createOrAssignAttribut(int _iatt, final Object _init, final Geometry _dest) { + Object ret; + final int nbPt = _dest.getNumPoints(); + Object val=fixedAttributes_.get(getAttribute(_iatt)); + if (val==null) val=_init; + ret = getDataModel(_iatt).getAttribute().createDataForGeom(val,nbPt); + if (getIdxAttZ()!=-1 && getAttributeIsZ().isAtomicValue() && _init == null && + getDataModel(_iatt).getAttribute() == getAttributeIsZ()) { + final GISAttributeModelDoubleArray array = (GISAttributeModelDoubleArray) ret; + for (int k = nbPt - 1; k >= 0; k--) { + array.set(k, ((GISCoordinateSequenceContainerInterface)_dest).getCoordinateSequence().getOrdinate(k,2)); + } + } + return ret; + } + + public abstract void addCoordinateSequence(CoordinateSequence _seq, Object[] _datas, CtuluCommandContainer _cmd); + + /** + * Ajoute une g\xE9om\xE9trie du bon type \xE0 la collection. En cas de mauvaise g\xE9ometrie ajout\xE9e, une Exception est lev\xE9e. + * @param _geom La g\xE9om\xE9trie. + * @param _datas Les valeurs d'attributs, dans l'ordre. + * @param _cmd Le manager de commandes. + */ + public abstract void addGeometry(Geometry _geom, Object[] _datas, CtuluCommandContainer _cmd); + + public void removeGeometries(final int[] _idx, CtuluCommandContainer _cmd) { + super.geometry_.remove(_idx, _cmd); + } + + public GISAttributeModel[] getAtomicAttributeSubModel(final int _geomIdx) { + final int nb = getNbAttributes(); + final List<GISAttributeModel> r = new ArrayList<GISAttributeModel>(nb); + for (int i = 0; i < nb; i++) { + final GISAttributeModel model = getDataModel(i); + if (model.getAttribute().isAtomicValue()) { + // cast inutile mais utilise pour detecte le plus tot les erreur d + r.add((GISAttributeModel)model.getObjectValueAt(_geomIdx)); + } + } + final GISAttributeModel[] rf = new GISAttributeModel[r.size()]; + r.toArray(rf); + return rf; + } + + public GISAttributeInterface getAttribute(final int _i) { + final GISAttributeModel model = getDataModel(_i); + return model == null ? null : model.getAttribute(); + } + + /** + * @return l'attribut qui correspond \xE0 z: il sera automatiquement mis \xE0 jour lors de l'ajout de geometri\xE9 + */ + public final GISAttributeDouble getAttributeIsZ() { + return attributeIsZ_; + } + + /** + * @return les attributs utilises. + */ + public GISAttributeInterface[] getAttributes() { + final GISAttributeInterface[] res = new GISAttributeInterface[getNbAttributes()]; + for (int i = res.length - 1; i >= 0; i--) { + res[i] = getAttribute(i); + } + return res; + + } + + /** + * Retourne le mod\xE8le d'attribut associ\xE9 \xE0 l'attribut en indice. + * @param _i L'indice suivant l'ordre de la liste des mod\xE8le d'attributs. null si aucun mod\xE8le associ\xE9. + */ + public GISAttributeModel getDataModel(final int _i) { + return (GISAttributeModel) getData(_i); + } + + /** + * @return la classe a utiliser pour les sauvegardes dans les data stores + */ + public abstract Class getDataStoreClass(); + + public int getIndiceOf(final GISAttributeInterface _att) { + if (attr_ != null && _att != null) { + for (int i = attr_.length - 1; i >= 0; i--) { + if (_att.equals(getAttribute(i))) { + return i; + } + } + } + return -1; + } + + /** + * @param _att l'attribut recherche + * @return le modele correspondant ou null si aucun. + */ + public GISAttributeModel getModel(final GISAttributeInterface _att) { + if (attr_ != null) { + for (int i = attr_.length - 1; i >= 0; i--) { + if (attr_[i].getAttribute() == _att || attr_[i].getAttribute().equals(_att)) { + return attr_[i]; + } + } + } + return null; + } + + public GISAttributeModel getModel(final int _i) { + return (GISAttributeModelListener) getData(_i); + } + + public GISAttributeModel[] getModels() { + final GISAttributeModel[] res = new GISAttributeModel[attr_.length]; + System.arraycopy(attr_, 0, res, 0, attr_.length); + return res; + } + + public int getNbAttributes() { + return attr_ == null ? 0 : attr_.length; + } + + public int getNbGeometries() { + return super.getNumGeometries(); + } + + /** + * @return le titre ce cette collection + */ + public final String getTitle() { + return title_; + } + + public Object getValue(final int _idxAtt, final int _idxGeom) { + if (_idxAtt<0 || _idxAtt>getNbAttributes()) return null; + return getModel(_idxAtt).getObjectValueAt(_idxGeom); + } + + /** + * Wrapper pour d\xE9finir la valeur d'un attribut. + * @param _idxAtt L'indice de l'attribut. + * @param _idxGeom La g\xE9om\xE9trie. + * @param _data La valeur de l'attribut. + * @param _cmd Le manager undo/redo. + */ + public void setAttributValue(final int _idxAtt, final int _idxGeom, Object _data, CtuluCommandContainer _cmd) { + if (_idxAtt<0 || _idxAtt>getNbAttributes()) return; + getModel(_idxAtt).setObject(_idxGeom, _data, _cmd); + } + + public void gisDataChanged(final GISAttributeInterface _src) { + if (listener_ != null) { + listener_.dataChanged(_src, this); + } + } + + /** + * Mise a jour des listeners et du listener principal. A utiliser lors de la restauration uniquement. + */ + public void initListeners(final GISZoneListener _listener) { + super.setListener(_listener); + updateListeners(); + } + + /** + * @return true si les objets geometriques sont editables + */ + public final boolean isGeomModifiable() { + return isGeomModifiable_; + } + + /** + * Initialise le mod\xE8le d'attribut utilis\xE9 pour Z avec les coordonn\xE9es Z des points des g\xE9om\xE9tries. + * Principalement utilis\xE9 \xE0 la suite d'un import. + * + * @param _firstIdx l'indice de la premiere geometrie utilis\xE9e pour l'initialisation. + * @see #setAttributeIsZ(GISAttributeDouble) + * @see {@link #prepareExport()} pour la m\xE9thode inverse + */ + public void postImport(final int _firstIdx) { + if (getIdxAttZ()==-1) return; + + final int nb = getNumGeometries(); + for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { + initZAttribute(i); + } + } + + public void preload(final GISAttributeInterface[] _att, final ProgressionInterface _prog) {} + + /** + * Pr\xE9pare l'export des g\xE9om\xE9tries, en affectant \xE0 la coordonn\xE9e Z de leurs points les valeurs contenues + * dans l'attribut utilis\xE9 pour Z. + * + * @see #setAttributeIsZ(GISAttributeDouble) + * @see {@link #postImport(int)} pour la m\xE9thode inverse + */ + public void prepareExport() { + if (getIdxAttZ()==-1) return; + + final int nb = getNumGeometries(); + for (int i=0; i<nb; i++) { + initZCoordinate(i); + } + } + + protected int getIdxAttZ() { + if (badIdxAttZ_) { + idxAttZ_=getIndiceOf(attributeIsZ_); + badIdxAttZ_=false; + } + return idxAttZ_; + } + /** + * Initialise les coordonn\xE9es Z d'une g\xE9om\xE9trie avec les valeurs contenues + * dans l'attribut utilis\xE9 pour Z. + * + * @param _idxGeom L'index de g\xE9om\xE9trie. + */ + public void initZCoordinate(int _idxGeom) { + if (getIdxAttZ()==-1) + return; + final GISAttributeModel model = getModel(getIdxAttZ()); + + if (model instanceof GISAttributeModelObjectInterface) { + final CoordinateSequence seq=getCoordinateSequence(_idxGeom); + final GISAttributeModelDoubleArray arr=(GISAttributeModelDoubleArray)model.getObjectValueAt(_idxGeom); + for (int k=seq.size()-1; k>=0; k--) { + seq.setOrdinate(k, 2, arr.getValue(k)); + } + } + else if (model instanceof CtuluCollectionDoubleEdit) { + final CtuluCollectionDoubleEdit dModel=(CtuluCollectionDoubleEdit)model; + final CoordinateSequence seq=getCoordinateSequence(_idxGeom); + final double value=dModel.getValue(_idxGeom); + for (int k=seq.size()-1; k>=0; k--) { + seq.setOrdinate(k, 2, value); + } + } + } + + /** + * Initialise les valeurs dans l'attribut utilis\xE9 pour Z avec les coordonn\xE9es Z d'une g\xE9om\xE9trie. + * + * @param _idxGeom L'index de g\xE9om\xE9trie. + */ + public void initZAttribute(int _idxGeom) { + if (getIdxAttZ()==-1) + return; + final GISAttributeModel model=getModel(getIdxAttZ()); + + if (model instanceof GISAttributeModelObjectInterface) { + final CoordinateSequence seq=getCoordinateSequence(_idxGeom); + final GISAttributeModelDoubleArray arr=(GISAttributeModelDoubleArray)model.getObjectValueAt(_idxGeom); + for (int k=seq.size()-1; k>=0; k--) { + arr.set(k, seq.getOrdinate(k, 2)); + } + } + + // L'attribut est global : On r\xE9cup\xE9re les coordonn\xE9es, qu'on moyenne. + else if (model instanceof CtuluCollectionDoubleEdit) { + final CoordinateSequence seq=getCoordinateSequence(_idxGeom); + double moy=0; + for (int k=seq.size()-1; k>=0; k--) { + moy+=seq.getOrdinate(k, 2); + } + model.setObject(_idxGeom, new Double(moy/seq.size()), null); + } + } + + /** + * D\xE9finit l'attribut qui correspond \xE0 Z. Il est alors utilis\xE9 lors des d\xE9placements en Z de l'objet, + * ou pour la persistence en chaque point s'il est atomique. Seul les attributs de type {@link GISAttributeDouble} + * sont autoris\xE9s.<p> + * Remarque : L'attribut doit \xEAtre dans la liste des attributs de la collection pour que les traitements + * soit effectu\xE9s en en tenant compte. + * + * @param _attributeIsZ l'attribut qui correspond \xE0 z: il sera automatiquement mis \xE0 jour lors de + * l'ajout de geometrie. Peut \xEAtre null. + */ + public void setAttributeIsZ(final GISAttributeDouble _attributeIsZ) { + badIdxAttZ_=true; + attributeIsZ_ = _attributeIsZ; + } + + /** + * Definit les attributs pour lesquels la valeur est immuable.<p> + * <b>Remarque</b> : Si des objets existent d\xE9j\xE0 avec une valeur pour l'attribut \xE0 rendre immuable, ces valeurs ne seront pas + * remplac\xE9e par la valeur constante. Utilisez {@link GISZoneCollection#setAttributes()} + * pour r\xE9initialiser les valeurs pour la collection. + * + * @param _att L'attribut \xE0 fixer. + * @param _value La valeur constante. Si null, l'attribut n'est pas obligatoirement fix\xE9. + */ + public void setFixedAttributeValue(GISAttributeInterface _att, Object _value) { + if (_value==null) + fixedAttributes_.remove(_att); + else + fixedAttributes_.put(_att, _value); + } + + /** + * Associe les attributs aux objets de la collection. Pour chaque attribut inexistant dans la liste est cr\xE9\xE9 un nouveau mod\xE8le. + * @param _att La liste des attributs, conditionnant l'ordre des mod\xE8les dans la liste des mod\xE8les. + * @param _cmd Le conteneur de commande. + */ + public void setAttributes(final GISAttributeInterface[] _att, final CtuluCommandContainer _cmd) { + if (_att == attr_ || Arrays.equals(attr_, _att)) { + return; + } + badIdxAttZ_=true; + // on sauvegarde les anciens attributs + final GISAttributeModelListener[] old = attr_; + + // on recupere les valeurs d\xE9j\xE0 utilis\xE9es + final Map<GISAttributeInterface,GISAttributeModel> exist = + new HashMap<GISAttributeInterface,GISAttributeModel>(attr_ == null ? 0 : attr_.length); + + if (attr_ != null) { + for (int i = attr_.length - 1; i >= 0; i--) { + exist.put(attr_[i].getAttribute(), attr_[i]); + } + } + final GISAttributeModelListener[] newAtt = _att == null ? null : new GISAttributeModelListener[_att.length]; + if (_att != null) { + for (int i = _att.length - 1; i >= 0; i--) { + newAtt[i] = (GISAttributeModelListener) exist.get(_att[i]); + if (newAtt[i] == null) { + newAtt[i] = (GISAttributeModelListener) GISZoneAttributeFactory.createModel(this, _att[i]); + } + } + } + attr_ = newAtt; + fireAttributesChanged(null); + if (_cmd != null) { + _cmd.addCmd(new CtuluCommand() { + + public void redo() { + attr_ = newAtt; + fireAttributesChanged(null); + } + + public void undo() { + attr_ = old; + fireAttributesChanged(null); + } + + }); + } + + } + + public abstract void setCoordinateSequence(int _idx, CoordinateSequence _newSeq, CtuluCommandContainer _cmd); + + /** + * @param _title le nouveau titre + * @param _cmd la commande + * @return true si modif + */ + public final boolean setTitle(final String _title, final CtuluCommandContainer _cmd) { + // test pour ne pas mettre le meme titre + if (_title == title_ || (_title != null && _title.equals(title_))) { + return false; + } + final String old = _title; + title_ = _title; + fireTitleChanged(); + if (_cmd != null) { + _cmd.addCmd(new CtuluCommand() { + + public void redo() { + setTitle(_title, null); + } + + public void undo() { + setTitle(old, null); + } + }); + } + return true; + + } + + /** + * Mise a jour des listeners. + */ + public abstract void updateListeners(); + +} Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java 2008-08-14 10:01:56 UTC (rev 3801) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java 2008-08-14 15:03:15 UTC (rev 3802) @@ -15,8 +15,6 @@ import com.vividsolutions.jts.geom.CoordinateSequence; import com.vividsolutions.jts.geom.Geometry; -import com.memoire.fu.FuLog; - import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluLib; @@ -180,34 +178,6 @@ return ((CtuluCollectionDouble) getModel(_idxAtt)).getValue(_idxGeom); } - public void postImport(final int _firstIdx) { - final GISAttributeModel model = getModel(attributeIsZ_); - if (attributeIsZ_ == null || model == null) return; - - if (attributeIsZ_.isAtomicValue()) { - final int nb = getNumGeometries(); - for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - final GISAttributeModelDoubleArray arr = (GISAttributeModelDoubleArray) model.getObjectValueAt(i); - for (int k = seq.size() - 1; k >= 0; k--) { - arr.set(k, seq.getOrdinate(k, 2)); - } - } - } - // L'attribut est global : On r\xE9cup\xE9re les coordonn\xE9es, qu'on moyenne. - else { - final int nb = getNumGeometries(); - for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - double moy=0; - for (int k = seq.size() - 1; k >= 0; k--) { - moy+=seq.getOrdinate(k, 2); - } - model.setObject(i,new Double(moy/seq.size()),null); - } - } - } - public void setCoordinateSequence(final int _idx, final CoordinateSequence _newSeq, final CtuluCommandContainer _cmd) { final Geometry old = (Geometry) super.geometry_.getValueAt(_idx); if (_newSeq != null && _newSeq.size() == old.getNumPoints()) { Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionLigneBrisee.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionLigneBrisee.java 2008-08-14 10:01:56 UTC (rev 3801) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionLigneBrisee.java 2008-08-14 15:03:15 UTC (rev 3802) @@ -329,34 +329,6 @@ return ((CtuluCollectionDouble) getModel(_idxAtt)).getValue(_idxGeom); } - public void postImport(final int _firstIdx) { - final GISAttributeModel model = getModel(attributeIsZ_); - if (attributeIsZ_ == null || model == null) return; - - if (attributeIsZ_.isAtomicValue()) { - final int nb = getNumGeometries(); - for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - final GISAttributeModelDoubleArray arr = (GISAttributeModelDoubleArray) model.getObjectValueAt(i); - for (int k = seq.size() - 1; k >= 0; k--) { - arr.set(k, seq.getOrdinate(k, 2)); - } - } - } - // L'attribut est global : On r\xE9cup\xE9re les coordonn\xE9es, qu'on moyenne. - else { - final int nb = getNumGeometries(); - for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - double moy=0; - for (int k = seq.size() - 1; k >= 0; k--) { - moy+=seq.getOrdinate(k, 2); - } - model.setObject(i,new Double(moy/seq.size()),null); - } - } - } - public boolean removeAtomicValue(final int _idxGeom, final CtuluListSelectionInterface _sel, final CtuluUI _ui, final CtuluCommandContainer _cmd) { if (_sel == null || _sel.isEmpty()) { Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java 2008-08-14 10:01:56 UTC (rev 3801) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java 2008-08-14 15:03:15 UTC (rev 3802) @@ -260,34 +260,6 @@ return ((CtuluCollectionDouble) getModel(_idxAtt)).getValue(_idxGeom); } - public void postImport(final int _firstIdx) { - final GISAttributeModel model = getModel(attributeIsZ_); - if (attributeIsZ_ == null || model == null) return; - - if (attributeIsZ_.isAtomicValue()) { - final int nb = getNumGeometries(); - for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - final GISAttributeModelDoubleArray arr = (GISAttributeModelDoubleArray) model.getObjectValueAt(i); - for (int k = seq.size() - 1; k >= 0; k--) { - arr.set(k, seq.getOrdinate(k, 2)); - } - } - } - // L'attribut est global : On r\xE9cup\xE9re les coordonn\xE9es, qu'on moyenne. - else { - final int nb = getNumGeometries(); - for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { - final CoordinateSequence seq = getCoordinateSequence(i); - double moy=0; - for (int k = seq.size() - 1; k >= 0; k--) { - moy+=seq.getOrdinate(k, 2); - } - model.setObject(i,new Double(moy/seq.size()),null); - } - } - } - public void setCoordinateSequence(final int _idx, final CoordinateSequence _newSeq, final CtuluCommandContainer _cmd) { final Geometry old = (Geometry) super.geometry_.getValueAt(_idx); if (_newSeq != null && _newSeq.size() == old.getNumPoints()) { Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java 2008-08-14 10:01:56 UTC (rev 3801) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionPoint.java 2008-08-14 15:03:15 UTC (rev 3802) @@ -146,16 +146,6 @@ return true; } - public void postImport(final int _firstIdx) { - if (attributeIsZ_ != null) { - final GISAttributeModelDoubleInterface dModel = (GISAttributeModelDoubleInterface) getModel(attributeIsZ_); - final int nb = getNumGeometries(); - for (int i = (_firstIdx < 0 ? 0 : _firstIdx); i < nb; i++) { - dModel.set(i, getZ(i), null); - } - } - } - public void setCoordinateSequence(final int _idx, final CoordinateSequence _newSeq, final CtuluCommandContainer _cmd) { if (_newSeq != null && _newSeq.size() == 1) { set(_idx, _newSeq.getX(0), _newSeq.getY(0), _cmd); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |