From: <bma...@us...> - 2008-06-27 15:21:12
|
Revision: 3662 http://fudaa.svn.sourceforge.net/fudaa/?rev=3662&view=rev Author: bmarchan Date: 2008-06-27 08:21:09 -0700 (Fri, 27 Jun 2008) Log Message: ----------- Un peu de doc... Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java 2008-06-27 15:16:05 UTC (rev 3661) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java 2008-06-27 15:21:09 UTC (rev 3662) @@ -12,6 +12,10 @@ import org.fudaa.ctulu.ProgressionInterface; /** + * Un adapteur permettant d'exposer certains attributs seulement d'un mod\xE8le de donn\xE9es. Seuls des attributs existants dans + * le modele original peuvent \xEAtre filtr\xE9s. Les indices des attributs expos\xE9s sont donn\xE9s sous forme d'un tableau, + * pas n\xE9cessairement dans un ordre croissant. + * * @author fred deniger * @version $Id: GISDataModelAbstract.java,v 1.1 2007-01-10 08:58:47 deniger Exp $ */ @@ -20,6 +24,10 @@ final int[] attShown_; protected final GISDataModel model_; + /** + * @param _attShown Les indices des seuls attributs a exposer. + * @param _model Le mod\xE8le d'origine. + */ public GISDataModelAbstract(final int[] _attShown, final GISDataModel _model) { super(); attShown_ = _attShown; Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2008-06-27 15:16:05 UTC (rev 3661) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2008-06-27 15:21:09 UTC (rev 3662) @@ -14,19 +14,28 @@ import org.fudaa.ctulu.CtuluLibArray; /** + * Un filtre permettant d'exposer certains attributs d'un mod\xE8le de donn\xE9es + * et/ou certaines g\xE9om\xE9tries.<p> + * <b>Important</b> : Le filtre autorise des attributs qui ne sont pas dans le modele d'origine. + * Pour ces attributs, les valeurs retourn\xE9es pour chaque g\xE9om\xE9trie sont nulles. * @author Fred Deniger * @version $Id: GISDataModelFilterAdapter.java,v 1.1 2007-01-10 08:58:47 deniger Exp $ */ public class GISDataModelFilterAdapter extends GISDataModelAbstract { + /** + * Cr\xE9ation d'un filtre conservant toutes les g\xE9om\xE9tries et seulement les attributs donn\xE9s. + */ public static GISDataModelFilterAdapter buildAdapter(final GISDataModel _collection, final GISAttributeInterface[] _att) { return buildAdapter(_collection, _att, null); } /** + * Cr\xE9ation d'un filtre ne conservant que les g\xE9om\xE9tries d'indices donn\xE9s et les attributs donn\xE9s. * @param _collection la zone a adapter * @param _att les attributs dans l'ordre voulu. + * @param _idxGeom Les indices des seules g\xE9om\xE9tries \xE0 exposer. * @return l'adapteur */ public static GISDataModelFilterAdapter buildAdapter(final GISDataModel _collection, @@ -42,6 +51,9 @@ } + /** + * Cr\xE9ation d'un filtre ne conservant que les lignes et les d'attributs donn\xE9s. + */ public static GISDataModelFilterAdapter buildLigneAdapter(final GISDataModel _collection, final GISAttributeInterface[] _att) { boolean allLigneBrisee = true; @@ -62,6 +74,9 @@ return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); } + /** + * Cr\xE9ation d'un filtre ne conservant que les lignes ferm\xE9es et les d'attributs donn\xE9s. + */ public static GISDataModelFilterAdapter buildLigneFermeeAdapter(final GISDataModel _collection, final GISAttributeInterface[] _att) { boolean allLigneFermee = true; @@ -82,6 +97,9 @@ return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); } + /** + * Cr\xE9ation d'un filtre ne conservant que les lignes ferm\xE9es et les d'attributs donn\xE9s. + */ public static GISDataModelFilterAdapter buildLigneOuverteAdapter(final GISDataModel _collection, final GISAttributeInterface[] _att) { boolean allLigneBrisee = true; @@ -102,6 +120,9 @@ return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); } + /** + * Cr\xE9ation d'un filtre ne conservant que les points et les d'attributs donn\xE9s. + */ public static GISDataModelFilterAdapter buildPointAdapter(final GISDataModel _collection, final GISAttributeInterface[] _att) { boolean allPoint = true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-06-27 15:21:40
|
Revision: 3663 http://fudaa.svn.sourceforge.net/fudaa/?rev=3663&view=rev Author: bmarchan Date: 2008-06-27 08:21:44 -0700 (Fri, 27 Jun 2008) Log Message: ----------- Ajout d'une m?\195?\169thode getId() pour retourner identifiant unique sur g?\195?\169om?\195?\169trie. Ceci pour constituer un nom par d?\195?\169faut unique. Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolygoneWithHole.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolyligne.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygoneWithHole.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolyligne.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISRien.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZone.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometry.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -13,6 +13,14 @@ * @version $Id: GISGeometry.java,v 1.2 2006-02-09 08:59:28 deniger Exp $ */ public interface GISGeometry { + + /** + * L'identifiant, unique pour une g\xE9om\xE9trie. Cet identifiant peut \xEAtre utilis\xE9 pour donner + * un nom par d\xE9faut \xE0 une g\xE9om\xE9trie. + * @see GISGeometryFactory + * @return L'identifiant de la g\xE9om\xE9trie. + */ + long getId(); boolean accept(GISVisitor _v); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryCollection.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -24,5 +24,7 @@ public boolean accept(final GISVisitor _v) { return _v.visitGeometryCollection(this); } + + public long getId() { return -1; } } Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -16,15 +16,21 @@ */ public final class GISGeometryFactory extends GeometryFactory { - /** - * Singletion. - */ + /** Numero d'identifiant, incr\xE9ment\xE9 \xE0 chaque nouvelle cr\xE9ation de g\xE9om\xE9trie. + En cas de suppression de g\xE9om\xE9trie, ce num\xE9ro n'est pas d\xE9cr\xE9ment\xE9. */ + protected long numid_=0; + /** Singletion */ public static final GISGeometryFactory INSTANCE = new GISGeometryFactory(); private GISGeometryFactory() { super(new PrecisionModel(10E6), 0, new GISCoordinateSequenceFactory()); } + + /** Retourne un nouvel identifiant a affecter a la g\xE9om\xE9trie */ + protected long getNewId() { + return ++numid_; + } public Point createPoint(final Coordinate _coordinate){ return new GISPoint(_coordinate); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -21,6 +21,7 @@ public class GISMultiPoint extends MultiPoint implements GISGeometry { CoordinateSequence seq_; + protected long id_=GISGeometryFactory.INSTANCE.getNewId(); public GISMultiPoint() { super(null, GISGeometryFactory.INSTANCE); @@ -31,6 +32,10 @@ super(_points, GISGeometryFactory.INSTANCE); seq_=GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(this.getCoordinates()); } + + public long getId() { + return id_; + } public boolean accept(final GISVisitor _v) { return _v.visitMultiPoint(this); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolygoneWithHole.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolygoneWithHole.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolygoneWithHole.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -17,6 +17,11 @@ * @version $Id: GISMultiPolygoneWithHole.java,v 1.8 2007-01-17 10:45:25 deniger Exp $ */ public class GISMultiPolygoneWithHole extends MultiPolygon implements GISGeometry { + protected long id_=GISGeometryFactory.INSTANCE.getNewId(); + + public long getId() { + return id_; + } public GISMultiPolygoneWithHole() { super(null, GISGeometryFactory.INSTANCE); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolyligne.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolyligne.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPolyligne.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -17,6 +17,11 @@ * @version $Id: GISMultiPolyligne.java,v 1.8 2007-01-17 10:45:25 deniger Exp $ */ public class GISMultiPolyligne extends MultiLineString implements GISPointContainerInterface, GISGeometry { + protected long id_=GISGeometryFactory.INSTANCE.getNewId(); + + public long getId() { + return id_; + } public GISMultiPolyligne() { this(null); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -18,6 +18,12 @@ * @version $Id: GISPoint.java,v 1.5 2006-07-13 13:34:35 deniger Exp $ */ public class GISPoint extends Point implements GISGeometry { + protected long id_=GISGeometryFactory.INSTANCE.getNewId(); + + public long getId() { + return id_; + } + /** * @param _p1 le point 1 * @param _p2 le point 2 Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygone.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -19,6 +19,11 @@ * @version $Id: GISPolygone.java,v 1.10 2007-01-17 10:45:25 deniger Exp $ */ public class GISPolygone extends LinearRing implements GISPointContainerInterface, GISLigneBrisee { + protected long id_=GISGeometryFactory.INSTANCE.getNewId(); + + public long getId() { + return id_; + } GISPolygone() { super(GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create( Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygoneWithHole.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygoneWithHole.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolygoneWithHole.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -18,6 +18,11 @@ * @version $Id: GISPolygoneWithHole.java,v 1.6 2007-01-17 10:45:25 deniger Exp $ */ public class GISPolygoneWithHole extends Polygon implements GISGeometry{ + protected long id_=GISGeometryFactory.INSTANCE.getNewId(); + + public long getId() { + return id_; + } public GISPolygoneWithHole() { super(new GISPolygone(), null, GISGeometryFactory.INSTANCE); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolyligne.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolyligne.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPolyligne.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -18,6 +18,11 @@ * @version $Id: GISPolyligne.java,v 1.7 2007-01-17 10:45:25 deniger Exp $ */ public class GISPolyligne extends LineString implements GISPointContainerInterface, GISLigneBrisee { + protected long id_=GISGeometryFactory.INSTANCE.getNewId(); + + public long getId() { + return id_; + } /** * @param _points Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISRien.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISRien.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISRien.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -21,6 +21,7 @@ * @version $Id: GISRien.java,v 1.5 2007-01-17 10:45:25 deniger Exp $ */ public final class GISRien extends Geometry implements GISGeometry { + public long getId() { return -1; } public final static GISRien INSTANCE = new GISRien(); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZone.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZone.java 2008-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZone.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -20,6 +20,7 @@ * @version $Id: GISZone.java,v 1.6.8.1 2008-02-01 14:42:44 bmarchan Exp $ */ public class GISZone extends GISCollection{ + public long getId() { return -1; } String nom_; 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-06-27 15:21:09 UTC (rev 3662) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java 2008-06-27 15:21:44 UTC (rev 3663) @@ -64,6 +64,8 @@ public GISZoneCollection(final int _nbObject) { super(_nbObject); } + + public long getId() { return -1; } protected void fireAttributesChanged(final GISAttributeInterface _att) { if (listener_ != null) { @@ -175,6 +177,8 @@ /** * 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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-07-01 14:45:05
|
Revision: 3666 http://fudaa.svn.sourceforge.net/fudaa/?rev=3666&view=rev Author: bmarchan Date: 2008-07-01 07:44:38 -0700 (Tue, 01 Jul 2008) Log Message: ----------- Bug#30 : Cr?\195?\169ation/modification semis de points puis sauvegarde : le Z est a pr?\195?\169sent restitu?\195?\169. Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java Added Paths: ----------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISSequencesCoordinateSequence.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java 2008-06-27 15:25:48 UTC (rev 3665) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java 2008-07-01 14:44:38 UTC (rev 3666) @@ -15,22 +15,20 @@ /** * Un multipoint est un ensemble de points, qui peut \xEAtre r\xE9duit \xE0 1 point seulement. - * @author Fred Deniger + * @author Bertrand Marchand * @version $Id: GISMultiPoint.java,v 1.8.6.2 2008-04-01 17:09:56 bmarchan Exp $ */ public class GISMultiPoint extends MultiPoint implements GISGeometry { - CoordinateSequence seq_; + CoordinateSequence seq_=null; protected long id_=GISGeometryFactory.INSTANCE.getNewId(); public GISMultiPoint() { super(null, GISGeometryFactory.INSTANCE); - seq_=GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(this.getCoordinates()); } public GISMultiPoint(final Point[] _points) { super(_points, GISGeometryFactory.INSTANCE); - seq_=GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(this.getCoordinates()); } public long getId() { @@ -43,9 +41,18 @@ /** * Cette methode est ajout\xE9e pour des questions de performance lors du rafraichissement de multipoints - * avec beaucoup de points. + * avec beaucoup de points. La sequence agit directement sur les implementations internes des Point. */ public CoordinateSequence getCoordinateSequence() { + if (seq_==null) { + // Doit g\xE9rer des CoordinateSequence[]. Sinon, un getCoordinateSequence().setOrdinate(i,2) n'affecte pas le Z du multipoint, + // mais le Z d'une copie des coordonn\xE9es du multipoint. +// seq_=GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(this.getCoordinates()); + Point[] pts=new Point[getNumGeometries()]; + for (int i=0; i<getNumGeometries(); i++) + pts[i]=(Point)getGeometryN(i); + seq_=new GISSequencesCoordinateSequence(pts); + } return seq_; } @@ -55,7 +62,6 @@ */ public GISMultiPoint(final Point[] _points, final GeometryFactory _factory) { super(_points, _factory); - seq_=GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(this.getCoordinates()); } public boolean fillListWithPoint(final GISCollectionPointInteface _listToFill) { Added: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISSequencesCoordinateSequence.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISSequencesCoordinateSequence.java (rev 0) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISSequencesCoordinateSequence.java 2008-07-01 14:44:38 UTC (rev 3666) @@ -0,0 +1,119 @@ +/* + * @creation 18 mars 2005 + * @modification $Date: 2006-09-19 14:36:53 $ + * @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 com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Point; + +/** + * Une sequence de coordonn\xE9es bas\xE9e sur des sequences unique.<p> + * + * Ceci permet notamment de modifier les coordonn\xE9es d'un {@link GISMultiPoint} qui s'appuie sur les <code>Point</code>. + * La modification des coordonn\xE9es d'un {@link Point} ne ne peut se faire qu'au travers de sa {@link CoordinateSequence}, + * la Coordinate n'\xE9tant qu'une copie de son impl\xE9mentation interne. + * + * @author Bertrand Marchand + * @version $Id: GISCoordinateSequenceUnique.java,v 1.9 2006-09-19 14:36:53 deniger Exp $ + */ +public class GISSequencesCoordinateSequence implements CoordinateSequence { + + CoordinateSequence[] seqs_; + + /** + * Construction a partir de sequences. Les sequences doivent \xEAtre des {@link GISCoordinateSequenceUnique} (non control\xE9). + * @param _seqs Les s\xE9quences. + */ + public GISSequencesCoordinateSequence(CoordinateSequence[] _seqs) { + seqs_=_seqs; + } + + /** + * Construction a partir de points. + * @param _pts Les points. + */ + public GISSequencesCoordinateSequence(Point[] _pts) { + seqs_=new CoordinateSequence[_pts.length]; + for (int i=0; i<_pts.length; i++) { + seqs_[i]=_pts[i].getCoordinateSequence(); + } + } + + public int getDimension() { + return 3; + } + + public Object clone() { + return new GISSequencesCoordinateSequence(seqs_); + } + + public Envelope expandEnvelope(final Envelope _env) { + for (int i=0; i<seqs_.length; i++) { + _env.expandToInclude(seqs_[i].getX(0),seqs_[i].getY(0)); + } + return _env; + } + + public void getCoordinate(final int _index, final Coordinate _coord) { + _coord.x = seqs_[_index].getOrdinate(0,0); + _coord.y = seqs_[_index].getOrdinate(0,1); + _coord.z = seqs_[_index].getOrdinate(0,2); + } + + public Coordinate getCoordinate(final int _index) { + return seqs_[_index].getCoordinate(0); + } + + public Coordinate getCoordinateCopy(final int _index) { + return (Coordinate)getCoordinate(_index).clone(); + } + + public double getOrdinate(final int _index, final int _ordinateIndex) { + switch (_ordinateIndex) { + case CoordinateSequence.X: + case CoordinateSequence.Y: + case CoordinateSequence.Z: + return seqs_[_index].getOrdinate(0, _ordinateIndex); + default: + throw new IllegalArgumentException("bad ordinate"); + } + } + + public double getX(final int _index) { + return seqs_[_index].getOrdinate(0,0); + } + + public double getY(final int _index) { + return seqs_[_index].getOrdinate(0,1); + } + + public void setOrdinate(final int _index, final int _ordinateIndex, final double _value) { + switch (_ordinateIndex) { + case CoordinateSequence.X: + case CoordinateSequence.Y: + case CoordinateSequence.Z: + seqs_[_index].setOrdinate(0,_ordinateIndex,_value); + break; + default: + throw new IllegalArgumentException("bad ordinate"); + } + } + + public int size() { + return seqs_.length; + } + + public Coordinate[] toCoordinateArray() { + Coordinate[] coords=new Coordinate[seqs_.length]; + for (int i=0; i<coords.length; i++) { + coords[i]=seqs_[i].getCoordinate(0); + } + return coords; + } +} \ No newline at end of file Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISSequencesCoordinateSequence.java ___________________________________________________________________ Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-07-09 15:48:46
|
Revision: 3671 http://fudaa.svn.sourceforge.net/fudaa/?rev=3671&view=rev Author: bmarchan Date: 2008-07-09 08:48:54 -0700 (Wed, 09 Jul 2008) Log Message: ----------- Implementent GISCoordinateSequenceContainerInterface pour traitements g?\195?\169n?\195?\169riques. Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLigneBrisee.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java Added Paths: ----------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCoordinateSequenceContainerInterface.java Added: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCoordinateSequenceContainerInterface.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCoordinateSequenceContainerInterface.java (rev 0) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCoordinateSequenceContainerInterface.java 2008-07-09 15:48:54 UTC (rev 3671) @@ -0,0 +1,24 @@ +/* + * @creation 11 f\xE9vr. 2004 + * @modification $Date: 2006-02-09 08:59:28 $ + * @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 com.vividsolutions.jts.geom.CoordinateSequence; + +/** + * Interface definissant des g\xE9om\xE9tries \xE0 base de {@link CoordinateSequence}. + * + * @author Bertrand Marchand + * @version $Id: GISPointContainerInterface.java,v 1.3 2006-02-09 08:59:28 deniger Exp $ + */ +public interface GISCoordinateSequenceContainerInterface { + + /** + * @return La sequence de coordonn\xE9es pour la g\xE9om\xE9trie. + */ + public CoordinateSequence getCoordinateSequence(); +} Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISCoordinateSequenceContainerInterface.java ___________________________________________________________________ Name: svn:eol-style + native Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLigneBrisee.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLigneBrisee.java 2008-07-08 14:47:31 UTC (rev 3670) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLigneBrisee.java 2008-07-09 15:48:54 UTC (rev 3671) @@ -12,7 +12,7 @@ * @author Fred Deniger * @version $Id: GISLigneBrisee.java,v 1.2 2006-02-09 08:59:28 deniger Exp $ */ -public interface GISLigneBrisee extends GISGeometry{ +public interface GISLigneBrisee extends GISGeometry, GISCoordinateSequenceContainerInterface{ Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java 2008-07-08 14:47:31 UTC (rev 3670) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISMultiPoint.java 2008-07-09 15:48:54 UTC (rev 3671) @@ -18,7 +18,7 @@ * @author Bertrand Marchand * @version $Id: GISMultiPoint.java,v 1.8.6.2 2008-04-01 17:09:56 bmarchan Exp $ */ -public class GISMultiPoint extends MultiPoint implements GISGeometry { +public class GISMultiPoint extends MultiPoint implements GISGeometry, GISCoordinateSequenceContainerInterface { CoordinateSequence seq_=null; protected long id_=GISGeometryFactory.INSTANCE.getNewId(); Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java 2008-07-08 14:47:31 UTC (rev 3670) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISPoint.java 2008-07-09 15:48:54 UTC (rev 3671) @@ -17,7 +17,7 @@ * @author deniger * @version $Id: GISPoint.java,v 1.5 2006-07-13 13:34:35 deniger Exp $ */ -public class GISPoint extends Point implements GISGeometry { +public class GISPoint extends Point implements GISGeometry, GISCoordinateSequenceContainerInterface { protected long id_=GISGeometryFactory.INSTANCE.getNewId(); public long getId() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-07-09 16:05:59
|
Revision: 3673 http://fudaa.svn.sourceforge.net/fudaa/?rev=3673&view=rev Author: bmarchan Date: 2008-07-09 09:05:52 -0700 (Wed, 09 Jul 2008) Log Message: ----------- Correctif pour correspondre au contrat GISDataModel Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java 2008-07-09 15:56:30 UTC (rev 3672) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAbstract.java 2008-07-09 16:05:52 UTC (rev 3673) @@ -39,8 +39,9 @@ } public final int getIndiceOf(final GISAttributeInterface _att) { + if (_att==null) return -1; for (int i = getNbAttributes() - 1; i >= 0; i--) { - if (getAttribute(i).equals(_att)) { + if (_att.equals(getAttribute(i))) { return i; } } @@ -52,11 +53,16 @@ } public final GISAttributeInterface getAttribute(final int _idxAtt) { - return model_.getAttribute(attShown_ == null ? _idxAtt : attShown_[_idxAtt]); + int idx=getRealAttributIndex(_idxAtt); + if (idx<0 || idx>model_.getNbAttributes()) return null; + return model_.getAttribute(idx); } public Envelope getEnvelopeInternal() { return model_.getEnvelopeInternal(); } - + + protected int getRealAttributIndex(final int _idxAtt) { + return attShown_ == null ? _idxAtt : attShown_[_idxAtt]; + } } Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2008-07-09 15:56:30 UTC (rev 3672) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2008-07-09 16:05:52 UTC (rev 3673) @@ -1,188 +1,188 @@ -/* - * @creation 6 juin 2005 - * @modification $Date: 2007-01-10 08:58:47 $ - * @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.BitSet; - -import com.vividsolutions.jts.geom.Geometry; - -import org.fudaa.ctulu.CtuluLibArray; - -/** - * Un filtre permettant d'exposer certains attributs d'un mod\xE8le de donn\xE9es - * et/ou certaines g\xE9om\xE9tries.<p> - * <b>Important</b> : Le filtre autorise des attributs qui ne sont pas dans le modele d'origine. - * Pour ces attributs, les valeurs retourn\xE9es pour chaque g\xE9om\xE9trie sont nulles. - * @author Fred Deniger - * @version $Id: GISDataModelFilterAdapter.java,v 1.1 2007-01-10 08:58:47 deniger Exp $ - */ -public class GISDataModelFilterAdapter extends GISDataModelAbstract { - - /** - * Cr\xE9ation d'un filtre conservant toutes les g\xE9om\xE9tries et seulement les attributs donn\xE9s. - */ - public static GISDataModelFilterAdapter buildAdapter(final GISDataModel _collection, - final GISAttributeInterface[] _att) { - return buildAdapter(_collection, _att, null); - } - - /** - * Cr\xE9ation d'un filtre ne conservant que les g\xE9om\xE9tries d'indices donn\xE9s et les attributs donn\xE9s. - * @param _collection la zone a adapter - * @param _att les attributs dans l'ordre voulu. - * @param _idxGeom Les indices des seules g\xE9om\xE9tries \xE0 exposer. - * @return l'adapteur - */ - public static GISDataModelFilterAdapter buildAdapter(final GISDataModel _collection, - final GISAttributeInterface[] _att, final int[] _idxGeom) { - - final int[] idx = _att == null ? null : new int[_att.length]; - if (_att != null) { - for (int i = _att.length - 1; i >= 0; i--) { - idx[i] = _collection.getIndiceOf(_att[i]); - } - } - return new GISDataModelFilterAdapter(_collection, idx, _idxGeom); - - } - - /** - * Cr\xE9ation d'un filtre ne conservant que les lignes et les d'attributs donn\xE9s. - */ - public static GISDataModelFilterAdapter buildLigneAdapter(final GISDataModel _collection, - final GISAttributeInterface[] _att) { - boolean allLigneBrisee = true; - final GISVisitorChooser chooser = new GISVisitorChooser(); - final int nb = _collection.getNumGeometries(); - final BitSet set = new BitSet(nb); - for (int i = 0; i < nb; i++) { - ((GISGeometry) _collection.getGeometry(i)).accept(chooser); - if (chooser.isPolyligne() || chooser.isPolygone()) { - set.set(i); - } else { - allLigneBrisee = false; - } - } - if (allLigneBrisee) { - return buildAdapter(_collection, _att, null); - } - return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); - } - - /** - * Cr\xE9ation d'un filtre ne conservant que les lignes ferm\xE9es et les d'attributs donn\xE9s. - */ - public static GISDataModelFilterAdapter buildLigneFermeeAdapter(final GISDataModel _collection, - final GISAttributeInterface[] _att) { - boolean allLigneFermee = true; - final GISVisitorChooser chooser = new GISVisitorChooser(); - final int nb = _collection.getNumGeometries(); - final BitSet set = new BitSet(nb); - for (int i = 0; i < nb; i++) { - ((GISGeometry) _collection.getGeometry(i)).accept(chooser); - if (chooser.isPolygone()) { - set.set(i); - } else { - allLigneFermee = false; - } - } - if (allLigneFermee) { - return buildAdapter(_collection, _att, null); - } - return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); - } - - /** - * Cr\xE9ation d'un filtre ne conservant que les lignes ferm\xE9es et les d'attributs donn\xE9s. - */ - public static GISDataModelFilterAdapter buildLigneOuverteAdapter(final GISDataModel _collection, - final GISAttributeInterface[] _att) { - boolean allLigneBrisee = true; - final GISVisitorChooser chooser = new GISVisitorChooser(); - final int nb = _collection.getNumGeometries(); - final BitSet set = new BitSet(nb); - for (int i = 0; i < nb; i++) { - ((GISGeometry) _collection.getGeometry(i)).accept(chooser); - if (chooser.isPolyligne()) { - set.set(i); - } else { - allLigneBrisee = false; - } - } - if (allLigneBrisee) { - return buildAdapter(_collection, _att, null); - } - return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); - } - - /** - * Cr\xE9ation d'un filtre ne conservant que les points et les d'attributs donn\xE9s. - */ - public static GISDataModelFilterAdapter buildPointAdapter(final GISDataModel _collection, - final GISAttributeInterface[] _att) { - boolean allPoint = true; - final GISVisitorChooser chooser = new GISVisitorChooser(); - final int nb = _collection.getNumGeometries(); - final BitSet set = new BitSet(nb); - for (int i = 0; i < nb; i++) { - ((GISGeometry) _collection.getGeometry(i)).accept(chooser); - if (chooser.isPt()) { - set.set(i); - } else { - allPoint = false; - } - } - if (allPoint) { - return buildAdapter(_collection, _att, null); - } - return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); - } - - final int[] geometryShown_; - - /** - * @param _model - * @param _idxAtt - */ - public GISDataModelFilterAdapter(final GISDataModel _model, final int[] _idxAtt, final int[] _idxGeom) { - super(_idxAtt, _model); - - geometryShown_ = _idxGeom; - } - - private int getRealGeometryIndex(final int _init) { - return geometryShown_ == null ? _init : geometryShown_[_init]; - } - - // geom - - public double getDoubleValue(final int _idxAtt, final int _idxGeom) { - final int idx = attShown_ == null ? _idxAtt : attShown_[_idxAtt]; - if (idx < 0 || idx >= model_.getNbAttributes()) { - return 0; - } - return model_.getDoubleValue(idx, getRealGeometryIndex(_idxGeom)); - } - - public Geometry getGeometry(final int _idxGeom) { - return model_.getGeometry(getRealGeometryIndex(_idxGeom)); - } - - public int getNumGeometries() { - return geometryShown_ == null ? model_.getNumGeometries() : geometryShown_.length; - } - - public Object getValue(final int _idxAtt, final int _idxGeom) { - final int idx = attShown_ == null ? _idxAtt : attShown_[_idxAtt]; - if (idx < 0 || idx >= model_.getNbAttributes()) { - return null; - } - return model_.getValue(idx, getRealGeometryIndex(_idxGeom)); - } - -} +/* + * @creation 6 juin 2005 + * @modification $Date: 2007-01-10 08:58:47 $ + * @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.BitSet; + +import com.vividsolutions.jts.geom.Geometry; + +import org.fudaa.ctulu.CtuluLibArray; + +/** + * Un filtre permettant d'exposer certains attributs d'un mod\xE8le de donn\xE9es + * et/ou certaines g\xE9om\xE9tries.<p> + * <b>Important</b> : Le filtre autorise des attributs qui ne sont pas dans le modele d'origine. + * Pour ces attributs, les valeurs retourn\xE9es pour chaque g\xE9om\xE9trie sont nulles. + * @author Fred Deniger + * @version $Id: GISDataModelFilterAdapter.java,v 1.1 2007-01-10 08:58:47 deniger Exp $ + */ +public class GISDataModelFilterAdapter extends GISDataModelAbstract { + + /** + * Cr\xE9ation d'un filtre conservant toutes les g\xE9om\xE9tries et seulement les attributs donn\xE9s. + */ + public static GISDataModelFilterAdapter buildAdapter(final GISDataModel _collection, + final GISAttributeInterface[] _att) { + return buildAdapter(_collection, _att, null); + } + + /** + * Cr\xE9ation d'un filtre ne conservant que les g\xE9om\xE9tries d'indices donn\xE9s et les attributs donn\xE9s. + * @param _collection la zone a adapter + * @param _att les attributs dans l'ordre voulu. + * @param _idxGeom Les indices des seules g\xE9om\xE9tries \xE0 exposer, dans l'ordre souhait\xE9. + * @return l'adapteur + */ + public static GISDataModelFilterAdapter buildAdapter(final GISDataModel _collection, + final GISAttributeInterface[] _att, final int[] _idxGeom) { + + final int[] idx = _att == null ? null : new int[_att.length]; + if (_att != null) { + for (int i = _att.length - 1; i >= 0; i--) { + idx[i] = _collection.getIndiceOf(_att[i]); + } + } + return new GISDataModelFilterAdapter(_collection, idx, _idxGeom); + + } + + /** + * Cr\xE9ation d'un filtre ne conservant que les lignes et les d'attributs donn\xE9s. + */ + public static GISDataModelFilterAdapter buildLigneAdapter(final GISDataModel _collection, + final GISAttributeInterface[] _att) { + boolean allLigneBrisee = true; + final GISVisitorChooser chooser = new GISVisitorChooser(); + final int nb = _collection.getNumGeometries(); + final BitSet set = new BitSet(nb); + for (int i = 0; i < nb; i++) { + ((GISGeometry) _collection.getGeometry(i)).accept(chooser); + if (chooser.isPolyligne() || chooser.isPolygone()) { + set.set(i); + } else { + allLigneBrisee = false; + } + } + if (allLigneBrisee) { + return buildAdapter(_collection, _att, null); + } + return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); + } + + /** + * Cr\xE9ation d'un filtre ne conservant que les lignes ferm\xE9es et les d'attributs donn\xE9s. + */ + public static GISDataModelFilterAdapter buildLigneFermeeAdapter(final GISDataModel _collection, + final GISAttributeInterface[] _att) { + boolean allLigneFermee = true; + final GISVisitorChooser chooser = new GISVisitorChooser(); + final int nb = _collection.getNumGeometries(); + final BitSet set = new BitSet(nb); + for (int i = 0; i < nb; i++) { + ((GISGeometry) _collection.getGeometry(i)).accept(chooser); + if (chooser.isPolygone()) { + set.set(i); + } else { + allLigneFermee = false; + } + } + if (allLigneFermee) { + return buildAdapter(_collection, _att, null); + } + return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); + } + + /** + * Cr\xE9ation d'un filtre ne conservant que les lignes ferm\xE9es et les d'attributs donn\xE9s. + */ + public static GISDataModelFilterAdapter buildLigneOuverteAdapter(final GISDataModel _collection, + final GISAttributeInterface[] _att) { + boolean allLigneBrisee = true; + final GISVisitorChooser chooser = new GISVisitorChooser(); + final int nb = _collection.getNumGeometries(); + final BitSet set = new BitSet(nb); + for (int i = 0; i < nb; i++) { + ((GISGeometry) _collection.getGeometry(i)).accept(chooser); + if (chooser.isPolyligne()) { + set.set(i); + } else { + allLigneBrisee = false; + } + } + if (allLigneBrisee) { + return buildAdapter(_collection, _att, null); + } + return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); + } + + /** + * Cr\xE9ation d'un filtre ne conservant que les points et les d'attributs donn\xE9s. + */ + public static GISDataModelFilterAdapter buildPointAdapter(final GISDataModel _collection, + final GISAttributeInterface[] _att) { + boolean allPoint = true; + final GISVisitorChooser chooser = new GISVisitorChooser(); + final int nb = _collection.getNumGeometries(); + final BitSet set = new BitSet(nb); + for (int i = 0; i < nb; i++) { + ((GISGeometry) _collection.getGeometry(i)).accept(chooser); + if (chooser.isPt()) { + set.set(i); + } else { + allPoint = false; + } + } + if (allPoint) { + return buildAdapter(_collection, _att, null); + } + return buildAdapter(_collection, _att, CtuluLibArray.getSelectedIdx(set)); + } + + final int[] geometryShown_; + + /** + * @param _model + * @param _idxAtt + */ + public GISDataModelFilterAdapter(final GISDataModel _model, final int[] _idxAtt, final int[] _idxGeom) { + super(_idxAtt, _model); + + geometryShown_ = _idxGeom; + } + + private int getRealGeometryIndex(final int _init) { + return geometryShown_ == null ? _init : geometryShown_[_init]; + } + + // geom + + public double getDoubleValue(final int _idxAtt, final int _idxGeom) { + final int idx = getRealAttributIndex(_idxAtt); + if (idx < 0 || idx >= model_.getNbAttributes()) { + return 0; + } + return model_.getDoubleValue(idx, getRealGeometryIndex(_idxGeom)); + } + + public Geometry getGeometry(final int _idxGeom) { + return model_.getGeometry(getRealGeometryIndex(_idxGeom)); + } + + public int getNumGeometries() { + return geometryShown_ == null ? model_.getNumGeometries() : geometryShown_.length; + } + + public Object getValue(final int _idxAtt, final int _idxGeom) { + final int idx = getRealAttributIndex(_idxAtt); + if (idx < 0 || idx >= model_.getNbAttributes()) { + return null; + } + return model_.getValue(idx, getRealGeometryIndex(_idxGeom)); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-07-10 07:45:29
|
Revision: 3679 http://fudaa.svn.sourceforge.net/fudaa/?rev=3679&view=rev Author: bmarchan Date: 2008-07-10 00:45:36 -0700 (Thu, 10 Jul 2008) Log Message: ----------- Un peu de doc Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInterface.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeModel.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGuiBuilder.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInterface.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInterface.java 2008-07-10 07:42:43 UTC (rev 3678) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeInterface.java 2008-07-10 07:45:36 UTC (rev 3679) @@ -1,98 +1,108 @@ -/* - * @creation 7 avr. 2005 - * @modification $Date: 2008-02-06 18:04:21 $ - * @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 org.fudaa.ctulu.CtuluVariable; -import org.fudaa.ctulu.gui.CtuluValueEditorI; - -/** - * Une interface pour un attribut qui peut \xEAtre associ\xE9 aux objets GIS. Un attribut peut - * \xEAtre global \xE0 l'objet auquel il est associ\xE9, ou atomique.<p> - * - * Lorsqu'il est atomique, il est associ\xE9 \xE0 chaque sous partie d'un objet. Exemple : les - * points d'une ligne. - * - * @author Fred Deniger - * @version $Id: GISAttributeInterface.java,v 1.9.8.2 2008-02-06 18:04:21 bmarchan Exp $ - */ -public interface GISAttributeInterface extends CtuluVariable { - - boolean isEditable(); - - boolean isUserVisible(); - - boolean isSameContent(final GISAttributeInterface _att); - - - /** - * @param _nbValues - * @return un modele a utilise pour des donn\xE9es sur les vertex - */ - GISAttributeModelListener createAtomicModel(Object[] _initValues, int _nbValues); - - /** - * Permet de creer facilement les donn\xE9es correspondant a l'att. - * - * @param _initValues la ou les valeurs initiales, peut etre null. Si c'est un tableau et l'attribute est global, la - * moyenne sera prise. Inversement, l'objet sera duplique si un tableau doit etre construit. - * @param _nbPt le nombre de points pour l'objet geometriques correspondant - * @return l'objet correspondant. Si atomique, un {@link GISAttributeModelListener} est renvoy\xE9. Sinon, - * retourne un objet de classe {@link #getDataClass()} - */ - Object createDataForGeom(Object _initValues, int _nbPt); - - /** - * @param _defaultCap la capacit\xE9 par defaut: optimisation. - * @return le modele a utiliser pour une liste variable en taille. - */ - GISAttributeModelListener createListModel(int _defaultCap); - - /** - * @return la valeur par defaut - */ - Object getDefaultValue(); - - boolean setName(String _s); - - /** - * Retourne les donn\xE9es utilisateur, autres que les valeurs d'attributs. - * @return donnee utilisateur - */ - Object getUserData(); - - /** - * Affecte des donn\xE9es utilisateur, autres que les valeurs d'attributs. - * @param _userData donnee utilisateur - */ - void setUserData(Object _userData); - - /** - * Par exemple renvoie double. - * - * @return la classe primitive - */ - Class getDataClass(); - - /** - * @return l'\xE9diteur associe - */ - CtuluValueEditorI getEditor(); - - /** - * @return le nombre de chiffres apr\xE8s la virgule - */ - int getPrecision(); - - /** - * Retourne l'atomicit\xE9 de l'attribut (a utiliser pour les polygones,polylignes). - * - * @return si true, cet attribut signifie que les valeurs sont associees a chaque point - */ - boolean isAtomicValue(); - -} +/* + * @creation 7 avr. 2005 + * @modification $Date: 2008-02-06 18:04:21 $ + * @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 org.fudaa.ctulu.CtuluVariable; +import org.fudaa.ctulu.gui.CtuluValueEditorI; + +/** + * Une interface pour un attribut qui peut \xEAtre associ\xE9 aux objets GIS. Un attribut peut + * \xEAtre global \xE0 l'objet auquel il est associ\xE9, ou atomique.<p> + * + * Lorsqu'il est atomique, il est associ\xE9 \xE0 chaque sous partie d'un objet. Exemple : les + * points d'une ligne. + * + * @author Fred Deniger + * @version $Id: GISAttributeInterface.java,v 1.9.8.2 2008-02-06 18:04:21 bmarchan Exp $ + */ +public interface GISAttributeInterface extends CtuluVariable { + + /** + * D\xE9termine si l'attribut est \xE9ditable dans les \xE9diteurs.<p> + * FIXME BM: Actuellement, un attribut non \xE9ditable est invisible dans les \xE9diteurs. + * @return Si true : Editable + */ + boolean isEditable(); + + /** + * D\xE9termine si l'attribut est visible de l'utilisateur. Si c'est le cas, il est \xE9galement non \xE9ditable.<p> + * FIXME BM: Lorsque l'attribut est \xE9ditable et invisible, on peut tout de m\xEAme l'\xE9diter. + * @return Si true : Visible + */ + boolean isUserVisible(); + + boolean isSameContent(final GISAttributeInterface _att); + + + /** + * @param _nbValues + * @return un modele a utilise pour des donn\xE9es sur les vertex + */ + GISAttributeModelListener createAtomicModel(Object[] _initValues, int _nbValues); + + /** + * Permet de creer facilement les donn\xE9es correspondant a l'att. + * + * @param _initValues la ou les valeurs initiales, peut etre null. Si c'est un tableau et l'attribute est global, la + * moyenne sera prise. Inversement, l'objet sera duplique si un tableau doit etre construit. + * @param _nbPt le nombre de points pour l'objet geometriques correspondant + * @return l'objet correspondant. Si atomique, un {@link GISAttributeModelListener} est renvoy\xE9. Sinon, + * retourne un objet de classe {@link #getDataClass()} + */ + Object createDataForGeom(Object _initValues, int _nbPt); + + /** + * @param _defaultCap la capacit\xE9 par defaut: optimisation. + * @return le modele a utiliser pour une liste variable en taille. + */ + GISAttributeModelListener createListModel(int _defaultCap); + + /** + * @return la valeur par defaut + */ + Object getDefaultValue(); + + boolean setName(String _s); + + /** + * Retourne les donn\xE9es utilisateur, autres que les valeurs d'attributs. + * @return donnee utilisateur + */ + Object getUserData(); + + /** + * Affecte des donn\xE9es utilisateur, autres que les valeurs d'attributs. + * @param _userData donnee utilisateur + */ + void setUserData(Object _userData); + + /** + * Par exemple renvoie double. + * + * @return la classe primitive + */ + Class getDataClass(); + + /** + * @return l'\xE9diteur associe + */ + CtuluValueEditorI getEditor(); + + /** + * @return le nombre de chiffres apr\xE8s la virgule + */ + int getPrecision(); + + /** + * Retourne l'atomicit\xE9 de l'attribut (a utiliser pour les polygones,polylignes). + * + * @return si true, cet attribut signifie que les valeurs sont associees a chaque point + */ + boolean isAtomicValue(); + +} Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeModel.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeModel.java 2008-07-10 07:42:43 UTC (rev 3678) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeModel.java 2008-07-10 07:45:36 UTC (rev 3679) @@ -12,7 +12,7 @@ import org.fudaa.ctulu.collection.CtuluCollection; /** - * Un mod\xE8le associant une valeur \xE0 chaque objet d'une collection GIS {@link GISZoneCollection} pour + * Un mod\xE8le associant une valeur \xE0 chaque g\xE9ometrie d'une collection GIS {@link GISZoneCollection} pour * un attribut particulier.<p> * * Une collection GIS peut comporter plusieurs de ces mod\xE8les. Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java 2008-07-10 07:42:43 UTC (rev 3678) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModel.java 2008-07-10 07:45:36 UTC (rev 3679) @@ -1,84 +1,84 @@ -/* - * @creation 20 mai 2005 - * @modification $Date: 2006-12-05 10:12:51 $ - * @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 com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; - -import org.fudaa.ctulu.ProgressionInterface; - -/** - * Un mod\xE8le associant des valeurs d'attributs \xE0 un ensemble de g\xE9om\xE9tries. - * Dans ce mod\xE8le, les g\xE9om\xE9tries ont toutes le m\xEAme nombre d'attributs du m\xEAme type dans le m\xEAme ordre. - * Les g\xE9om\xE9tries peuvent \xEAtre ou non de m\xEAme type. - * - * @author Fred Deniger - * @version $Id: GISDataModel.java,v 1.6 2006-12-05 10:12:51 deniger Exp $ - */ -public interface GISDataModel { - - /** - * @return le nombre de geometries definies dans ce source - */ - int getNumGeometries(); - - /** - * Cette m\xE9thode est utile lorsqu'on charge des donn\xE9es issues de sig. - * Elle permet de charger en memoire les donn\xE9es des attributs <code>_att</code> - * - * @param _att les attributs a charger - */ - void preload(GISAttributeInterface[] _att, ProgressionInterface _prog); - - /** - * Permet de recuperer le polygone recouvrant si calcule (null sinon). - * - * @return le polygone recouvrant. Peut etre null si le calcul n'est pas immediat - */ - Envelope getEnvelopeInternal(); - - /** - * @return le nombre d'attributs definis. - */ - int getNbAttributes(); - - /** - * @param _idxGeom l'indice de la geometrie [0,getNbGeometries[ - * @return la geometrie _i - */ - Geometry getGeometry(int _idxGeom); - - /** - * @param _idxAtt l'indice de l'attribute [0,getNbAttributes[ - * @return la description de l'attribut _i - */ - GISAttributeInterface getAttribute(final int _idxAtt); - - /** - * @param _att l'attribut a tester - * @return l'indice de l'attribut. - */ - int getIndiceOf(GISAttributeInterface _att); - - /** - * @param _idxAtt l'indice de l'attribute - * @param _idxGeom l'indice de la geometrie - * @return la valeur demande ou null si mauvais indices - */ - Object getValue(final int _idxAtt, int _idxGeom); - - /** - * Dangereux: a utiliser que si on est sur que les valeurs sont des double. - * - * @param _idxAtt l'indice de l'attributs - * @param _idxGeom l'indice de la geom - * @return la valeur correspondante. - */ - double getDoubleValue(final int _idxAtt, int _idxGeom); - -} +/* + * @creation 20 mai 2005 + * @modification $Date: 2006-12-05 10:12:51 $ + * @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 com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; + +import org.fudaa.ctulu.ProgressionInterface; + +/** + * Un mod\xE8le associant des valeurs d'attributs \xE0 un ensemble de g\xE9om\xE9tries. + * Dans ce mod\xE8le, les g\xE9om\xE9tries ont toutes le m\xEAme nombre d'attributs du m\xEAme type dans le m\xEAme ordre. + * Les g\xE9om\xE9tries peuvent \xEAtre ou non de m\xEAme type. + * + * @author Fred Deniger + * @version $Id: GISDataModel.java,v 1.6 2006-12-05 10:12:51 deniger Exp $ + */ +public interface GISDataModel { + + /** + * @return le nombre de geometries definies dans ce source + */ + int getNumGeometries(); + + /** + * Cette m\xE9thode est utile lorsqu'on charge des donn\xE9es issues de sig. + * Elle permet de charger en memoire les donn\xE9es des attributs <code>_att</code> + * + * @param _att les attributs a charger + */ + void preload(GISAttributeInterface[] _att, ProgressionInterface _prog); + + /** + * Permet de recuperer le polygone recouvrant si calcule (null sinon). + * + * @return le polygone recouvrant. Peut etre null si le calcul n'est pas immediat + */ + Envelope getEnvelopeInternal(); + + /** + * @return le nombre d'attributs definis. + */ + int getNbAttributes(); + + /** + * @param _idxGeom l'indice de la geometrie [0,getNbGeometries[ + * @return la geometrie _i + */ + Geometry getGeometry(int _idxGeom); + + /** + * @param _idxAtt l'indice de l'attribute [0,getNbAttributes[ + * @return l'attribut ou <code>null</code> si non trouv\xE9. + */ + GISAttributeInterface getAttribute(final int _idxAtt); + + /** + * @param _att l'attribut a tester + * @return l'indice de l'attribut. -1 si l'attribut est introuvable. + */ + int getIndiceOf(GISAttributeInterface _att); + + /** + * @param _idxAtt l'indice de l'attribute + * @param _idxGeom l'indice de la geometrie + * @return la valeur demande ou null si mauvais indices + */ + Object getValue(final int _idxAtt, int _idxGeom); + + /** + * Dangereux: a utiliser que si on est sur que les valeurs sont des double. + * + * @param _idxAtt l'indice de l'attributs + * @param _idxGeom l'indice de la geom + * @return la valeur correspondante. + */ + double getDoubleValue(final int _idxAtt, int _idxGeom); + +} Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGuiBuilder.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGuiBuilder.java 2008-07-10 07:42:43 UTC (rev 3678) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGuiBuilder.java 2008-07-10 07:45:36 UTC (rev 3679) @@ -17,12 +17,20 @@ import org.fudaa.ctulu.gui.CtuluValuesEditorPanel; /** + * Un builder de panneau d'\xE9ditions d'objets GIS. * @author fred deniger * @version $Id: GISGuiBuilder.java,v 1.5 2007-01-10 08:58:47 deniger Exp $ */ public final class GISGuiBuilder { private GISGuiBuilder() {} + /** + * Construction d'un panneau d'\xE9dition de plusieurs points d'une m\xEAme collection. + * @param _pt La collection de points + * @param _idx Les index des points de la collection concern\xE9s. + * @param _cmd Le manager de commandes. + * @return Un panneau d'\xE9dition. + */ public static CtuluValuesEditorPanel buildFor(final GISZoneCollectionPoint _pt, final int[] _idx, final CtuluCommandContainer _cmd) { final List names = new ArrayList(_pt.getNbAttributes() + 2); final List editor = new ArrayList(names.size()); @@ -34,6 +42,7 @@ model.add(_pt.createEditForX()); model.add(_pt.createEditForY()); for (int i = 0; i < _pt.getNbAttributes(); i++) { + // FIXME BM: G\xE9rer attribut non visible. if (_pt.getAttribute(i).isEditable()) { names.add(_pt.getAttribute(i).getName()); editor.add(_pt.getAttribute(i).getEditor()); @@ -45,6 +54,13 @@ .toArray(new CtuluCollection[model.size()]), _cmd); } + /** + * Construction d'un panneau d'\xE9dition de plusieurs g\xE9om\xE9tries d'une m\xEAme collection. + * @param _pt La collection + * @param _idx Les index des g\xE9om\xE9tries de la collection concern\xE9s. + * @param _cmd Le manager de commandes. + * @return Un panneau d'\xE9dition. + */ public static CtuluValuesEditorPanel buildForGlobAtt(final GISZoneCollection _pt, final int[] _idx, final CtuluCommandContainer _cmd) { final int nbAtt = _pt.getNbAttributes(); final List names = new ArrayList(nbAtt); @@ -52,6 +68,7 @@ final List model = new ArrayList(nbAtt); for (int i = 0; i < nbAtt; i++) { final GISAttributeInterface att = _pt.getAttribute(i); + // FIXME BM: G\xE9rer attribut non visible. if (!att.isAtomicValue() && att.isEditable()) { names.add(att.getName()); editor.add(att.getEditor()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-07-10 07:45:53
|
Revision: 3680 http://fudaa.svn.sourceforge.net/fudaa/?rev=3680&view=rev Author: bmarchan Date: 2008-07-10 00:45:55 -0700 (Thu, 10 Jul 2008) Log Message: ----------- Mise en place des attributs ?\195?\160 valeurs fixe. Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneAttributeFactory.java 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/GISZoneCollectionLigneBrisee.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneAttributeFactory.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneAttributeFactory.java 2008-07-10 07:45:36 UTC (rev 3679) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneAttributeFactory.java 2008-07-10 07:45:55 UTC (rev 3680) @@ -1,255 +1,245 @@ -/* - * @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.Arrays; - -import com.sun.j3d.loaders.vrml97.impl.Coordinate; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.LineString; - -/** - * @author Fred Deniger - * @version $Id: GISZoneAttributeFactory.java,v 1.10.6.1 2008-03-26 16:46:43 bmarchan Exp $ - */ -public final class GISZoneAttributeFactory { - - private GISZoneAttributeFactory() { - super(); - } - - /** - * @param _att l'attribut - * @param _src la liste des points source - * @param _target la liste des points cible - * @param _model le model initial - * @return l'interpolateur 1d - */ - public static GISReprojectInterpolateurI create1DInterpolateur(final GISAttributeInterface _att, - final LineString _src, final LineString _target, final GISAttributeModel _model) { - final Class clazz = _att.getDataClass(); - if (clazz == Integer.class) { - return new GISReprojectInterpolateur1DInteger(_src.getCoordinateSequence(), _target.getCoordinateSequence(), - (GISAttributeModelIntegerInterface) _model); - } else if (clazz == Double.class) { - return new GISReprojectInterpolateur1DDouble(_src.getCoordinateSequence(), _target.getCoordinateSequence(), - (GISAttributeModelDoubleInterface) _model); - } else if (clazz == Boolean.class) { - return new GISReprojectInterpolateur1DBoolean(_src.getCoordinateSequence(), _target.getCoordinateSequence(), - (GISAttributeModelBooleanInterface) _model); - } else { - return new GISReprojectInterpolateur1DObject(_src.getCoordinateSequence(), _target.getCoordinateSequence(), - (GISAttributeModelObjectInterface) _model); - } - - } - - /** - * @param _att l'attribut - * @param _src la liste des points source - * @param _target la liste des points cible - * @param _model le model initial - * @return l'interpolateur 1d - */ - public static GISReprojectInterpolateurI create1DInterpolateur(final GISAttributeInterface _att, - final Geometry _src, final Geometry _target, final GISAttributeModel _model) { - final Class clazz = _att.getDataClass(); - if (clazz == Integer.class) { - return new GISReprojectInterpolateur1DInteger( - new GISCoordinateSequence(_src.getCoordinates()), - new GISCoordinateSequence(_target.getCoordinates()), - (GISAttributeModelIntegerInterface) _model); - } else if (clazz == Double.class) { - return new GISReprojectInterpolateur1DDouble( - new GISCoordinateSequence(_src.getCoordinates()), - new GISCoordinateSequence(_target.getCoordinates()), - (GISAttributeModelDoubleInterface) _model); - } else if (clazz == Boolean.class) { - return new GISReprojectInterpolateur1DBoolean( - new GISCoordinateSequence(_src.getCoordinates()), - new GISCoordinateSequence(_target.getCoordinates()), - (GISAttributeModelBooleanInterface) _model); - } else { - return new GISReprojectInterpolateur1DObject( - new GISCoordinateSequence(_src.getCoordinates()), - new GISCoordinateSequence(_target.getCoordinates()), - (GISAttributeModelObjectInterface) _model); - } - - } - - /** - * @param _capacity la capacity par defaut du model - * @param _listener le listener - * @return le model. null si class non valide - */ - public static GISAttributeModel createModelList(final GISAttributeInterface _att, final int _capacity, - final GISAttributeListener _listener) { - final GISAttributeModelListener resfinal = _att.createListModel(_capacity); - resfinal.setListener(_listener); - return resfinal; - } - - public static GISAttributeModel createModelList(final GISAttributeInterface _att, final int _capacity, - final GISAttributeListener _listener, final int _initValuesNb) { - final GISAttributeModelListener resfinal = _att.createListModel(_capacity); - if (_initValuesNb > 0) { - final Object[] add = new Object[_initValuesNb]; - Arrays.fill(add, _att.getDefaultValue()); - resfinal.addAllObject(add, null); - } - resfinal.setListener(_listener); - return resfinal; - } - - /** - * @param _initSize la taille - * @param _listener le listener - * @return le model. null si class non valide - */ - public static GISAttributeModel createModelArray(final GISAttributeInterface _att, final int _initSize, - final GISAttributeListener _listener) { - final GISAttributeModelListener resfinal = _att.createAtomicModel(null, _initSize); - resfinal.setListener(_listener); - return resfinal; - } - - public static Object[] createObjectArray(final GISAttributeInterface _att, final Object[] _init, final int _nbPt) { - if (_init == null) { - return null; - } - final Class clazz = _att.getDataClass(); - if (clazz == Integer.class) { - final Integer[] r = new Integer[_nbPt]; - Arrays.fill(r, _att.getDefaultValue()); - - for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { - final Object o = _init[i]; - r[i] = (Integer) _att.getDefaultValue(); - if (o != null && o instanceof Integer) { - r[i] = (Integer) o; - } - } - return r; - } else if (clazz == Double.class) { - final Double[] r = new Double[_nbPt]; - Arrays.fill(r, _att.getDefaultValue()); - for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { - final Object o = _init[i]; - r[i] = (Double) _att.getDefaultValue(); - if (o != null && o instanceof Double) { - r[i] = (Double) o; - } - } - return r; - } else if (clazz == Boolean.class) { - final Boolean[] r = new Boolean[_nbPt]; - Arrays.fill(r, _att.getDefaultValue()); - for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { - final Object o = _init[i]; - r[i] = (Boolean) _att.getDefaultValue(); - if (o != null && o instanceof Boolean) { - r[i] = (Boolean) o; - } - } - return r; - } else { - final Object[] r = new Object[_nbPt]; - Arrays.fill(r, _att.getDefaultValue()); - for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { - final Object o = _init[i]; - r[i] = _att.getDefaultValue(); - if (o != null) { - r[i] = o; - } - } - return r; - } - } - - /** - * @param _att l'attribut - * @param _initValues les valeurs initiales - * @param _listener le listener - * @return le model. null si class non valide - */ - public static GISAttributeModel createModelArray(final GISAttributeInterface _att, final Object[] _initValues, - final GISAttributeListener _listener) { - GISAttributeModelListener resfinal = null; - final Class clazz = _att.getDataClass(); - if (clazz == Integer.class) { - resfinal = new GISAttributeModelIntegerArray(_initValues, _att); - } else if (clazz == Double.class) { - resfinal = new GISAttributeModelDoubleArray(_initValues, _att); - } else if (clazz == Boolean.class) { - resfinal = new GISAttributeModelBooleanArray(_initValues, _att); - } else { - resfinal = new GISAttributeModelObjectArray(_initValues, _att); - } - resfinal.setListener(_listener); - return resfinal; - } - - /** - * @param _listener le listener - * @param _attr les attributs - * @return une zone correctement initialis\xE9e - */ - public static GISZoneCollectionLigneBrisee createPolyligne(final GISZoneListener _listener, - final GISAttributeInterface[] _attr) { - final GISZoneCollectionLigneBrisee zone = new GISZoneCollectionLigneBrisee(_listener); - zone.initAttributes(_attr); - return zone; - - } - - /** - * @param _listener le listener - * @param _attr les attributs - * @return une zone correctement initialis\xE9e - */ - public static GISZoneCollectionPoint createPoint(final GISZoneListener _listener, final GISAttributeInterface[] _attr) { - final GISZoneCollectionPoint zone = new GISZoneCollectionPoint(_listener); - zone.initAttributes(_attr); - return zone; - - } - - /** - * @param _listener le listener - * @param _attr les attributs - * @return une zone correctement initialis\xE9e - */ - public static GISZoneCollectionLigneBrisee createLigneBrisee(final GISZoneListener _listener, - final GISAttributeInterface[] _attr) { - final GISZoneCollectionLigneBrisee zone = new GISZoneCollectionLigneBrisee(_listener); - zone.initAttributes(_attr); - return zone; - - } - - /** - * @param _zone la zone concern\xE9e - * @param _att l'attribut - * @return le model ou nul si inconnu - */ - public static GISAttributeModel createModel(final GISZoneCollection _zone, final GISAttributeInterface _att) { - final int nbGeom = _zone.getNumGeometries(); - if (_att == null) return null; - if (!_att.isAtomicValue() || (_zone instanceof GISZoneCollectionPoint)) { - return createModelList(_att, (int) (nbGeom * 1.5), _zone, nbGeom); - } - final GISAttributeModel[] models = new GISAttributeModel[nbGeom]; - for (int i = 0; i < nbGeom; i++) { - models[i] = createModelArray(_att, _zone.getGeometry(i).getNumPoints(), _zone); - } - final GISAttributeModelObjectList r = new GISAttributeModelObjectList(Arrays.asList(models), _att); - r.setListener(_zone); - return r; - } -} +/* + * @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.Arrays; + +import com.sun.j3d.loaders.vrml97.impl.Coordinate; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LineString; + +/** + * @author Fred Deniger + * @version $Id: GISZoneAttributeFactory.java,v 1.10.6.1 2008-03-26 16:46:43 bmarchan Exp $ + */ +public final class GISZoneAttributeFactory { + + private GISZoneAttributeFactory() { + super(); + } + + /** + * @param _att l'attribut + * @param _src la liste des points source + * @param _target la liste des points cible + * @param _model le model initial + * @return l'interpolateur 1d + */ + public static GISReprojectInterpolateurI create1DInterpolateur(final GISAttributeInterface _att, + final LineString _src, final LineString _target, final GISAttributeModel _model) { + final Class clazz = _att.getDataClass(); + if (clazz == Integer.class) { + return new GISReprojectInterpolateur1DInteger(_src.getCoordinateSequence(), _target.getCoordinateSequence(), + (GISAttributeModelIntegerInterface) _model); + } else if (clazz == Double.class) { + return new GISReprojectInterpolateur1DDouble(_src.getCoordinateSequence(), _target.getCoordinateSequence(), + (GISAttributeModelDoubleInterface) _model); + } else if (clazz == Boolean.class) { + return new GISReprojectInterpolateur1DBoolean(_src.getCoordinateSequence(), _target.getCoordinateSequence(), + (GISAttributeModelBooleanInterface) _model); + } else { + return new GISReprojectInterpolateur1DObject(_src.getCoordinateSequence(), _target.getCoordinateSequence(), + (GISAttributeModelObjectInterface) _model); + } + + } + + /** + * @param _att l'attribut + * @param _src la liste des points source + * @param _target la liste des points cible + * @param _model le model initial + * @return l'interpolateur 1d + */ + public static GISReprojectInterpolateurI create1DInterpolateur(final GISAttributeInterface _att, + final Geometry _src, final Geometry _target, final GISAttributeModel _model) { + final Class clazz = _att.getDataClass(); + if (clazz == Integer.class) { + return new GISReprojectInterpolateur1DInteger( + new GISCoordinateSequence(_src.getCoordinates()), + new GISCoordinateSequence(_target.getCoordinates()), + (GISAttributeModelIntegerInterface) _model); + } else if (clazz == Double.class) { + return new GISReprojectInterpolateur1DDouble( + new GISCoordinateSequence(_src.getCoordinates()), + new GISCoordinateSequence(_target.getCoordinates()), + (GISAttributeModelDoubleInterface) _model); + } else if (clazz == Boolean.class) { + return new GISReprojectInterpolateur1DBoolean( + new GISCoordinateSequence(_src.getCoordinates()), + new GISCoordinateSequence(_target.getCoordinates()), + (GISAttributeModelBooleanInterface) _model); + } else { + return new GISReprojectInterpolateur1DObject( + new GISCoordinateSequence(_src.getCoordinates()), + new GISCoordinateSequence(_target.getCoordinates()), + (GISAttributeModelObjectInterface) _model); + } + + } + + public static GISAttributeModel createModelList(final GISAttributeInterface _att, final Object _valatt, final int _capacity, + final GISAttributeListener _listener, final int _initValuesNb) { + final GISAttributeModelListener resfinal = _att.createListModel(_capacity); + if (_initValuesNb > 0) { + final Object[] add = new Object[_initValuesNb]; + Arrays.fill(add, _valatt); + resfinal.addAllObject(add, null); + } + resfinal.setListener(_listener); + return resfinal; + } + + /** + * @param _initSize la taille + * @param _listener le listener + * @return le model. null si class non valide + */ + public static GISAttributeModel createModelArray(final GISAttributeInterface _att, final Object _valatt, final int _initSize, + final GISAttributeListener _listener) { + final GISAttributeModelListener resfinal = (GISAttributeModelListener)_att.createDataForGeom(_valatt, _initSize); + resfinal.setListener(_listener); + return resfinal; + } + + public static Object[] createObjectArray(final GISAttributeInterface _att, final Object[] _init, final int _nbPt) { + if (_init == null) { + return null; + } + final Class clazz = _att.getDataClass(); + if (clazz == Integer.class) { + final Integer[] r = new Integer[_nbPt]; + Arrays.fill(r, _att.getDefaultValue()); + + for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { + final Object o = _init[i]; + r[i] = (Integer) _att.getDefaultValue(); + if (o != null && o instanceof Integer) { + r[i] = (Integer) o; + } + } + return r; + } else if (clazz == Double.class) { + final Double[] r = new Double[_nbPt]; + Arrays.fill(r, _att.getDefaultValue()); + for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { + final Object o = _init[i]; + r[i] = (Double) _att.getDefaultValue(); + if (o != null && o instanceof Double) { + r[i] = (Double) o; + } + } + return r; + } else if (clazz == Boolean.class) { + final Boolean[] r = new Boolean[_nbPt]; + Arrays.fill(r, _att.getDefaultValue()); + for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { + final Object o = _init[i]; + r[i] = (Boolean) _att.getDefaultValue(); + if (o != null && o instanceof Boolean) { + r[i] = (Boolean) o; + } + } + return r; + } else { + final Object[] r = new Object[_nbPt]; + Arrays.fill(r, _att.getDefaultValue()); + for (int i = Math.min(r.length, _init.length) - 1; i >= 0; i--) { + final Object o = _init[i]; + r[i] = _att.getDefaultValue(); + if (o != null) { + r[i] = o; + } + } + return r; + } + } + + /** + * @param _att l'attribut + * @param _initValues les valeurs initiales + * @param _listener le listener + * @return le model. null si class non valide + */ + public static GISAttributeModel createModelArray(final GISAttributeInterface _att, final Object[] _initValues, + final GISAttributeListener _listener) { + GISAttributeModelListener resfinal = null; + final Class clazz = _att.getDataClass(); + if (clazz == Integer.class) { + resfinal = new GISAttributeModelIntegerArray(_initValues, _att); + } else if (clazz == Double.class) { + resfinal = new GISAttributeModelDoubleArray(_initValues, _att); + } else if (clazz == Boolean.class) { + resfinal = new GISAttributeModelBooleanArray(_initValues, _att); + } else { + resfinal = new GISAttributeModelObjectArray(_initValues, _att); + } + resfinal.setListener(_listener); + return resfinal; + } + + /** + * @param _listener le listener + * @param _attr les attributs + * @return une zone correctement initialis\xE9e + */ + public static GISZoneCollectionLigneBrisee createPolyligne(final GISZoneListener _listener, + final GISAttributeInterface[] _attr) { + final GISZoneCollectionLigneBrisee zone = new GISZoneCollectionLigneBrisee(_listener); + zone.initAttributes(_attr); + return zone; + + } + + /** + * @param _listener le listener + * @param _attr les attributs + * @return une zone correctement initialis\xE9e + */ + public static GISZoneCollectionPoint createPoint(final GISZoneListener _listener, final GISAttributeInterface[] _attr) { + final GISZoneCollectionPoint zone = new GISZoneCollectionPoint(_listener); + zone.initAttributes(_attr); + return zone; + + } + + /** + * @param _listener le listener + * @param _attr les attributs + * @return une zone correctement initialis\xE9e + */ + public static GISZoneCollectionLigneBrisee createLigneBrisee(final GISZoneListener _listener, + final GISAttributeInterface[] _attr) { + final GISZoneCollectionLigneBrisee zone = new GISZoneCollectionLigneBrisee(_listener); + zone.initAttributes(_attr); + return zone; + + } + + /** + * @param _zone la zone concern\xE9e + * @param _att l'attribut + * @return le model ou nul si inconnu + */ + public static GISAttributeModel createModel(final GISZoneCollection _zone, final GISAttributeInterface _att) { + final int nbGeom = _zone.getNumGeometries(); + if (_att == null) return null; + Object valatt=_zone.fixedAttributes_.get(_att); + if (valatt==null) valatt=_att.getDefaultValue(); + if (!_att.isAtomicValue() || (_zone instanceof GISZoneCollectionPoint)) { + return createModelList(_att, valatt, (int) (nbGeom * 1.5), _zone, nbGeom); + } + final GISAttributeModel[] models = new GISAttributeModel[nbGeom]; + for (int i = 0; i < nbGeom; i++) { + models[i] = createModelArray(_att, valatt, _zone.getGeometry(i).getNumPoints(), _zone); + } + final GISAttributeModelObjectList r = new GISAttributeModelObjectList(Arrays.asList(models), _att); + r.setListener(_zone); + return r; + } +} 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-07-10 07:45:36 UTC (rev 3679) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollection.java 2008-07-10 07:45:55 UTC (rev 3680) @@ -22,6 +22,7 @@ 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 @@ -37,6 +38,8 @@ /** 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_ = GISAttributeConstants.BATHY; // Devrait \xEAtre null par defaut. @@ -199,15 +202,17 @@ } final int nbAttribute = getNbAttributes(); final List data = new ArrayList(nbAttribute); - for (int i = 0; i < nbAttribute; i++) { - final GISAttributeInterface gi = getAttribute(i); + for (int iatt = 0; iatt < nbAttribute; iatt++) { + final GISAttributeInterface gi = getAttribute(iatt); final Object[] os = new Object[nbGeom]; - for (int j = 0; j < nbGeom; j++) { - os[j] = gi.createDataForGeom(_model.getValue(i, j), pt[j].getNumPoints()); + 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) { @@ -217,6 +222,32 @@ 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); public abstract void addGeometry(Geometry _seq, Object[] _datas, CtuluCommandContainer _cmd); @@ -403,6 +434,22 @@ } /** + * 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. 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-07-10 07:45:36 UTC (rev 3679) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionLigneBrisee.java 2008-07-10 07:45:55 UTC (rev 3680) @@ -1,515 +1,507 @@ -/* - * @creation 21 mars 2005 - * @modification $Date: 2008-04-01 07:22:47 $ - * @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 gnu.trove.TIntArrayList; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.CoordinateSequence; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.LineString; - -import com.memoire.fu.FuLog; - -import org.fudaa.ctulu.CtuluCommandComposite; -import org.fudaa.ctulu.CtuluCommandContainer; -import org.fudaa.ctulu.CtuluLib; -import org.fudaa.ctulu.CtuluLibArray; -import org.fudaa.ctulu.CtuluLibString; -import org.fudaa.ctulu.CtuluListSelectionInterface; -import org.fudaa.ctulu.CtuluUI; -import org.fudaa.ctulu.collection.CtuluCollectionDouble; - -/** - * @author Fred Deniger - * @version $Id: GISZoneCollectionLigneBrisee.java,v 1.20.6.4 2008-04-01 07:22:47 bmarchan Exp $ - */ -public class GISZoneCollectionLigneBrisee extends GISZoneCollection { - - public GISZoneCollectionLigneBrisee() { - this(null); - } - - /** - * @param _listener le listener - */ - public GISZoneCollectionLigneBrisee(final GISZoneListener _listener) { - this(10, _listener); - } - - /** - * @param _listener le listener - */ - public GISZoneCollectionLigneBrisee(final GISZoneListener _listener, final GISZoneCollectionLigneBrisee _br) { - this(10, _listener); - if (_br != null) { - for (int i = 0; i < _br.getNumGeometries(); i++) { - super.geometry_.add(_br.getGeometry(i), null, null); - } - } - } - - public GISZoneCollectionLigneBrisee(final int _nbObject, final GISZoneListener _listener) { - super(_nbObject); - listener_ = _listener; - } - - private List createListForSeveralAdd(final Object[][] _att, final int _nbGeom) { - final int nbAttributes = getNbAttributes(); - final List attListe = new ArrayList(nbAttributes); - for (int i = 0; i < nbAttributes; i++) { - final Object[] oi = new Object[_nbGeom]; - for (int j = 0; j < _nbGeom; j++) { - oi[j] = _att[j][i]; - } - attListe.add(oi); - } - return attListe; - } - - /** - * @param _idx l'indice de la ligne a changer - * @param _newLine la nouvelle ligne - * @param _cmd le receveur de commande - */ - private void setValueIntern(final int _idx, final LineString _newLine, final CtuluCommandContainer _cmd) { - if (!isGeomModifiable_) { - return; - } - final LineString old = (LineString) super.geometry_.getValueAt(_idx); - if (old.getNumPoints() == _newLine.getNumPoints() || !containsAtomicAttribute()) { - super.geometry_.setObject(_idx, _newLine, _cmd); - } else { - final CtuluCommandComposite cmp = new CtuluCommandComposite(); - for (int i = getNbAttributes() - 1; i >= 0; i--) { - final GISAttributeInterface att = getAttribute(i); - if (att.isAtomicValue()) { - final GISAttributeModel m = (GISAttributeModel) (getModelListener(i).getObjectValueAt(_idx)); - final GISReprojectInterpolateurI interpolateur = GISZoneAttributeFactory.create1DInterpolateur(att, old, - _newLine, m); - getModelListener(i).setObject(_idx, m.deriveNewModel(_newLine.getNumPoints(), interpolateur), cmp); - } - } - super.geometry_.setObject(_idx, _newLine, cmp); - if (_cmd != null) { - _cmd.addCmd(cmp.getSimplify()); - } - } - } - - /** - * Cr\xE9e un tableau de valeurs d'attributs.<p> - * - * Les valeurs peuvent \xEAtre globales ou atomiques. - * - * @param _init Les valeurs d'initialisation, dans l'ordre et au nombre des mod\xE8les d'attributs. - * Si null, les valeurs par d\xE9faut sont affect\xE9es (voir {@link GISAttributeInterface#getDefaultValue()}) - * @param _dest La g\xE9ometrie polyligne ou polygone. - * @param _isClosed Param\xE8tre inutilis\xE9. - * @return - */ - protected Object[] createAttributeList(final Object[] _init, final Geometry _dest, final boolean _isClosed) { - final Object[] rf = new Object[getNbAttributes()]; - final int nbPt = _dest.getNumPoints(); - if (_init != null && _init.length != getNbAttributes()) { - throw new IllegalArgumentException("bad size"); - } - for (int i = getNbAttributes() - 1; i >= 0; i--) { - rf[i] = getDataModel(i).getAttribute().createDataForGeom(_init != null ? _init[i] : null, nbPt); - if (attributeIsZ_ != null && attributeIsZ_.isAtomicValue() && (_init == null || _init[i] == null) - && getDataModel(i).getAttribute() == attributeIsZ_) { - final GISAttributeModelDoubleArray array = (GISAttributeModelDoubleArray) rf[i]; - for (int k = nbPt - 1; k >= 0; k--) { - array.set(k, _dest.getCoordinates()[k].z); - } - } - } - return rf; - } - - public boolean accept(final GISVisitor _v) { - final int nb = getNumGeometries(); - for (int i = 0; i < nb; i++) { - if (!((GISLigneBrisee) getGeometry(i)).accept(_v)) { - return false; - } - } - return true; - } - - public void addAllLineStringClosedOrNode(final LineString[] _gs, final CtuluCommandContainer _cmd) { - if (isGeomModifiable_) { - - final Object[][] att = new Object[_gs.length][]; - for (int i = 0; i < _gs.length; i++) { - att[i] = createAttributeList(null, _gs[i], _gs[i].isClosed()); - } - - geometry_.addAll(_gs, createListForSeveralAdd(att, _gs.length), _cmd); - } - } - - public void addAllPolygones(final GISPolygone[] _gs, final CtuluCommandContainer _cmd) { - if (isGeomModifiable_) { - final Object[][] att = new Object[_gs.length][]; - for (int i = 0; i < _gs.length; i++) { - att[i] = createAttributeList(null, _gs[i], true); - } - geometry_.addAll(_gs, createListForSeveralAdd(att, _gs.length), _cmd); - } - } - - public void addAllPolylignes(final GISPolyligne[] _gs, final CtuluCommandContainer _cmd) { - if (isGeomModifiable_) { - final Object[][] att = new Object[_gs.length][]; - for (int i = 0; i < _gs.length; i++) { - att[i] = createAttributeList(null, _gs[i], false); - } - geometry_.addAll(_gs, createListForSeveralAdd(att, _gs.length), _cmd); - } - } - - public void addCoordinateSequence(final CoordinateSequence _seq, final Object[] _data, - final CtuluCommandContainer _cmd) { - if (_seq == null || _seq.size() < 2) { - return; - } - if (_seq.size() > 3 && _seq.getCoordinate(0).equals2D(_seq.getCoordinate(_seq.size() - 1))) { - addPolygone(_seq, _data, _cmd); - } else { - addPolyligne(_seq, _data, _cmd); - } - } - - public void addGeometry(final Geometry _seq, final Object[] _data, final CtuluCommandContainer _cmd) { - final LineString s = (LineString) _seq; - if (s.isClosed()) { - addPolygone(s.getCoordinateSequence(), _data, _cmd); - } else { - addPolyligne(s.getCoordinateSequence(), _data, _cmd); - } - } - - /** - * @todo Les poly de niveau sont mal trait\xE9es - */ - public void addPoint(final int _ligneIdx, final int _idxBefore, final double _x, final double _y, - final CtuluCommandContainer _cmd) { - if (!isGeomModifiable_) { - return; - } - LineString str = (LineString) super.geometry_.getValueAt(_ligneIdx); - final CoordinateSequence newSeq = str.getCoordinateSequence(); - final int initSize = newSeq.size(); - final Coordinate[] cs = new Coordinate[initSize + 1]; - int idx = 0; - for (int i = 0; i < initSize; i++) { - cs[idx++] = newSeq.getCoordinateCopy(i); - if (i == _idxBefore) { - cs[idx++] = new Coordinate(_x, _y, newSeq.getOrdinate(i, 2)); - } - } - - if (str/*.isClosed()*/ instanceof GISPolygone) { - str = GISGeometryFactory.INSTANCE.createLinearRing(cs); - setValue(_ligneIdx, (GISPolygone) str, _cmd); - } - else if (str instanceof GISPolyligne) { - str = GISGeometryFactory.INSTANCE.createLineString(cs); - setValue(_ligneIdx, (GISPolyligne) str, _cmd); - } - } - - public void addPolygone(final CoordinateSequence _g, final CtuluCommandContainer _cmd) { - addPolygone((GISPolygone) GISGeometryFactory.INSTANCE.createLinearRing(_g), _cmd); - } - - public void addPolygone(final CoordinateSequence _g, final Object[] _data, final CtuluCommandContainer _cmd) { - addPolygone((GISPolygone) GISGeometryFactory.INSTANCE.createLinearRing(_g), _data, _cmd); - } - - public void addPolygone(final GISPolygone _g, final CtuluCommandContainer _cmd) { - addPolygone(_g, null, _cmd); - } - - public void addPolygone(final GISPolygone _g, final Object[] _data, final CtuluCommandContainer _cmd) { - if (isGeomModifiable_) { - super.geometry_.add(_g, Arrays.asList(createAttributeList(_data, _g, true)), _cmd); - } - } - - public void addPolygoneNiveau(final CoordinateSequence _g, final CtuluCommandContainer _cmd) { - addPolygone((GISPolygone) GISGeometryFactory.INSTANCE.createLinearRingNiveau(_g), _cmd); - } - - /** - * Ajoute une polyligne sous forme d'une liste de coordonn\xE9es, avec attributs et gestionnaire de commandes. - * @param _g La liste de coordonn\xE9es, renseign\xE9e en Z. - * @param _data Les attributs, dans l'ordre dans lequel ils sont d\xE9finis dans la collection. - * @param _cmd Le gestionnaire de commandes. Peut \xEAtre null. - */ - public void addPolyligne(final CoordinateSequence _g, final Object[] _data, final CtuluCommandContainer _cmd) { - addPolyligne((GISPolyligne) GISGeometryFactory.INSTANCE.createLineString(_g), _data, _cmd); - } - - public void addPolyligne(final GISCoordinateSequence _g, final CtuluCommandContainer _cmd) { - addPolyligne((GISPolyligne) GISGeometryFactory.INSTANCE.createLineString(_g), _cmd); - } - - public void addPolyligne(final GISPolyligne _g, final CtuluCommandContainer _cmd) { - addPolyligne(_g, null, _cmd); - } - - /** - * Ajoute une polyligne, avec attributs et gestionnaire de commandes. - * @param _g La polyligne, renseign\xE9e en Z. - * @param _data Les attributs, dans l'ordre dans lequel ils sont d\xE9finis dans la collection. - * @param _cmd Le gestionnaire de commandes. Peut \xEAtre null. - */ - public void addPolyligne(final GISPolyligne _g, final Object[] _data, final CtuluCommandContainer _cmd) { - if (isGeomModifiable_) { - super.geometry_.add(_g, Arrays.asList(createAttributeList(_data, _g, false)), _cmd); - } - } - - public void addPolyligneNiveau(final GISCoordinateSequence _g, final CtuluCommandContainer _cmd) { - addPolyligne((GISPolyligne) GISGeometryFactory.INSTANCE.createLineStringNiveau(_g), _cmd); - } - - public boolean containsAtomicAttribute() { - for (int i = getNbAttributes() - 1; i >= 0; i--) { - if (getAttribute(i).isAtomicValue()) { - return true; - } - } - return false; - } - - /** - * @return true si contient au moins un polygone (ligne brisee fermee). - */ - public boolean containsPolygone() { - final GISVisitorChooser chooser = new GISVisitorChooser(); - for (int i = getNumGeometries() - 1; i >= 0; i--) { - ((GISGeometry) getGeometry(i)).accept(chooser); - if (chooser.isPolygone()) { - return true; - } - } - return false; - } - - /** - * @return true si contient au moins un polygone (ligne brisee fermee). - */ - public boolean containsPolyligne() { - final GISVisitorChooser chooser = new GISVisitorChooser(); - for (int i = getNumGeometries() - 1; i >= 0; i--) { - ((GISGeometry) getGeometry(i)).accept(chooser); - if (chooser.isPolyligne()) { - return true; - } - } - return false; - } - - public CoordinateSequence getCoordinateSequence(final int _i) { - return ((LineString) getGeometry(_i)).getCoordinateSequence(); - } - - public Class getDataStoreClass() { - return LineString.class; - } - - public double getDoubleValue(final int _idxAtt, final int _idxGeom) { - if (getAttribute(_idxAtt).isAtomicValue()) { - return CtuluLibArray.getMoyenne(((CtuluCollectionDouble) getModel(_idxAtt).getObjectValueAt(_idxGeom)).getValues()); - } - 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()) { - return false; - } - boolean r = true; - final LineString line = (LineString) getGeometry(_idxGeom); - int nbPt = line.getCoordinateSequence().size(); - // les nouvelles coordonnees. - final Coordinate[] newCs = new Coordinate[nbPt]; - // cette liste contient les indice a enlever : creee que si necessaire - // si des attribute atomics existent - final TIntArrayList idxToRemove = containsAtomicAttribute() ? new TIntArrayList(nbPt) : null; - // dans le cas polygone le dernier point n'est pas a considerer=premier point - if (line/*.isClosed()*/ instanceof GISPolygone) { - nbPt--; - } - - // compteur tempo - int count = 0; - for (int idxPt = 0; idxPt < nbPt; idxPt++) { - if (_sel.isSelected(idxPt)) { - if (idxToRemove != null) { - idxToRemove.add(idxPt); - } - } else { - newCs[count++] = line.getCoordinateSequence().getCoordinateCopy(idxPt); - } - } - LineString newString = null; - - // Un polygone - if (line/*.isClosed()*/ instanceof GISPolygone) { - if (count < 3) { - r = false; - if (_ui != null) { - _ui.error(null, CtuluLib.getS("La ligne brisee doit contenir {0} points au moins", CtuluLibString.TROIS), - false); - } - - } else { - newCs[count++] = newCs[0]; - final Coordinate[] coord = new Coordinate[count]; - System.arraycopy(newCs, 0, coord, 0, coord.length); - newString = GISGeometryFactory.INSTANCE.createLinearRing(coord); - newString.setUserData(line.getUserData()); - } - } - - // Une polyligne - else if (line instanceof GISPolyligne) { - if (count < 2) { - r = false; - if (_ui != null) { - _ui.error(null, CtuluLib.getS("La ligne brisee doit contenir {0} points au moins", CtuluLibString.DEUX), - false); - } - if (FuLog.isTrace()) { - FuLog.trace("EBLI: polylignes: not enough points"); - // message - } - } else { - final Coordinate[] coord = new Coordinate[count]; - System.arraycopy(newCs, 0, coord, 0, coord.length); - newString = GISGeometryFactory.INSTANCE.createLineString(coord); - newString.setUserData(line.getUserData()); - } - } - - if (r) { - final CtuluCommandComposite cmp = new CtuluCommandComposite(); - super.geometry_.setObject(_idxGeom, newString, cmp); - // si des attributs atomics sont concerne - if (idxToRemove != null && idxToRemove.size() > 0) { - final int[] idx = idxToRemove.toNativeArray(); - Arrays.sort(idx); - for (int i = getNbAttributes() - 1; i >= 0; i--) { - // attribut atomic - if (getAttribute(i).isAtomicValue()) { - // dans ce cas on recupere le model contenant cet attribut - final GISAttributeModel m = getModelListener(i); - // on recupere le sous-model concerne par la modif de geometrie - final GISAttributeModel atomicModel = (GISAttributeModel) m.getObjectValueAt(_idxGeom); - // on le change - m.setObject(_idxGeom, atomicModel.createSubModel(idx), cmp); - } - } - } - if (_cmd!=null) - _cmd.addCmd(cmp.getSimplify()); - } - return r; - } - - public void removeLignes(final int[] _idx, final CtuluCommandContainer _cmd) { - super.geometry_.remove(_idx, _cmd); - } - - public void setCoordinateSequence(final int _idx, final CoordinateSequence _newSeq, final CtuluCommandContainer _cmd) { - final LineString old = (LineString) super.geometry_.getValueAt(_idx); - if (_newSeq != null && _newSeq.size() == old.getNumPoints()) { - final CoordinateSequence seq = GISGeometryFactory.INSTANCE.getCoordinateSequenceFactory().create(_newSeq); - if (old/*.isClosed()*/ instanceof GISPolygone) { - geometry_.setObject(_idx, GISGeometryFactory.INSTANCE.createLinearRing(seq), _cmd); - } else { - GISPolyligne nl = (GISPolyligne)GISGeometryFactory.INSTANCE.createLineString(seq); - geometry_.setObject(_idx, nl, _cmd); - } - } - } - - - /** - * Remplace une ancienne g\xE9om\xE9trie par un nouveau polygone, en interpolant si n\xE9cessaire les attributs. - * @param _idx L'index de la g\xE9ometrie. - * @param _newLine La nouvelle g\xE9om\xE9trie. - * @param _cmd Le container de commandes. - */ - public void setValue(final int _idx, final GISPolygone _newLine, final CtuluCommandContainer _cmd) { - setValueIntern(_idx, _newLine, _cmd); - } - - /** - * Remplace une ancienne g\xE9om\xE9trie par une nouvelle polyligne, en interpolant si n\xE9cessaire les attributs. - * @param _idx L'index de la g\xE9ometrie. - * @param _newLine La nouvelle g\xE9om\xE9trie. - * @param _cmd Le container de commandes. - */ - public void setValue(final int _idx, final GISPolyligne _newLine, final CtuluCommandContainer _cmd) { - setValueIntern(_idx, _newLine, _cmd); - } - - public void updateListeners() { - for (int i = getNbAttributes() - 1; i >= 0; i--) { - final GISAttributeModelListener m = getModelListener(i); - if (m != null) { - if (m.getAttribute().isAtomicValue()) { - for (int j = m.getSize() - 1; j >= 0; j--) { - ((GISAttributeModelListener) m.getObjectValueAt(j)).setListener(this); - } - - } else { - m.setListener(this); - } - } - } - } -} +/* + * @creation 21 mars 2005 + * @modification $Date: 2008-04-01 07:22:47 $ + * @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 gnu.trove.TIntArrayList; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LineString; + +import com.memoire.fu.FuLog; + +import org.fudaa.ctulu.CtuluCommandComposite; +import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.CtuluLibArray; +import org.fudaa.ctulu.CtuluLibString; +import org.fudaa.ctulu.CtuluListSelectionInterface; +import org.fudaa.ctulu.CtuluUI; +import org.fudaa.ctulu.collection.CtuluCollectionDouble; + +/** + * @author Fred Deniger + * @version $Id: GISZoneCollectionLigneBrisee.java,v 1.20.6.4 2008-04-01 07:22:47 bmarchan Exp $ + */ +public class GISZoneCollectionLigneBrisee extends GISZoneCollection { + + public GISZoneCollectionLigneBrisee() { + this(null); + } + + /** + * @param _listener le listener + */ + public GISZoneCollectionLigneBrisee(final GISZoneListener _listener) { + this(10, _listener); + } + + /** + * @param _listener le listener + */ + public GISZoneCollectionLigneBrisee(final GISZoneListener _listener, final GISZoneCollectionLigneBrisee _br) { + this(10, _listener); + if (_br != null) { + for (int i = 0; i < _br.getNumGeometries(); i++) { + super.geometry_.add(_br.getGeometry(i), null, null); + } + } + } + + public GISZoneCollectionLigneBrisee(final int _nbObject, final GISZoneListener _listener) { + super(_nbObject); + listener_ = _listener; + } + + private List createListForSeveralAdd(final Object[][] _att, final int _nbGeom) { + final int nbAttributes = getNbAttributes(); + final List attListe = new ArrayList(nbAttributes); + for (int i = 0; i < nbAttributes; i++) { + final Object[] oi = new Object[_nbGeom]; + for (int j = 0; j < _nbGeom; j++) { + oi[j] = _att[j][i]; + } + attListe.add(oi); + } + return attListe; + } + + /** + * @param _idx l'indice de la ligne a changer + * @param _newLine la nouvelle ligne + * @param _cmd le receveur de commande + */ + private void setValueIntern(final int _idx, final LineString _newLine, final CtuluCommandContainer _cmd) { + if (!isGeomModifiable_) { + return; + } + final LineString old = (LineString) super.geometry_.getValueAt(_idx); + if (old.getNumPoints() == _newLine.getNumPoints() || !containsAtomicAttribute()) { + super.geometry_.setObject(_idx, _newLine, _cmd); + } else { + final CtuluCommandComposite cmp = new CtuluCommandComposite(); + for (int i = getNbAttributes() - 1; i >= 0; i--) { + final GISAttributeInterface att = getAttribute(i); + if (att.isAtomicValue()) { + final GISAttributeModel m = (GISAttributeModel) (getModelListener(i).getObjectValueAt(_idx)); + final GISReprojectInterpolateurI interpolateur = GISZoneAttributeFactory.create1DInterpolateur(att, old, + _newLine, m); + getModelListener(i).setObject(_idx, m.deriveNewModel(_newLine.getNumPoints(), interpolateur), cmp); + } + } + super.geometry_.setObject(_idx, _newLine, cmp); + if (_cmd != null) { + _cmd.addCmd(cmp.getSimplify()); + } + } + } + + /** + * Cr\xE9e un tableau de valeurs d'attributs.<p> + * + * Les valeurs peuvent \xEAtre globales ou atomiques. + * + * @param _init Les valeurs d'initialisation, dans l'ordre et au nombre des mod\xE8les d'attributs. + * Si null, les valeurs par d\xE9faut sont affect\xE9es (voir {@link GISAttributeInterface#getDefaultValue()}) + * @param _dest La g\xE9ometrie polyligne ou polygone. + * @param _isClosed Param\xE8tre inutilis\xE9. + * @return + */ + protected Object[] createAttributeList(final Object[] _init, final Geometry _dest, final boolean _isClosed) { + final Object[] rf = new Object[getNbAttributes()]; + if (_init != null && _init.length != getNbAttributes()) { + throw new IllegalArgumentException("bad size"); + } + for (int i = getNbAttributes() - 1; i >= 0; i--) { + rf[i]=createOrAssignAttribut(i,_init==null?null:_init[i],_dest); + } + return rf; + } + + public boolean accept(final GISVisitor _v) { + final int nb = getNumGeometries(); + for (int i = 0; i < nb; i++) { + if (!((GISLigneBrisee) getGeometry(i)).accept(_v)) { + return false; + } + } + return true; + } + + public void addAllLineStringClosedOrNode(final LineString[] _gs, final CtuluCommandContainer _cmd) { + if (isGeomModifiable_) { + + final Object[][] att = new Object[_gs.length][]; + for (int i = 0; i < _gs.length; i++) { + att[i] = createAttributeList(null, _gs[i], _gs[i].isClosed()); + } + + geometry_.addAll(_gs, createListForSeveralAdd(att, _gs.length), _cmd); + } + } + + public void addAllPolygones(final GISPolygone[] _gs, final CtuluCommandContainer _cmd) { + if (isGeomModifiable_) { + final Object[][] att = new Object[_gs.length][]; + for (int i = 0; i < _gs.length; i++) { + att[i] = createAttributeList(null, _gs[i], true); + } + geometry_.addAll(_gs, createListForSeveralAdd(att, _gs.length), _cmd); + } + } + + public void addAllPolylignes(final GISPolyligne[] _gs, final CtuluCommandContainer _cmd) { + if (isGeomModifiable_) { + final Object[][] att = new Object[_gs.length][]; + for (int i = 0; i < _gs.length; i++) { + att[i] = createAttributeList(null, _gs[i], false); + } + geometry_.addAll(_gs, createListForSeveralAdd(att, _gs.length), _cmd); + } + } + + public void addCoordinateSequence(final CoordinateSequence _seq, final Object[] _data, + final CtuluCommandContainer _cmd) { + if (_seq == null || _seq.size() < 2) { + return; + } + if (_seq.size() > 3 && _seq.getCoordinate(0).equals2D(_seq.getCoordinate(_seq.size() - 1))) { + addPolygone(_seq, _data, _cmd); + } else { + addPolyligne(_seq, _data, _cmd); + } + } + + public void addGeometry(final Geometry _seq, final Object[] _data, final CtuluCommandContainer _cmd) { + final LineString s = (LineString) _seq; + if (s.isClosed()) { + addPolygone(s.getCoordinateSequence(), _data, _cmd); + } else { + addPolyligne(s.getCoordinateSequence(), _data, _cmd); + } + } + + /** + * @todo Les poly de niveau sont mal trait\xE9es + */ + public void addPoint(final int _ligneIdx, final int _idxBefore, final double _x, final double _y, + final CtuluCommandContainer _cmd) { + if (!isGeomModifiable_) { + return; + } + LineString str = (LineString) super.geometry_.getValueAt(_ligneIdx); + final CoordinateSequence newSeq = str.getCoordinateSequence(); + final int initSize = newSeq.size(); + final Coordinate[] cs = new Coordinate[initSize + 1]; + int idx = 0; + for (int i = 0; i < initSize; i++) { + cs[idx++] = newSeq.getCoordinateCopy(i); + if (i == _idxBefore) { + cs[idx++] = new Coordinate(_x, _y, newSeq.getOrdinate(i, 2)); + } + } + + if (str/*.isClosed()*/ instanceof GISPolygone) { + str = GISGeometryFactory.INSTANCE.createLinearRing(cs); + setValue(_ligneIdx, (GISPolygone) str, _cmd); + } + else if (str instanceof GISPolyligne) { + str = GISGeometryFactory.INSTANCE.createLineString(cs); + setValue(_ligneIdx, (GISPolyligne) str, _cmd); + } + } + + public void addPolygone(final CoordinateSequence _g, final CtuluCommandContainer _cmd) { + addPolygone((GISPolygone) GISGeometryFactory.INSTANCE.createLinearRing(_g), _cmd); + } + + public void addPolygone(final CoordinateSequence _g, final Object[] _data, final CtuluCommandContainer _cmd) { + addPolygone((GISPolygone) GISGeometryFactory.INSTANCE.createLinearRing(_g), _data, _cmd); + } + + public void addPolygone(final GISPolygone _g, final CtuluCommandContainer _cmd) { + addPolygone(_g, null, _cmd); + } + + public void addPolygone(final GISPolygone _g, final Object[] _data, final CtuluCommandContainer _cmd) { + if (isGeomModifiable_) { + super.geometry_.add(_g, Arrays.asList(createAttributeList(_data, _g, true)), _cmd); + } + } + + public void addPolygoneNiveau(final CoordinateSequence _g, final CtuluCommandContainer _cmd) { + addPolygone((GISPolygone) GISGeometryFactory.INSTANCE.createLinearRingNiveau(_g), _cmd); + } + + /** + * Ajoute une polyligne sous forme d'une liste de coordonn\xE9es, avec attributs et gestionnaire de commandes. + * @param _g La liste de coordonn\xE9es, renseign\xE9e en Z. + * @param _data Les attributs, dans l'ordre dans lequel ils sont d\xE9finis dans la collection. + * @param _cmd Le gestionnaire de commandes. Peut \xEAtre null. + */ + public void addPolyligne(final CoordinateSequence _g, final Object[] _data, final CtuluCommandContainer _cmd) { + addPolyligne((GISPolyligne) GISGeometryFactory.INSTANCE.createLineString(_g), _data, _cmd); + } + + public void addPolyligne(final GISCoordinateSequence _g, final CtuluCommandContainer _cmd) { + addPolyligne((GISPolyligne) GISGeometryFactory.INSTANCE.createLineString(_g), _cmd); + } + + public void addPolyligne(final GISPolyligne _g, final CtuluCommandContainer _cmd) { + addPolyligne(_g, null, _cmd); + } + + /** + * Ajoute une polyligne, avec attributs et gestionnaire de commandes. + * @param _g La polyligne, renseign\xE9e en Z. + * @param _data Les attributs, dans l'ordre dans lequel ils sont d\xE9finis dans la collection. + * @param _cmd Le gestionnaire de commandes. Peut \xEAtre null. + */ + public void addPolyligne(final GISPolyligne _g, final Object[] _data, final CtuluCommandContainer _cmd) { + if (isGeomModifiable_) { + super.geometry_.add(_g, Arrays.asList(createAttributeList(_data, _g, false)), _cmd); + } + } + + public void addPolyligneNiveau(final GISCoordinateSequence _g, final CtuluCommandContainer _cmd) { + addPolyligne((GISPolyligne) GISGeometryFactory.INSTANCE.createLineStringNiveau(_g), _cmd); + } + + public boolean containsAtomicAttribute() { + for (int i = getNbAttributes() - 1; i >= 0; i--) { + if (getAttribute(i).isAtomicValue()) { + return true; + } + } + return false; + } + + /** + * @return true si contient au moins un polygone (ligne brisee fermee). + */ + public boolean containsPolygone() { + final GISVisitorChooser chooser = new GISVisitorChooser(); + for (int i = getNumGeometries() - 1; i >= 0; i--) { + ((GISGeometry) getGeometry(i)).accept(chooser); + if (chooser.isPolygone()) { + return true; + } + } + return false; + } + + /** + * @return true si contient au moins un polygone (ligne brisee fermee). + */ + public boolean containsPolyligne() { + final GISVisitorChooser chooser = new GISVisitorChooser(); + for (int i = getNumGeometries() - 1; i >= 0; i--) { + ((GISGeometry) getGeometry(i)).accept(chooser); + if (chooser.isPolyligne()) { + return true; + } + } + return false; + } + + public CoordinateSequence getCoordinateSequence(final int _i) { + return ((LineString) getGeometry(_i)).getCoordinateSequence(); + } + + public Class getDataStoreClass() { + return LineString.class; + } + + public double getDoubleValue(final int _idxAtt, final int _idxGeom) { + if (getAttribute(_idxAtt).isAtomicValue()) { + return CtuluLibArray.getMoyenne(((CtuluCollectionDouble) getModel(_idxAtt).getObjectValueAt(_idxGeom)).getValues()); + } + 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()) { + return false; + } + boolean r = true; + final LineString line = (LineString) getGeometry(_idxGeom); + int nbPt = line.getCoordinateSequence().size(); + // les nouvelles coordonnees. + final Coordinate[] newCs = new Coordinate[nbPt]; + // cette liste contient les indice a enlever : creee que si necessaire + // si des attribute atomics existent + final TIntArrayList idxToRemove = containsAtomicAttribute() ? new TIntArrayList(nbPt) : null; + // dans le cas polygone le dernier point n'est pas a considerer=premier point + if (line/*.isClosed()*/ instanceof GISPolygone) { + nbPt--; + } + + // compteur tempo + int count = 0; + for (int idxPt = 0; idxPt < nbPt; idxPt++) { + if (_sel.isSelected(idxPt)) { + if (idxToRemove != null) { + idxToRemove.add(idxPt); + } + } else { + newCs[count++] = line.getCoordinateSequence().getCoordinateCopy(idxPt); + } + } + LineString newString = null; + + // Un polygone + if (line/*.isClosed()*/ instanceof GISPolygone) { + if (count < 3) { + r = false; + if (_ui != null) { + _ui.error(null, CtuluLib.getS("La ligne brisee doit contenir {0} points au moins", CtuluLibString.TROIS), + false); + } + + } else { + newCs[count++] = newCs[0]; + final Coordinate[] coord = new Coordinate[count]; + System.arraycopy(newCs, 0, coord, 0, coord.length); + newString = GISGeometryFactory.INSTANCE.createLinearRing(coord); + newString.setUserData(line.getUserData()); + } + } + + // Une polyligne + else if (line instanceof GISPolyligne) { + if (count < 2) { + r = false; + if (_ui != null) { + _ui.error(null, CtuluLib.getS("La ligne brisee doit contenir {0} points au moins", CtuluLibString.DEUX), + false); + } + if (FuLog.isTrace()) { + FuLog.trace("EBLI: polylignes: not enough points"); + // message + } + } else { + final Coordinate[] coord = new Coordinate[count]; + System.arraycopy(newCs, 0, coord, 0, coord.length); + newString = GISGeometryFactory.INSTANCE.createLineString(coord); + newString.setUserData(line.getUserData()); + } + } + + if (r) { + final CtuluCommandComposite cmp = new CtuluCommandComposite(); + super.geometry_.setObject(_idxGeom, newStrin... [truncated message content] |
From: <bma...@us...> - 2008-07-15 15:25:53
|
Revision: 3689 http://fudaa.svn.sourceforge.net/fudaa/?rev=3689&view=rev Author: bmarchan Date: 2008-07-15 08:24:26 -0700 (Tue, 15 Jul 2008) Log Message: ----------- Correction sur addGeometry(), qui se fait directement depuiis la g?\195?\169om?\195?\169trie cr?\195?\169?\195?\169e. Modified Paths: -------------- 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 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-07-15 15:22:51 UTC (rev 3688) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionLigneBrisee.java 2008-07-15 15:24:26 UTC (rev 3689) @@ -182,12 +182,12 @@ } } - public void addGeometry(final Geometry _seq, final Object[] _data, final CtuluCommandContainer _cmd) { - final LineString s = (LineString) _seq; - if (s.isClosed()) { - addPolygone(s.getCoordinateSequence(), _data, _cmd); - } else { - addPolyligne(s.getCoordinateSequence(), _data, _cmd); + public void addGeometry(final Geometry _geom, final Object[] _data, final CtuluCommandContainer _cmd) { + if (!(_geom instanceof LineString)) + throw new IllegalArgumentException("Bad type geometry"); + + if (isGeomModifiable_) { + geometry_.add(_geom, Arrays.asList(createAttributeList(_data, _geom, true)), _cmd); } } 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-07-15 15:22:51 UTC (rev 3688) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java 2008-07-15 15:24:26 UTC (rev 3689) @@ -173,9 +173,11 @@ } public void addGeometry(final Geometry _geom, final Object[] _data, final CtuluCommandContainer _cmd) { - if (!(_geom instanceof GISMultiPoint)) return; + if (!(_geom instanceof GISMultiPoint)) + throw new IllegalArgumentException("Bad type geometry"); + if (isGeomModifiable_) { - super.geometry_.add(_geom, Arrays.asList(createAttributeList(_data, _geom, true)), _cmd); + geometry_.add(_geom, Arrays.asList(createAttributeList(_data, _geom, true)), _cmd); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bma...@us...> - 2008-07-15 15:27:54
|
Revision: 3690 http://fudaa.svn.sourceforge.net/fudaa/?rev=3690&view=rev Author: bmarchan Date: 2008-07-15 08:26:24 -0700 (Tue, 15 Jul 2008) Log Message: ----------- Cr?\195?\169ation d'une valeur d'attribut String global a partir d'un tableau de String Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeString.java branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java 2008-07-15 15:24:26 UTC (rev 3689) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java 2008-07-15 15:26:24 UTC (rev 3690) @@ -116,10 +116,11 @@ // Si la valeur en entr\xE9e est la valeur par d\xE9faut, alors une nouvelle valeur en sortie est cr\xE9\xE9e. // Ceci permet d'affecter automatiquement un nom nouveau \xE0 une g\xE9om\xE9trie cr\xE9\xE9e. if (r == null || def_.equals(r)) { - r="Geom_"+(++numid_); + return r="Geom_"+(++numid_); } - return r; - + else { + return super.createGlobalValues(_initValues); + } } public Object getDefaultValue() { Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeString.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeString.java 2008-07-15 15:24:26 UTC (rev 3689) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeString.java 2008-07-15 15:26:24 UTC (rev 3690) @@ -41,6 +41,15 @@ public Object getDefaultValue(){ return CtuluLibString.EMPTY_STRING; } + + protected Object createGlobalValues(final Object _initValues) { + if (_initValues instanceof Object[]) { // Plusieurs valeurs en entr\xE9e : On prend la premi\xE8re. + return ((Object[])_initValues)[0]; + } + else { + return super.createGlobalValues(_initValues); + } + } public int getPrecision(){ return 50; Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java 2008-07-15 15:24:26 UTC (rev 3689) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java 2008-07-15 15:26:24 UTC (rev 3690) @@ -134,7 +134,7 @@ ArrayList<Integer> idxpts=hibloc2ListPts_.get(_idxGeom); Object[] vals=new Object[idxpts.size()]; for (int i=0; i<idxpts.size(); i++) vals[i]=initmd_.getValue(_idxAtt,idxpts.get(i)); - datas_[_idxAtt][_idxGeom]=getAttribute(_idxAtt).createAtomicModel(vals, vals.length); + datas_[_idxAtt][_idxGeom]=getAttribute(_idxAtt).createDataForGeom(vals, vals.length); } return datas_[_idxAtt][_idxGeom]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |