From: <emm...@us...> - 2009-01-23 10:39:26
|
Revision: 4395 http://fudaa.svn.sourceforge.net/fudaa/?rev=4395&view=rev Author: emmanuel_martin Date: 2009-01-23 10:39:23 +0000 (Fri, 23 Jan 2009) Log Message: ----------- Commit de test ; r?\195?\169impl?\195?\169mentation de la tache #134 Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/telemac/io/SinusxWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/test/org/fudaa/dodico/telemac/TestJSinusx.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrMatisseConvertGUI.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java 2009-01-22 21:40:12 UTC (rev 4394) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/gml/GISGMLZoneExporter.java 2009-01-23 10:39:23 UTC (rev 4395) @@ -13,6 +13,12 @@ import java.io.IOException; import java.io.OutputStream; +import org.fudaa.ctulu.CtuluActivity; +import org.fudaa.ctulu.ProgressionInterface; +import org.fudaa.ctulu.ProgressionUpdater; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISZoneCollection; import org.geotools.data.DataStore; import org.geotools.data.FeatureWriter; import org.geotools.data.Transaction; @@ -25,17 +31,11 @@ import org.geotools.feature.SchemaException; import org.geotools.feature.type.BasicFeatureTypes; -import com.vividsolutions.jts.geom.Geometry; +import org.fudaa.ctulu.gis.GISDataModel; import com.memoire.fu.FuLog; +import com.vividsolutions.jts.geom.Geometry; -import org.fudaa.ctulu.CtuluActivity; -import org.fudaa.ctulu.ProgressionInterface; -import org.fudaa.ctulu.ProgressionUpdater; -import org.fudaa.ctulu.gis.GISAttributeConstants; -import org.fudaa.ctulu.gis.GISAttributeInterface; -import org.fudaa.ctulu.gis.GISZoneCollection; - /** * @author Fred Deniger * @version $Id: GISGMLZoneExporter.java,v 1.1.6.1 2008-03-28 14:59:28 bmarchan Exp $ @@ -54,7 +54,7 @@ private boolean useIdAsName_; - public AttributeType[] createAttributes(final GISZoneCollection _zone, final TObjectIntHashMap _attrIdx) { + public AttributeType[] createAttributes(final GISDataModel _zone, final TObjectIntHashMap _attrIdx) { final int attributeNb = _zone.getNbAttributes(); final TIntArrayList attribute = new TIntArrayList(attributeNb); // pour l'instant, les attributs atomiques (definis sur chaque sommets) ne sont pas @@ -107,12 +107,11 @@ * @throws SchemaException * @throws IllegalAttributeException */ - public void process(final ProgressionInterface _prog, final GISZoneCollection _zone, final DataStore _dest) + public void process(final ProgressionInterface _prog, final GISDataModel _zone, final DataStore _dest) throws IOException, SchemaException, IllegalAttributeException { out_ = null; store_ = _dest; process(_prog, _zone); - } /** @@ -133,10 +132,9 @@ } - private void process(final ProgressionInterface _prog, final GISZoneCollection _zone) throws IOException, + private void process(final ProgressionInterface _prog, final GISDataModel _zone) throws IOException, SchemaException, IllegalAttributeException { stop_ = false; - _zone.prepareExport(); final TObjectIntHashMap attIdx = new TObjectIntHashMap(_zone.getNbAttributes()); final AttributeType[] atts = createAttributes(_zone, attIdx); if (stop_) { @@ -160,7 +158,7 @@ final Feature feature = writer.next(); feature.setDefaultGeometry(_zone.getGeometry(i)); for (int j = 1; j < nbAttribute-1; j++) { - feature.setAttribute(j, _zone.getModel(attIdx.get(atts[j])).getObjectValueAt(i)); + feature.setAttribute(j, _zone.getValue(attIdx.get(atts[j]), i)); } // Enregistrement de l'index de la g\xE9om\xE9trie dans le fichier feature.setAttribute(nbAttribute-1, new Integer(i)); @@ -180,13 +178,14 @@ } - public FeatureType createFeatureType(final GISZoneCollection _zone, final AttributeType[] _atts) + public FeatureType createFeatureType(final GISDataModel _zone, final AttributeType[] _atts) throws SchemaException { + /* Changement de GISZoneCollection en GISDataModel, suppression des lignes dessous String name = _zone.getTitle(); if (name == null) { name = "zone"; - } - final FeatureType featureType = FeatureTypes.newFeatureType(_atts, name); + }*/ + final FeatureType featureType = FeatureTypes.newFeatureType(_atts, "zone"); return featureType; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/telemac/io/SinusxWriter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/telemac/io/SinusxWriter.java 2009-01-22 21:40:12 UTC (rev 4394) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/telemac/io/SinusxWriter.java 2009-01-23 10:39:23 UTC (rev 4395) @@ -14,34 +14,29 @@ import java.util.Calendar; import java.util.Locale; -import com.vividsolutions.jts.geom.CoordinateSequence; -import com.vividsolutions.jts.geom.LineString; -import com.vividsolutions.jts.geom.LinearRing; -import com.vividsolutions.jts.geom.MultiPoint; -import com.vividsolutions.jts.geom.Point; -import com.vividsolutions.jts.geom.Polygon; - import org.fudaa.ctulu.CtuluActivity; import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ctulu.ProgressionUpdater; import org.fudaa.ctulu.fileformat.FileFormatVersionInterface; -import org.fudaa.ctulu.gis.GISAttribute; import org.fudaa.ctulu.gis.GISAttributeConstants; -import org.fudaa.ctulu.gis.GISCollection; -import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISCoordinateSequenceFactory; +import org.fudaa.ctulu.gis.GISDataModel; import org.fudaa.ctulu.gis.GISGeometry; import org.fudaa.ctulu.gis.GISLib; import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISPolygone; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISVisitorDefault; -import org.fudaa.ctulu.gis.GISZone; -import org.fudaa.ctulu.gis.GISZoneCollection; -import org.fudaa.ctulu.gis.GISZoneCollectionPoint; - import org.fudaa.dodico.fortran.FileOpWriterCharSimpleAbstract; import org.fudaa.dodico.h2d.resource.H2dResource; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.LinearRing; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; + /** * @version $Id: SinusxWriter.java,v 1.24 2007-05-04 13:47:27 deniger Exp $ * @author Fred Deniger @@ -171,10 +166,10 @@ } protected void internalWrite(final Object _o) { - if (_o instanceof GISZone) { - writeZones((GISZone) _o); + if (_o instanceof GISDataModel[][]) { + writeZones((GISDataModel[][]) _o); } else { - donneesInvalides(_o); + donneesInvalides((GISDataModel[][]) _o); } } @@ -199,7 +194,7 @@ /** * @param _zones les zones a ecrire. */ - public void writeZones(final GISZone _zones) { + public void writeZones(final GISDataModel[][] _zones) { if (_zones == null) { analyze_.addFatalError(H2dResource.getS("Les donn\xE9es sont nulles")); return; @@ -210,7 +205,12 @@ progress_.setProgression(0); } up.majProgessionStateOnly(); - up.setValue(5, GISZone.getNbPoints(_zones)); + int nbPoints=0; + for(int i=0;i<_zones.length;i++) + for(int j=0;j<_zones[i].length;j++) + for(int k=0;k<_zones[i][j].getNumGeometries();k++) + nbPoints+=_zones[i][j].getGeometry(k).getNumPoints(); + up.setValue(5, nbPoints); final String bc = key_.getBlocCommentaire(); try { @@ -223,83 +223,77 @@ String spec; formate_.setPositivePrefix(pointPlus_); - final int max = _zones.getNumGeometries(); - for (int j = 0; j < max; j++) { - if (stop_) { + // Points + GISDataModel[] models=_zones[0]; + for (int j=0; j<models.length; j++) { + if (stop_) return; - } - // fermee= false; - spec = null; - final GISZoneCollection g = (GISZoneCollection) _zones.getGeometry(j); - if (g == null) { - continue; - } - int attName=g.getIndiceOf(GISAttributeConstants.TITRE); + final StringBuffer buf=new StringBuffer(50); + buf.append(bs_).append(' '); + buf.append(key_.getTypeSemis()); + writeToOut(buf.toString()); + writeEntete(j, "semis", null, false); + Coordinate[] coord=new Coordinate[models[j].getNumGeometries()]; + for (int k=0; k<coord.length; k++) + coord[k]=models[j].getGeometry(k).getCoordinate(); + writeCoordinateSequence(new GISCoordinateSequenceFactory().create(coord), up, false); + } + // Polylignes + models=_zones[1]; + for (int j=0; j<models.length; j++) { + final int nbPoly=models[j].getNumGeometries(); + int attName=models[j].getIndiceOf(GISAttributeConstants.TITRE); + for (int polyIdx=0; polyIdx<nbPoly; polyIdx++) { + if (stop_) + return; + final StringBuffer buf=new StringBuffer(); + buf.append(bs_).append(CtuluLibString.ESPACE); + final LineString geom=(LineString)models[j].getGeometry(polyIdx); + ((GISGeometry)geom).accept(identifieur); + final boolean ferme=identifieur.isClosed_; - // Les lignes et polygones - if (g.getDataStoreClass() == LineString.class || g.getDataStoreClass() == LinearRing.class) { - final int nbPoly = g.getNumGeometries(); - for (int polyIdx = 0; polyIdx < nbPoly; polyIdx++) { - final StringBuffer buf = new StringBuffer(); - buf.append(bs_).append(CtuluLibString.ESPACE); - final LineString geom = (LineString) g.getGeometryN(polyIdx); - ((GISGeometry) geom).accept(identifieur); - final boolean ferme = identifieur.isClosed_; - - final String nom; - if (attName==-1) - nom= ((ferme) ? "polygone" : "polyligne") + CtuluLibString.ESPACE + (j + 1) + "-" + (polyIdx + 1); - else - nom=(String)g.getValue(attName, polyIdx); - - if (identifieur.isNiveau_) { - buf.append(key_.getTypeCourbeNiveau()); - spec = formate_.format(geom.getCoordinateSequence().getOrdinate(0, 2)); + final String nom; + if (attName==-1) + nom=((ferme) ? "polygone":"polyligne")+CtuluLibString.ESPACE+(j+1)+"-"+(polyIdx+1); + else + nom=(String)models[j].getValue(attName, polyIdx); - } else { - buf.append(key_.getTypeCourbe()); - spec = courbeDefaut(key_.getCourbeNBIndic()); - } - writeToOut(buf.toString()); - writeEntete(j + polyIdx, nom, spec, ferme); - writeCoordinateSequence(geom.getCoordinateSequence(), up, ferme); + if (identifieur.isNiveau_) { + buf.append(key_.getTypeCourbeNiveau()); + spec=formate_.format(geom.getCoordinateSequence().getOrdinate(0, 2)); } - // DEBUG: Que veut dire ferme?? - // if(ent instanceof MNTPolygone) fermee=true; - } - - // Multipoints - else if (g.getDataStoreClass() == GISMultiPoint.class) { - final int nbPoly = g.getNumGeometries(); - for (int polyIdx = 0; polyIdx < nbPoly; polyIdx++) { - final StringBuffer buf = new StringBuffer(); - buf.append(bs_).append(CtuluLibString.ESPACE); - final GISMultiPoint geom = (GISMultiPoint) g.getGeometryN(polyIdx); - - final String nom; - if (attName==-1) - nom = "semis"+ CtuluLibString.ESPACE + (j + 1) + "-" + (polyIdx + 1); - else - nom=(String)g.getValue(attName, polyIdx); - - buf.append(key_.getTypeSemis()); - spec = null; - writeToOut(buf.toString()); - writeEntete(j + polyIdx, nom , spec, false); - writeCoordinateSequence(geom.getCoordinateSequence(), up, false); + else { + buf.append(key_.getTypeCourbe()); + spec=courbeDefaut(key_.getCourbeNBIndic()); } - // DEBUG: Que veut dire ferme?? - // if(ent instanceof MNTPolygone) fermee=true; + writeToOut(buf.toString()); + writeEntete(j+polyIdx, nom, spec, ferme); + writeCoordinateSequence(geom.getCoordinateSequence(), up, ferme); } - - // Points - else { - final StringBuffer buf = new StringBuffer(50); - buf.append(bs_).append(' '); + } + // Multipoint + models=_zones[2]; + for (int j=0; j<models.length; j++) { + int attName=models[j].getIndiceOf(GISAttributeConstants.TITRE); + final int nbPoly=models[j].getNumGeometries(); + for (int polyIdx=0; polyIdx<nbPoly; polyIdx++) { + if (stop_) + return; + final StringBuffer buf=new StringBuffer(); + buf.append(bs_).append(CtuluLibString.ESPACE); + final GISMultiPoint geom=(GISMultiPoint)models[j].getGeometry(polyIdx); + + final String nom; + if (attName==-1) + nom="semis"+CtuluLibString.ESPACE+(j+1)+"-"+(polyIdx+1); + else + nom=(String)models[j].getValue(attName, polyIdx); + buf.append(key_.getTypeSemis()); + spec=null; writeToOut(buf.toString()); - writeEntete(j, "semis", null, false); - writeCoordinateSequence(((GISZoneCollectionPoint) g), up, false); + writeEntete(j+polyIdx, nom, spec, false); + writeCoordinateSequence(geom.getCoordinateSequence(), up, false); } } } catch (final IOException e) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/test/org/fudaa/dodico/telemac/TestJSinusx.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/test/org/fudaa/dodico/telemac/TestJSinusx.java 2009-01-22 21:40:12 UTC (rev 4394) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/test/org/fudaa/dodico/telemac/TestJSinusx.java 2009-01-23 10:39:23 UTC (rev 4395) @@ -8,22 +8,28 @@ package org.fudaa.dodico.telemac; import java.io.File; +import java.util.ArrayList; +import java.util.List; import junit.framework.TestCase; -import com.vividsolutions.jts.geom.CoordinateSequence; - import org.fudaa.ctulu.CtuluIOOperationSynthese; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISPointMutable; import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZone; +import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gis.GISZoneCollectionPoint; import org.fudaa.ctulu.gis.GISZoneCollectionPolygone; import org.fudaa.ctulu.gis.GISZoneCollectionPolyligne; - import org.fudaa.dodico.all.TestIO; import org.fudaa.dodico.telemac.io.SinusxFileFormat; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.LinearRing; + /** * @version $Id: TestJSinusx.java,v 1.2 2007-06-29 15:10:32 deniger Exp $ * @author Fred Deniger @@ -123,7 +129,33 @@ assertNotNull(zones); f = File.createTempFile("testSinux", ".sx"); assertNotNull(f); - SinusxFileFormat.getInstance().getLastVersionInstance(null).write(f, zones, null); + + //# Conversion de la GISZone en GISDataModel[][] #\\ + // Tri des GISZoneCollection en fonction de leur type + List<GISDataModel> points=new ArrayList<GISDataModel>(); + List<GISDataModel> lignes=new ArrayList<GISDataModel>(); + List<GISDataModel> multipoints=new ArrayList<GISDataModel>(); + for (int i=0; i<zones.getNumGeometries(); i++) { + GISZoneCollection zone=(GISZoneCollection)zones.getGeometry(i); + // Les lignes et polygones + if (zone.getDataStoreClass()==LineString.class||zone.getDataStoreClass()==LinearRing.class) + lignes.add((GISDataModel)zone); + // Multipoints + else if (zone.getDataStoreClass()==GISMultiPoint.class) + multipoints.add((GISDataModel)zone); + // Points + else + points.add((GISDataModel)zone); + } + /* Case 0 : les points + * Case 1 : les polylignes et les polygones + * Case 2 : les multipoints. + */ + GISDataModel[][] gisDataModels=new GISDataModel[][]{points.toArray(new GISDataModel[0]), lignes.toArray(new GISDataModel[0]), + multipoints.toArray(new GISDataModel[0])}; + //# Fin de la conversion #\\ + + SinusxFileFormat.getInstance().getLastVersionInstance(null).write(f, gisDataModels, null); lecture(f); } catch (final Exception _e) { _e.printStackTrace(); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java 2009-01-22 21:40:12 UTC (rev 4394) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java 2009-01-23 10:39:23 UTC (rev 4395) @@ -13,11 +13,6 @@ import java.util.List; import java.util.Set; -import org.geotools.data.FileDataStoreFactorySpi; - -import com.memoire.fu.FuEmptyArrays; -import com.memoire.fu.FuLog; - import org.fudaa.ctulu.CtuluAnalyze; import org.fudaa.ctulu.CtuluIOOperationSynthese; import org.fudaa.ctulu.CtuluLib; @@ -32,23 +27,20 @@ import org.fudaa.ctulu.gis.GISDataModelFilterAdapter; import org.fudaa.ctulu.gis.GISDataModelMultiAdapter; import org.fudaa.ctulu.gis.GISDataModelPointToMultiPointAdapter; -import org.fudaa.ctulu.gis.GISZone; -import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gis.factory.GISExportDataStoreFactory; import org.fudaa.ctulu.gis.gml.GISGMLZoneExporter; import org.fudaa.ctulu.gis.mif.MIFDataStoreFactory; - import org.fudaa.dodico.dunes.io.DunesGEOFileFormat; import org.fudaa.dodico.rubar.io.RubarSEMFileFormat; import org.fudaa.dodico.rubar.io.RubarSEMWriterGISAdapter; import org.fudaa.dodico.rubar.io.RubarStCnFileFormat; import org.fudaa.dodico.telemac.io.SinusxFileFormat; - import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; - import org.fudaa.fudaa.commun.FudaaLib; -import org.fudaa.fudaa.sig.FSigResource; +import org.geotools.data.FileDataStoreFactorySpi; +import com.memoire.fu.FuLog; + /** * @author fred deniger * @version $Id: FSigLayerExporter.java,v 1.4 2007-06-14 12:01:22 deniger Exp $ @@ -103,7 +95,7 @@ return null; } } - final GISZoneCollection collect = _filter.getCollect(oi); + GISDataModel collect = _filter.getCollect(oi); exporter.process(_prog, collect, GISExportDataStoreFactory.createDataStore(dataStore_, file.toURL(), collect .getEnvelopeInternal(), true)); @@ -122,21 +114,24 @@ CtuluIOOperationSynthese exportTo(final FSigLayerFilter _filter, final CtuluUI _impl, final File _f, final ProgressionInterface _prog) { File f = CtuluLibFile.appendExtensionIfNeeded(_f, "sx"); - final GISZone z = new GISZone(); + GISDataModel[][] z = new GISDataModel[3][]; int nb = _filter.pointCq_.size(); + z[0]=new GISDataModel[_filter.pointCq_.size()]; for (int i = 0; i < nb; i++) { - final GISZoneCollection collec = _filter.getCollect(_filter.pointCq_.get(i)); - z.add(collec); + final GISDataModel collec = _filter.getCollect(_filter.pointCq_.get(i)); + z[0][i]=collec; } nb = _filter.polyCq_.size(); + z[1]=new GISDataModel[_filter.polyCq_.size()]; for (int i = 0; i < nb; i++) { - final GISZoneCollection collec = _filter.getCollect(_filter.polyCq_.get(i)); - z.add(collec); + final GISDataModel collec = _filter.getCollect(_filter.polyCq_.get(i)); + z[1][i]=collec; } nb = _filter.mlptsCq_.size(); + z[2]=new GISDataModel[_filter.mlptsCq_.size()]; for (int i = 0; i < nb; i++) { - final GISZoneCollection collec = _filter.getCollect(_filter.mlptsCq_.get(i)); - z.add(collec); + final GISDataModel collec = _filter.getCollect(_filter.mlptsCq_.get(i)); + z[2][i]=collec; } return SinusxFileFormat.getInstance().write(f, z, _prog); @@ -158,7 +153,7 @@ mdls.add(_filter.getCollect(_filter.mlptsCq_.get(i))); } for (int i = 0; i < _filter.polyCq_.size(); i++) { - final GISZoneCollection collec = _filter.getCollect(_filter.polyCq_.get(i)); + final GISDataModel collec = _filter.getCollect(_filter.polyCq_.get(i)); mdls.add(collec); } @@ -194,17 +189,18 @@ mdlsemis.add(GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.mlptsCq_.get(i)), null)); } for (int i=0; i<_filter.polyCq_.size(); i++) { - GISZoneCollection col=_filter.getCollect(_filter.polyCq_.get(i)); - if (col.getNbGeometries()==0) continue; + GISDataModel col=_filter.getCollect(_filter.polyCq_.get(i)); + if (col.getNumGeometries()==0) + continue; int idxAtt=col.getIndiceOf(GISAttributeConstants.NATURE); if (idxAtt==-1) { - mdlautres.add(GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)), - new GISAttributeInterface[]{GISAttributeConstants.TITRE})); + mdlautres.add(GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)), + new GISAttributeInterface[]{GISAttributeConstants.TITRE})); } else { - GISDataModel mdl=GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)), - new GISAttributeInterface[]{GISAttributeConstants.TITRE,GISAttributeConstants.NATURE}); - if (GISAttributeConstants.ATT_NATURE_CN.equals(col.getValue(idxAtt,0))) { + GISDataModel mdl=GISDataModelFilterAdapter.buildAdapter(_filter.getCollect(_filter.polyCq_.get(i)), + new GISAttributeInterface[]{GISAttributeConstants.TITRE, GISAttributeConstants.NATURE}); + if (GISAttributeConstants.ATT_NATURE_CN.equals(col.getValue(idxAtt, 0))) { mdlniv.add(mdl); } else if (GISAttributeConstants.ATT_NATURE_PF.equals(col.getValue(idxAtt,0))) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2009-01-22 21:40:12 UTC (rev 4394) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerFilter.java 2009-01-23 10:39:23 UTC (rev 4395) @@ -16,18 +16,13 @@ import org.fudaa.ctulu.CtuluIOOperationSynthese; import org.fudaa.ctulu.CtuluUI; import org.fudaa.ctulu.ProgressionInterface; -import org.fudaa.ctulu.gis.GISAttributeModel; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISDataModelFilterAdapter; import org.fudaa.ctulu.gis.GISZoneCollection; -import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; -import org.fudaa.ctulu.gis.GISZoneCollectionMultiPoint; -import org.fudaa.ctulu.gis.GISZoneCollectionPoint; import org.fudaa.ebli.calque.BCalque; import org.fudaa.ebli.calque.BCalqueVisitor; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; -import org.fudaa.ebli.calque.ZCalqueGeometry; import org.fudaa.ebli.calque.ZModeleGeometry; -import org.fudaa.ebli.calque.edition.ZModeleGeometryDefault; -import org.fudaa.ebli.calque.edition.ZModelePointEditable; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.MultiPoint; @@ -40,10 +35,10 @@ */ public class FSigLayerFilter implements BCalqueVisitor { - final Set<BCalque> cqs_ = new HashSet<BCalque>(); - List<BCalque> pointCq_ = new ArrayList<BCalque>(); - List<BCalque> polyCq_ = new ArrayList<BCalque>(); - List<BCalque> mlptsCq_=new ArrayList<BCalque>(); + final Set<ZCalqueAffichageDonneesInterface> cqs_ = new HashSet<ZCalqueAffichageDonneesInterface>(); + List<ZCalqueAffichageDonneesInterface> pointCq_ = new ArrayList<ZCalqueAffichageDonneesInterface>(); + List<ZCalqueAffichageDonneesInterface> polyCq_ = new ArrayList<ZCalqueAffichageDonneesInterface>(); + List<ZCalqueAffichageDonneesInterface> mlptsCq_=new ArrayList<ZCalqueAffichageDonneesInterface>(); boolean bonlyVisible_=false; protected boolean onlySelectedGeometries_=false; @@ -74,13 +69,16 @@ return _o.getTitle(); } - final GISZoneCollection getCollect(final ZCalqueAffichageDonneesInterface _o) { - final GISZoneCollection geomData = ((ZModeleGeometry) _o.modeleDonnees()).getGeomData(); - geomData.prepareExport(); - return geomData; + final GISDataModel getCollect(final ZCalqueAffichageDonneesInterface _o) { + GISZoneCollection zone = ((ZModeleGeometry) _o.modeleDonnees()).getGeomData(); + zone.prepareExport(); + int[] idxAttributes=new int[zone.getNbAttributes()]; + for(int i=0;i<zone.getNbAttributes();i++) + idxAttributes[i]=i; + return new GISDataModelFilterAdapter(zone, idxAttributes, _o.getSelectedObjectInTable()); } - final GISZoneCollection getCollect(final Object _o) { + final GISDataModel getCollect(final Object _o) { return getCollect((ZCalqueAffichageDonneesInterface) _o); } @@ -99,40 +97,6 @@ onlySelectedGeometries_=_b; } - /** - * Retourne les donn\xE9es de la g\xE9om\xE9tries de _zone. - * retourne null si _idxGeom est invalide. - */ - private Object[] getData(int _idxGeom, GISZoneCollection _zone) { - Object[] data=null; - if (_idxGeom>=0&&_idxGeom<_zone.getNbGeometries()) { - GISAttributeModel[] models=_zone.getModels(); - data=new Object[models.length]; - for (int i=0; i<data.length; i++) - data[i]=models[i].getObjectValueAt(_idxGeom); - } - return data; - } - - /** - * Ajout les attributs n\xE9c\xE9ssaires \xE0 _destination puis ajout les g\xE9om\xE9tries de - * la _source \xE0 la _destination. - */ - private void addGeoms(int[] _idx, GISZoneCollection _source, GISZoneCollection _destination) { - _destination.setAttributes(_source.getAttributes(), null); - for(int i=0;i<_idx.length;i++) - _destination.addGeometry(_source.getGeometry(_idx[i]), getData(_idx[i], _source), null); - } - - /** - * Cr\xE9e un nouveau calque dupliquant les g\xE9om\xE9ries selectionn\xE9es dans celui pass\xE9 en param\xE8tre. - */ - private BCalque duplicateCalque(ZCalqueAffichageDonneesInterface _calque) { - ZModeleGeometryDefault model=new ZModeleGeometryDefault(null); - addGeoms(_calque.getSelectedObjectInTable(), ((ZModeleGeometry)_calque.modeleDonnees()).getGeomData(), model.getGeomData()); - return new ZCalqueGeometry(model); - } - public boolean visit(final BCalque _cq) { // Calque non trait\xE9 si invisible. if (bonlyVisible_&&!_cq.isVisible()) @@ -140,36 +104,17 @@ if (!cqs_.contains(_cq)&&_cq instanceof ZCalqueAffichageDonneesInterface &&((ZCalqueAffichageDonneesInterface)_cq).modeleDonnees() instanceof ZModeleGeometry) { - cqs_.add(_cq); - ZCalqueAffichageDonneesInterface calque=(ZCalqueAffichageDonneesInterface)_cq; - final ZModeleGeometry geom=(ZModeleGeometry)calque.modeleDonnees(); - if (onlySelectedGeometries_) { - if (!calque.isSelectionEmpty()) { - if (geom.getGeomData().getDataStoreClass().equals(Point.class)) { - ZModelePointEditable model=new ZModelePointEditable(new GISZoneCollectionPoint()); - addGeoms(calque.getSelectedObjectInTable(), geom.getGeomData(), model.getGeomData()); - pointCq_.add(new ZCalqueGeometry(model)); - } - else if (LineString.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) { - ZModeleGeometryDefault model=new ZModeleGeometryDefault(new GISZoneCollectionLigneBrisee()); - addGeoms(calque.getSelectedObjectInTable(), geom.getGeomData(), model.getGeomData()); - polyCq_.add(new ZCalqueGeometry(model)); - } - else if (MultiPoint.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) { - ZModeleGeometryDefault model=new ZModeleGeometryDefault(new GISZoneCollectionMultiPoint()); - addGeoms(calque.getSelectedObjectInTable(), geom.getGeomData(), model.getGeomData()); - mlptsCq_.add(new ZCalqueGeometry(model)); - } - } - } - else { + ZCalqueAffichageDonneesInterface calque=(ZCalqueAffichageDonneesInterface)_cq; + ZModeleGeometry geom=(ZModeleGeometry)calque.modeleDonnees(); + cqs_.add(calque); + if (!onlySelectedGeometries_||!calque.isSelectionEmpty()) { if (geom.getGeomData().getDataStoreClass().equals(Point.class)) - pointCq_.add(_cq); + pointCq_.add(calque); else if (LineString.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) - polyCq_.add(_cq); + polyCq_.add(calque); else if (MultiPoint.class.isAssignableFrom(geom.getGeomData().getDataStoreClass())) - mlptsCq_.add(_cq); + mlptsCq_.add(calque); } } return true; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrMatisseConvertGUI.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrMatisseConvertGUI.java 2009-01-22 21:40:12 UTC (rev 4394) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrMatisseConvertGUI.java 2009-01-23 10:39:23 UTC (rev 4395) @@ -11,6 +11,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; +import java.util.ArrayList; +import java.util.List; import javax.swing.BorderFactory; import javax.swing.JTextField; @@ -20,6 +22,8 @@ import javax.swing.event.DocumentListener; import com.memoire.bu.*; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.LinearRing; import org.fudaa.ctulu.CtuluActivity; import org.fudaa.ctulu.CtuluIOOperationSynthese; @@ -28,7 +32,10 @@ import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ctulu.CtuluProgressionBarAdapter; import org.fudaa.ctulu.ProgressionInterface; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISZone; +import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ctulu.gui.CtuluDialogPanel; import org.fudaa.ctulu.gui.CtuluLibDialog; @@ -234,7 +241,33 @@ progress_.setDesc(CtuluLib.getS("Export")); final SinusxWriter sxW = new SinusxWriter(SinusxFileFormat.getInstance()); current_ = sxW; - sxW.write(mnt_, sx, progress_); + + //# Conversion de la GISZone en GISDataModel[][] #\\ + // Tri des GISZoneCollection en fonction de leur type + List<GISDataModel> points=new ArrayList<GISDataModel>(); + List<GISDataModel> lignes=new ArrayList<GISDataModel>(); + List<GISDataModel> multipoints=new ArrayList<GISDataModel>(); + for (int i=0; i<mnt_.getNumGeometries(); i++) { + GISZoneCollection zone=(GISZoneCollection)mnt_.getGeometry(i); + // Les lignes et polygones + if (zone.getDataStoreClass()==LineString.class||zone.getDataStoreClass()==LinearRing.class) + lignes.add((GISDataModel)zone); + // Multipoints + else if (zone.getDataStoreClass()==GISMultiPoint.class) + multipoints.add((GISDataModel)zone); + // Points + else + points.add((GISDataModel)zone); + } + /* Case 0 : les points + * Case 1 : les polylignes et les polygones + * Case 2 : les multipoints. + */ + GISDataModel[][] gisDataModels=new GISDataModel[][]{points.toArray(new GISDataModel[0]), lignes.toArray(new GISDataModel[0]), + multipoints.toArray(new GISDataModel[0])}; + //# Fin de la conversion #\\ + + sxW.write(gisDataModels, sx, progress_); CtuluLibDialog.showMessage(btCharger_, "OK", TrResource.getS("Export r\xE9ussie")); progress_.reset(); btStop_.setEnabled(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |