From: <bma...@us...> - 2008-08-14 10:01:48
|
Revision: 3801 http://fudaa.svn.sourceforge.net/fudaa/?rev=3801&view=rev Author: bmarchan Date: 2008-08-14 10:01:56 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Integration fonction d'interpolation Modified Paths: -------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationSupportGISAdapter.java branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java Added Paths: ----------- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProjectionAction.java branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModelGeometry.java Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationSupportGISAdapter.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationSupportGISAdapter.java 2008-08-14 10:00:28 UTC (rev 3800) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationSupportGISAdapter.java 2008-08-14 10:01:56 UTC (rev 3801) @@ -9,22 +9,39 @@ import gnu.trove.TObjectIntHashMap; -import com.vividsolutions.jts.geom.Point; +import java.util.ArrayList; import org.fudaa.ctulu.CtuluVariable; +import org.fudaa.ctulu.collection.CtuluCollectionDouble; +import org.fudaa.ctulu.gis.GISAttributeDouble; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; import org.fudaa.ctulu.gis.GISDataModel; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Point; + /** + * Un adapteur pour un support d'interpolation a partir d'un modele contenant des + * g\xE9om\xE9tries. + * * @author Fred Deniger * @version $Id: InterpolationSupportGISAdapter.java,v 1.2 2007-06-11 13:03:29 deniger Exp $ */ public class InterpolationSupportGISAdapter implements SupportLocationI, InterpolationSupportValuesI { final GISDataModel model_; + /** Une table qui associe un attribut a un indice sur le modele */ final TObjectIntHashMap attInt_; - + /** Si le modele ne contient que des points, optimisation du support */ + final boolean onlyPoints_; + /** Si le modele continet autre chose que des points */ + int[][] idx2geom_; + /** - * @param _model un model ne contenant que des points + * Construction de l'adapteur a partir d'un modele g\xE9om\xE9trique. Si le modele n'est constitu\xE9 que + * de Point, le support est optimis\xE9. + * @param _model un model contenant des g\xE9om\xE9tries. */ public InterpolationSupportGISAdapter(final GISDataModel _model) { model_ = _model; @@ -33,21 +50,99 @@ for (int i = 0; i < nbAttributes; i++) { attInt_.put(model_.getAttribute(i), i); } + + onlyPoints_=containsOnlyPoints(); + if (!onlyPoints_) initIndexes(); } + + /** + * Retourne vrai si le modele ne contient que des points. + * @return True : Si vide ou uniquement des points. + */ + public boolean containsOnlyPoints() { + int nb=model_.getNumGeometries(); + for (int i=0; i<nb; i++) { + if (!(model_.getGeometry(i) instanceof Point)) return false; + } + return true; + } + + private void initIndexes() { + ArrayList<int[]> vidx2geom=new ArrayList<int[]>(); + int nb=model_.getNumGeometries(); + for (int i=0; i<nb; i++) { + Geometry g=model_.getGeometry(i); + int nbpts=g.getNumPoints(); + for (int j=0; j<nbpts; j++) { + vidx2geom.add(new int[]{i,j}); + } + } + idx2geom_=vidx2geom.toArray(new int[0][0]); + } + public int getPtsNb() { - return model_.getNumGeometries(); + int nb; + + if (onlyPoints_) + nb=model_.getNumGeometries(); + else + nb=idx2geom_.length; + + return nb; } public double getPtX(final int _i) { - return ((Point) model_.getGeometry(_i)).getX(); + if (onlyPoints_) { + return ((Point)model_.getGeometry(_i)).getX(); + } + else { + CoordinateSequence seq= + ((GISCoordinateSequenceContainerInterface)model_.getGeometry(idx2geom_[_i][0])).getCoordinateSequence(); + return seq.getX(idx2geom_[_i][1]); + } } public double getPtY(final int _i) { - return ((Point) model_.getGeometry(_i)).getY(); + if (onlyPoints_) { + return ((Point)model_.getGeometry(_i)).getY(); + } + else { + CoordinateSequence seq= + ((GISCoordinateSequenceContainerInterface)model_.getGeometry(idx2geom_[_i][0])).getCoordinateSequence(); + return seq.getY(idx2geom_[_i][1]); + } } - public double getV(CtuluVariable _var, int _ptIdx) { - return model_.getDoubleValue(attInt_.get(_var), _ptIdx); + /* + * _var Un attribut pour lequel trouver la valeur. L'attribut peut \xEAtre atomique ou + * global, mais doit \xEAtre de type GISAttributDouble. + */ + public double getV(CtuluVariable _var, int _i) { + if (!(_var instanceof GISAttributeDouble)) + throw new IllegalArgumentException("Bad argument _var"); + + double val; + + if (onlyPoints_) { + val=model_.getDoubleValue(attInt_.get(_var), _i); + } + else { + GISAttributeDouble att=(GISAttributeDouble)_var; + if (att.isAtomicValue()) { + Object vals=model_.getValue(attInt_.get(_var),idx2geom_[_i][0]); + if (vals instanceof CtuluCollectionDouble) { + val=((CtuluCollectionDouble)vals).getValue(idx2geom_[_i][1]); + } + else { + val=0; + } + } + else { + val=model_.getDoubleValue(attInt_.get(_var),idx2geom_[_i][0]); + } + } + + return val; } } Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-08-14 10:00:28 UTC (rev 3800) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2008-08-14 10:01:56 UTC (rev 3801) @@ -41,6 +41,7 @@ import org.fudaa.fudaa.modeleur.action.SceneDecimationAction; import org.fudaa.fudaa.modeleur.action.SceneInterpolationAction; import org.fudaa.fudaa.modeleur.action.SceneMoveInLayerAction; +import org.fudaa.fudaa.modeleur.action.SceneProjectionAction; import org.fudaa.fudaa.modeleur.action.SceneRefinementAction; import org.fudaa.fudaa.sig.layer.FSigEditor; import org.fudaa.fudaa.sig.layer.FSigLayerExporter; @@ -83,6 +84,7 @@ acts.add(new SceneMoveInLayerAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneDecimationAction((MdlSceneEditor)sceneEditor_)); acts.add(new SceneRefinementAction((MdlSceneEditor)sceneEditor_)); + acts.add(new SceneProjectionAction((MdlSceneEditor)sceneEditor_)); getSceneEditor().getScene().setActions(acts.toArray(new EbliActionAbstract[0])); } Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java (rev 0) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java 2008-08-14 10:01:56 UTC (rev 3801) @@ -0,0 +1,194 @@ +/* + * @creation 8 sept. 06 + * @modification $Date: 2008/05/13 12:10:21 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.fudaa.modeleur; + +import java.awt.Color; +import java.awt.Dimension; + +import javax.swing.JScrollPane; +import javax.swing.JTree; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.TreePath; + +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISDataModel; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gis.GISZoneCollectionGeometry; +import org.fudaa.ctulu.gui.CtuluDialogPanel; +import org.fudaa.ebli.calque.BArbreCalqueModel; +import org.fudaa.ebli.calque.CalqueGISTreeModel; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesAbstract; +import org.fudaa.ebli.calque.ZCalqueGeometry; +import org.fudaa.ebli.calque.ZEbliCalquesPanel; +import org.fudaa.ebli.calque.ZModeleGeom; +import org.fudaa.ebli.geometrie.GrBoite; +import org.fudaa.ebli.trace.TraceIcon; +import org.fudaa.ebli.trace.TraceIconModel; +import org.fudaa.ebli.trace.TraceLigne; +import org.fudaa.ebli.trace.TraceLigneModel; +import org.fudaa.fudaa.modeleur.layer.MdlModelGeometry; +import org.fudaa.fudaa.sig.FSigLib; +import org.fudaa.fudaa.tr.common.TrResource; + +import com.memoire.bu.BuLabel; +import com.memoire.bu.BuVerticalLayout; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Polygon; + +/** + * Un panneau de saisie des g\xE9om\xE9tries supports de projection suivant Z. + * @author Bertrand Marchand + * @version $Id: MdlProjectImportPanel.java,v 1.1.2.1 2008/05/13 12:10:21 bmarchan Exp $ + */ +public class MdlProjectionPanel extends CtuluDialogPanel { + + private ZEbliCalquesPanel pn_; + private GrBoite initZoom_; + private JTree trLayers_; + private ZCalqueGeometry cqTmp_; + private GISZoneCollection support_; + + public MdlProjectionPanel(ZEbliCalquesPanel _pn) { + pn_=_pn; + setLayout(new BuVerticalLayout(5,true,true)); + + BuLabel lbTitle=new BuLabel(FSigLib.getS("S\xE9lectionnez les semis")); + add(lbTitle); + + CalqueGISTreeModel md=new CalqueGISTreeModel(null,_pn.getDonneesCalque()); + md.setMask(GISLib.MASK_MULTIPOINT); + trLayers_=md.createView(true,true); + + trLayers_.addTreeSelectionListener(new TreeSelectionListener() { + public void valueChanged(TreeSelectionEvent e) { + treeSelectionChanged(getSelectedGeomInTree(),true); + } + }); + JScrollPane sp=new JScrollPane(trLayers_); + sp.setPreferredSize(new Dimension(300,200)); + add(sp); + } + + /** + * Retourne les g\xE9ometries s\xE9lectionn\xE9es de l'arbre. + * @return Les g\xE9om\xE9tries, de taille = 0 si rien de selectionn\xE9. + */ + private Geometry[] getSelectedGeomInTree() { + if (trLayers_.isSelectionEmpty()) { + return null; + } + TreePath[] selpaths=trLayers_.getSelectionPaths(); + Geometry[] geoms=new Geometry[selpaths.length]; + for (int i=0; i<selpaths.length; i++) { + final CalqueGISTreeModel.LayerNode node=(CalqueGISTreeModel.LayerNode)selpaths[i].getLastPathComponent(); + final ZCalqueAffichageDonneesAbstract cq = (ZCalqueAffichageDonneesAbstract) node.getUserObject(); + geoms[i]=((ZModeleGeom)cq.modeleDonnees()).getGeomData().getGeometry(node.getIdxGeom()); + } + + return geoms; + } + + /** + * R\xE9affichage de la fenetre 2D en cas de selection d'un objet. + * @param _geoms Les g\xE9om\xE9tries s\xE9lectionn\xE9es. + * @param _zoom True si le zoom doit se faire sur les g\xE9ometries s\xE9lectionn\xE9es. + */ + private void treeSelectionChanged(final Geometry[] _geoms, final boolean _zoom) { + if (pn_==null) { + return; + } + if (_geoms == null || _geoms.length==0) { + if (cqTmp_ != null) { + cqTmp_.setVisible(false); + } + return; + } + + MdlModelGeometry mdl=new MdlModelGeometry(); + support_=mdl.getGeomData(); + + for (int i=0; i<_geoms.length; i++) { + support_.addGeometry(_geoms[i], null, null); + } + // Ajout de l'enveloppe externe pour visualisation. + Geometry g=support_.convexHull(); + if (g instanceof Polygon) + support_.addGeometry(((Polygon)g).getExteriorRing(), null, null); + else + support_.addGeometry(g, null, null); + + if (cqTmp_ == null) { + initZoom_ = pn_.getVueCalque().getViewBoite(); + cqTmp_ = new ZCalqueGeometry(mdl); + cqTmp_.setDestructible(true); + final TraceIconModel model = new TraceIconModel(TraceIcon.PLUS_DOUBLE, 4, Color.RED); + cqTmp_.setIconModel(0, model); + cqTmp_.setIconModel(1, model); + final TraceLigneModel ligne = new TraceLigneModel(TraceLigne.MIXTE, 2, Color.RED); + cqTmp_.setLineModel(0, ligne); + cqTmp_.setLineModel(1, ligne); + pn_.getVueCalque().getCalque().enPremier(cqTmp_); + pn_.getCqInfos().enPremier(); + } + cqTmp_.modele(mdl); + cqTmp_.setVisible(true); + + if (_zoom) { + BArbreCalqueModel.actionCenter(cqTmp_, pn_); + } + } + + @Override + public boolean valide() { + if (trLayers_.getSelectionCount()==0) { + setErrorText(TrResource.getS("Vous devez s\xE9lectionner au moins 1 semis")); + return false; + } + return true; + } + + /** + * Retourne le modele des g\xE9om\xE9tries supports (les g\xE9om\xE9tries s\xE9l\xE9ectionn\xE9es dans l'arbre). + * @return Le mod\xE8le. + */ + public GISDataModel getSupportCollection() { + support_.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.BATHY}, null); + support_.setAttributeIsZ(GISAttributeConstants.BATHY); + support_.postImport(0); + return support_; + } + + /** + * Fermeture du dialogue, et suppression du calque qui visualise les g\xE9om\xE9tries s\xE9lectionn\xE9es. + */ + private void close() { + if (cqTmp_!=null) { + cqTmp_.detruire(); + cqTmp_=null; + // Suppression de l'enveloppe externe. + support_.removeGeometries(new int[]{support_.getNbGeometries()-1}, null); + pn_.getVueCalque().getCalque().repaint(); + } + pn_.getVueCalque().changeRepere(this, initZoom_); + } + + @Override + public void cancel() { + close(); + super.cancel(); + } + + @Override + public boolean ok() { + close(); + return super.ok(); + } +} \ No newline at end of file Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlProjectionPanel.java ___________________________________________________________________ Added: svn:eol-style + native Modified: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2008-08-14 10:00:28 UTC (rev 3800) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlSceneEditor.java 2008-08-14 10:01:56 UTC (rev 3801) @@ -7,36 +7,37 @@ */ package org.fudaa.fudaa.modeleur; +import java.util.ArrayList; +import java.util.List; + import org.fudaa.ctulu.CtuluCommandComposite; -import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeInterface; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISDataModel; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISMultiPoint; -import org.fudaa.ctulu.gis.GISPolyligne; import org.fudaa.ctulu.gis.GISZoneCollection; -import org.fudaa.ctulu.gui.CtuluDialogPanel; +import org.fudaa.ctulu.gis.GISZoneCollectionGeometry; +import org.fudaa.ctulu.interpolation.InterpolationParameters; +import org.fudaa.ctulu.interpolation.InterpolationResultsHolderI; +import org.fudaa.ctulu.interpolation.InterpolationSupportGISAdapter; +import org.fudaa.ctulu.interpolation.InterpolationTarget; +import org.fudaa.ctulu.interpolation.InterpolationTargetGISAdapter; +import org.fudaa.ctulu.interpolation.bilinear.InterpolatorBilinear; import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; import org.fudaa.ebli.calque.ZModeleDonnees; import org.fudaa.ebli.calque.ZModeleGeom; import org.fudaa.ebli.calque.ZScene; -import org.fudaa.ebli.calque.edition.ZCalqueEditable; -import org.fudaa.ebli.calque.edition.ZCalqueMultiPointEditable; -import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; -import org.fudaa.ebli.calque.edition.ZModeleMultiPointEditable; import org.fudaa.ebli.calque.edition.ZSceneEditor; -import org.fudaa.ebli.geometrie.GrPoint; -import org.fudaa.ebli.geometrie.GrPolyligne; import org.fudaa.fudaa.commun.FudaaLib; -import org.fudaa.fudaa.commun.impl.Fudaa; -import org.fudaa.fudaa.modeleur.layer.MdlLayer2dCloud; -import org.fudaa.fudaa.modeleur.layer.MdlModel2dCloud; import org.fudaa.fudaa.modeleur.layer.MdlModel2dLine; import org.fudaa.fudaa.modeleur.layer.MdlModel2dMultiPoint; -import org.fudaa.fudaa.modeleur.layer.MdlModel2dProfile; 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.vividsolutions.jts.geom.MultiPoint; /** * L'\xE9diteur effectuant les traitements sur la scene sp\xE9cifiques au modeleur. @@ -242,4 +243,66 @@ super.getScene().clearSelection(); } } + + /** + * Projete une g\xE9om\xE9trie sur un ensemble de points d'un ou plusieurs semis. + */ + public void projectSelectedObject() { + MdlProjectionPanel pnProjection=new MdlProjectionPanel(pn_); + + if (pnProjection.afficheModaleOk(pn_.getFrame(), FudaaLib.getS("Projection sur des semis"))) { + GISDataModel mdl=pnProjection.getSupportCollection(); + InterpolationSupportGISAdapter support=new InterpolationSupportGISAdapter(mdl); + List<GISAttributeInterface> vars=new ArrayList<GISAttributeInterface>(); + vars.add(GISAttributeConstants.BATHY); + + GISZoneCollectionGeometry targetGeoms=new GISZoneCollectionGeometry(); + int[] idxGeom=getScene().getLayerSelection().getSelectedIndex(); + for (int i : idxGeom) + targetGeoms.addGeometry((Geometry)getScene().getObject(i), null, null); + + targetGeoms.setAttributes(new GISAttributeInterface[]{GISAttributeConstants.BATHY}, null); + targetGeoms.setAttributeIsZ(GISAttributeConstants.BATHY); +// targetGeoms.postImport(0); + + InterpolationTarget target=new InterpolationTargetGISAdapter(targetGeoms); + InterpolationParameters params=new InterpolationParameters(vars,target,support); + InterpolatorBilinear interp=new InterpolatorBilinear(support); + interp.interpolate(params); + InterpolationResultsHolderI res=params.getResults(); + + if (ui_.manageAnalyzeAndIsFatal(params.getAnalyze())) return; + + final CtuluCommandComposite cmp = new CtuluCommandComposite(); + + // Transfert du Z sur les objets selectionn\xE9s. + int ipt=0; + for (int i=0; i<targetGeoms.getNbGeometries(); i++) { + CoordinateSequence seq=((GISCoordinateSequenceContainerInterface)targetGeoms.getGeometry(i)).getCoordinateSequence(); + for (int idx=0; idx<seq.size(); idx++) { + seq.setOrdinate(idx, 2, res.getValuesForPt(ipt++)[0]); + } + } + targetGeoms.postImport(0); + + GISZoneCollection col=null; + int zatt=0; + + for (int i=0; i<idxGeom.length; i++) { + Object vals=targetGeoms.getValue(0,i); + GISZoneCollection colTmp=((ZModeleGeom)getScene().getLayerForId(idxGeom[i]).modeleDonnees()).getGeomData(); + if (col!=colTmp) { + col=colTmp; + zatt=col.getIndiceOf(GISAttributeConstants.BATHY); + } + int idx=getScene().sceneId2LayerId(idxGeom[i]); + if (zatt!=-1) + col.setAttributValue(zatt, idx, vals, cmp); + } + + if (mng_ != null) { + mng_.addCmd(cmp.getSimplify()); + } + } + } } Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProjectionAction.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProjectionAction.java (rev 0) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProjectionAction.java 2008-08-14 10:01:56 UTC (rev 3801) @@ -0,0 +1,89 @@ +/* + * @creation 3 juil. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.action; + +import java.awt.event.ActionEvent; + +import javax.swing.Action; + +import org.fudaa.ctulu.CtuluLib; +import org.fudaa.ctulu.gis.GISMultiPoint; +import org.fudaa.ctulu.gis.GISPolyligne; +import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZSelectionEvent; +import org.fudaa.ebli.calque.ZSelectionListener; +import org.fudaa.ebli.calque.ZScene.SceneSelectionHelper; +import org.fudaa.ebli.calque.edition.ZCalqueEditable; +import org.fudaa.ebli.calque.edition.ZSceneEditor; +import org.fudaa.ebli.commun.EbliActionSimple; +import org.fudaa.fudaa.modeleur.MdlSceneEditor; + +import com.memoire.bu.BuResource; + +/** + * Une action pour projeter une g\xE9om\xE9trie sur un ou des semis de points. + * @author Bertrand Marchand + */ +public class SceneProjectionAction extends EbliActionSimple implements ZSelectionListener { + MdlSceneEditor sceneEditor_; + + public SceneProjectionAction(MdlSceneEditor _sceneEditor) { + super(BuResource.BU.getString("Projeter sur un semis"), null, "GIS_PROJECT"); + setDefaultToolTip(CtuluLib.getS("Projeter la g\xE9om\xE9trie sur un semis")); + setSceneEditor(_sceneEditor); + sceneEditor_.getScene().addSelectionListener(this); + } + + public void actionPerformed(final ActionEvent _e) { + sceneEditor_.projectSelectedObject(); + } + + /** + * @param _editor l'editeur + */ + private void setSceneEditor(final MdlSceneEditor _sceneEditor) { + sceneEditor_ = _sceneEditor; + } + + public void updateForSelectionChanged() { + ZScene scn=sceneEditor_.getScene(); + SceneSelectionHelper hlp=sceneEditor_.getScene().getSelectionHelper(); + int idGeom=-1; + + boolean b=true; + // Si la selection n'est pas null et atomique + b=b && !scn.isSelectionEmpty(); + // Si la selection est sur le m\xEAme objet. +// b=b && (idGeom=hlp.getUniqueSelectedIdx())!=-1; +// // Si le nombre d'atomiques est de 2 cons\xE9cutifs sur une g\xE9om\xE9trie de type polyligne. +// if (b && scn.getObject(idGeom) instanceof GISPolyligne) { +// b=b && hlp.getNbAtomicSelected()==2; +// b=b && Math.abs(hlp.getUniqueAtomicSelection().getMinIndex()-hlp.getUniqueAtomicSelection().getMaxIndex())==1; +// if (b) putValue(Action.NAME, BuResource.BU.getString("Scinder la polyligne")); +// } +// // Si ou est sur un multipoint +// else { +// b=b && (scn.getObject(idGeom) instanceof GISMultiPoint); +// if (b) putValue(Action.NAME, BuResource.BU.getString("Scinder le multipoint")); +// } +// if (!b) putValue(Action.NAME, BuResource.BU.getString("Scinder")); + + setEnabled(b); + } + + public String getEnableCondition() { + return CtuluLib.getS("S\xE9lectionner une g\xE9om\xE9trie ou des sommets"); + } + + /* (non-Javadoc) + * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent) + */ + public void selectionChanged(ZSelectionEvent _evt) { + updateForSelectionChanged(); + } +} Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/action/SceneProjectionAction.java ___________________________________________________________________ Added: svn:eol-style + native Added: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModelGeometry.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModelGeometry.java (rev 0) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModelGeometry.java 2008-08-14 10:01:56 UTC (rev 3801) @@ -0,0 +1,131 @@ +/* + * @creation 20 janv. 08 + * @modification $Date: 2008/02/21 19:41:56 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.fudaa.modeleur.layer; + +import org.fudaa.ctulu.CtuluCommandContainer; +import org.fudaa.ctulu.gis.GISAttribute; +import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeDouble; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISMultiPoint; +import org.fudaa.ctulu.gis.GISZoneCollection; +import org.fudaa.ctulu.gis.GISZoneCollectionGeometry; +import org.fudaa.ctulu.gis.GISZoneCollectionLigneBrisee; +import org.fudaa.ctulu.gis.GISZoneListener; +import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; +import org.fudaa.ebli.calque.ZModeleGeometry; +import org.fudaa.ebli.calque.edition.ZModeleLigneBriseeEditable; +import org.fudaa.ebli.geometrie.GrBoite; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.palette.BPaletteInfo.InfoData; +import org.fudaa.fudaa.modeleur.MdlResource; +import org.fudaa.fudaa.sig.FSigResource; + +import com.memoire.bu.BuTable; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LineString; + +/** + * Un mod\xE8le contenant des g\xE9om\xE9tries de tous types, pour repr\xE9sentation unique. + * @author Bertrand Marchand + * @version $Id: MdlModel2dLevel.java,v 1.1.2.6 2008/02/21 19:41:56 bmarchan Exp $ + */ +public class MdlModelGeometry implements ZModeleGeometry { + GISZoneCollectionGeometry geometries_; + + /** + * Constructeur + */ + public MdlModelGeometry() { + geometries_=new GISZoneCollectionGeometry(); + } + + public void getDomaineForGeometry(int _idxGeom, GrBoite _target) { + if (geometries_ == null || geometries_.getNumGeometries() == 0) { + return; + } + final Geometry g = geometries_.getGeometry(_idxGeom); + final Envelope e = g.getEnvelopeInternal(); + if (_target.o_ == null) { + _target.o_ = new GrPoint(); + } + if (_target.e_ == null) { + _target.e_ = new GrPoint(); + } + if (e != null && !e.isNull()) { + _target.o_.x_ = e.getMinX(); + _target.o_.y_ = e.getMinY(); + _target.e_.x_ = e.getMaxX(); + _target.e_.y_ = e.getMaxY(); + } + } + + public int getNbPointForGeometry(int _idxGeom) { + if (geometries_ == null) { + return 0; + } + final Geometry gi = geometries_.getGeometry(_idxGeom); + return gi.getNumPoints(); + } + + public final boolean isGeometryReliee(final int _idxGeom) { + Geometry g=getGeomData().getGeometry(_idxGeom); + return (g instanceof LineString); + } + + public final boolean isGeometryFermee(final int _idxGeom) { + Geometry g=getGeomData().getGeometry(_idxGeom); + return (g instanceof LineString && ((LineString)g).isClosed()); + } + + public boolean point(GrPoint _pt, int _idxGeom, int _pointIdx) { + final CoordinateSequence g=((GISCoordinateSequenceContainerInterface)geometries_.getGeometry(_idxGeom)).getCoordinateSequence(); + _pt.x_ = g.getX(_pointIdx); + _pt.y_ = g.getY(_pointIdx); + return true; + } + + public GISZoneCollection getGeomData() { + return geometries_; + } + + public void prepareExport() { + geometries_.prepareExport(); + } + + public BuTable createValuesTable(ZCalqueAffichageDonneesInterface _layer) { + return null; + } + + public void fillWithInfo(InfoData _d, ZCalqueAffichageDonneesInterface _layer) {} + + public GrBoite getDomaine() { + if (geometries_ == null || geometries_.getNumGeometries() == 0) { + return null; + } + final Envelope e = geometries_.getEnvelopeInternal(); + if (e == null) { + return null; + } + return new GrBoite(new GrPoint(e.getMinX(), e.getMinY(), 0), new GrPoint(e.getMaxX(), e.getMaxY(), 0)); + } + + public final int getNombre() { + return geometries_ == null ? 0 : geometries_.getNumGeometries(); + } + + public final Object getObject(final int _ind) { + return geometries_ == null ? null : geometries_.getGeometry(_ind); + } + + public boolean isValuesTableAvailable() { + return false; + } +} Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/layer/MdlModelGeometry.java ___________________________________________________________________ Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |