From: <bma...@us...> - 2009-02-04 17:31:37
|
Revision: 4440 http://fudaa.svn.sourceforge.net/fudaa/?rev=4440&view=rev Author: bmarchan Date: 2009-02-04 17:31:34 +0000 (Wed, 04 Feb 2009) Log Message: ----------- Tache #156 : Ajout d'un sommet a l'extr?\195?\169mit?\195?\169 d'un polyligne Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClickInteraction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClikInteractionListener.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarLimniSaisie.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarOuvrageSaisie.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacSourceSaisie.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionGeometry.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -116,29 +116,31 @@ } /** - * Ajoute un sommet a une g\xE9om\xE9trie. + * Ajoute un sommet a une g\xE9om\xE9trie. Les attributs atomiques sont ajout\xE9s au sommet ins\xE9r\xE9, par interpolation. * @param _idxGeom L'index de la g\xE9om\xE9trie - * @param _idxBefore L'indice du point juste avant. + * @param _idxBefore L'indice du point juste avant. Si _idxBefore est \xE9gal \xE0 -1, le point est ajout\xE9 en d\xE9but de g\xE9om\xE9trie * @param _x La coordonn\xE9e X du sommet ajout\xE9. - * @param _y LA coordonn\xE9e Y du sommet ajout\xE9. + * @param _y La coordonn\xE9e Y du sommet ajout\xE9. * @param _cmd Le manager de commandes. */ public void addAtomic(final int _idxGeom, final int _idxBefore, final double _x, final double _y, final CtuluCommandContainer _cmd) { + if (!isGeomModifiable_) { return; } Geometry geom = (Geometry)super.geometry_.getValueAt(_idxGeom); final Coordinate[] oldcs = geom.getCoordinates(); final int initSize = oldcs.length; - if(_idxBefore<0||_idxBefore>=initSize) + if(_idxBefore<-1||_idxBefore>=initSize) throw new IllegalArgumentException("L'index du point \xE0 ajouter doit appartenir \xE0 la g\xE9om\xE9trie."); final Coordinate[] cs = new Coordinate[initSize + 1]; int idx = 0; - for (int i = 0; i < initSize; i++) { - cs[idx++] = (Coordinate)oldcs[i].clone(); + for (int i = -1; i < initSize; i++) { + if (i>=0) + cs[idx++] = (Coordinate)oldcs[i].clone(); if (i == _idxBefore) { - cs[idx++] = new Coordinate(_x, _y, oldcs[i].z); + cs[idx++] = new Coordinate(_x, _y, 0.); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISZoneCollectionMultiPoint.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -82,7 +82,7 @@ newIdxOldIdx.put(idx,i); // Pour les attributs cs[idx++] = (Coordinate)oldcs[i].clone(); if (i == _idxBefore) { - cs[idx++] = new Coordinate(_x, _y, oldcs[i].z); + cs[idx++] = new Coordinate(_x, _y, 0); } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClickInteraction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClickInteraction.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClickInteraction.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -12,14 +12,20 @@ import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import org.fudaa.ebli.geometrie.GrPoint; + /** * @author Fred Deniger * @version $Id: ZCalqueClickInteraction.java,v 1.10.8.1 2008-03-27 15:26:28 bmarchan Exp $ */ public class ZCalqueClickInteraction extends BCalqueInteraction implements MouseListener, - MouseMotionListener { + MouseMotionListener, ZCatchListener { ZCalqueClikInteractionListener listener_; + /** Le point d'accrochage, ou null si pas de point d'accrochage */ + GrPoint ptAccroch_=null; + /** Le point interm\xE9diaire */ + GrPoint ptTmp_=new GrPoint(); public ZCalqueClickInteraction() { setName("cqInteractClicked"); @@ -48,7 +54,14 @@ public void mouseClicked(final MouseEvent _e){ if (isOkLeftEvent(_e) && (listener_ != null)) { - listener_.pointClicked(_e.getX(), _e.getY()); + if (ptAccroch_==null) { + ptTmp_.setCoordonnees(_e.getX(), _e.getY(),0); + ptTmp_.autoApplique(getVersReel()); + } + else { + ptTmp_.setCoordonnees(ptAccroch_.x_, ptAccroch_.y_, ptAccroch_.z_); + } + listener_.pointClicked(ptTmp_); } } @@ -67,4 +80,11 @@ public final void setListener(final ZCalqueClikInteractionListener _listener){ listener_ = _listener; } + + public void catchChanged(ZCatchEvent _evt) { + if (_evt.type==ZCatchEvent.UNCAUGHT) + ptAccroch_=null; + else + ptAccroch_=_evt.selection.getScene().getVertex(_evt.idxGeom, _evt.idxVertex); + } } \ No newline at end of file Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClikInteractionListener.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClikInteractionListener.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/ZCalqueClikInteractionListener.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -7,13 +7,20 @@ */ package org.fudaa.ebli.calque; +import org.fudaa.ebli.geometrie.GrPoint; + /** + * Un listener du calque {@link ZCalqueClickInteraction}. * @author Fred Deniger * @version $Id: ZCalqueClikInteractionListener.java,v 1.4 2006-04-12 15:27:10 deniger Exp $ */ public interface ZCalqueClikInteractionListener { - void pointClicked(int _xEcran,int _yEcran); + /** + * Le point 3D saisi (la coordonn\xE9e Z peut provenir d'un sommet accroch\xE9), en coordonn\xE9es r\xE9elles. + * @param _ptReel Le point saisi. + */ + void pointClicked(GrPoint _ptReel); } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/action/CalqueGISEditionAction.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -17,6 +17,8 @@ import org.fudaa.ebli.calque.BCalqueInteraction; import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZSelectionEvent; +import org.fudaa.ebli.calque.ZSelectionListener; import org.fudaa.ebli.calque.edition.BPaletteEdition; import org.fudaa.ebli.calque.edition.ZCalqueEditable; import org.fudaa.ebli.calque.edition.ZCalqueEditionInteraction; @@ -30,7 +32,7 @@ * @author Fred Deniger * @version $Id: CalqueGISEditionAction.java,v 1.6.6.2 2008-05-13 12:10:47 emartin Exp $ */ -public class CalqueGISEditionAction extends EbliActionPaletteTreeModel implements PropertyChangeListener { +public class CalqueGISEditionAction extends EbliActionPaletteTreeModel implements PropertyChangeListener, ZSelectionListener { private ZEditorDefault editor_; private ZScene scene_; @@ -61,6 +63,7 @@ setEnabled(isTargetValid(null)); setResizable(true); target_ = (target_ instanceof ZCalqueEditable)?target_:null; + _scene.addSelectionListener(this); } protected boolean isTargetValid(final Object _o) { @@ -167,4 +170,13 @@ if(editor_.getPanel().getController().getCqSelectionI()!=null) editor_.getPanel().getController().getCqSelectionI().setGele(false); } + + /* (non-Javadoc) + * @see org.fudaa.ebli.calque.ZSelectionListener#selectionChanged(org.fudaa.ebli.calque.ZSelectionEvent) + */ + public void selectionChanged(ZSelectionEvent _evt) { + if (editor_!=null) { + editor_.updatePaletteWhenSelectionChanged(); + } + } } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/BPaletteEdition.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -301,7 +301,7 @@ _target.add(null); bt = new BuToolToggleButton(); bt.setActionCommand("ATOME_ADD"); - bt.setToolTipText(EbliLib.getS("Ajouter un sommet (la g\xE9om\xE9trie doit \xEAtre s\xE9lectionn\xE9e)")); + bt.setToolTipText(EbliLib.getS("Ajouter un sommet (une g\xE9om\xE9trie, un sommet extr\xE9mit\xE9 ou 2 sommets cons\xE9cutifs doivent \xEAtre s\xE9lectionn\xE9s)")); bt.setIcon(EbliResource.EBLI.getToolIcon("node-add")); decoreButton(bt); group.add(bt); Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueEditable.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -14,6 +14,7 @@ import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; import org.fudaa.ebli.geometrie.GrObjet; +import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.ebli.trace.TraceIcon; /** @@ -103,13 +104,12 @@ * Ajoute un sommet a l'objet selectionn\xE9. Si le nombre d'objets selectionn\xE9s est diff\xE9rent de 1, * le point n'est pas ajout\xE9. * - * @param _xEcran le x ecran de l'atome a ajouter - * @param _yEcran le y ecran de l'atome a ajouter + * @param _ptReel le point 3D r\xE9el de l'atome a ajouter * @param _cmd le receveur de command * @param _ui l'interface utilisateur * @return true si atome ajoute */ - boolean addAtome(int _xEcran,int _yEcran,CtuluCommandContainer _cmd, CtuluUI _ui); + boolean addAtome(GrPoint _ptReel, CtuluCommandContainer _cmd, CtuluUI _ui); /** * @return true si le mode atomique est autorise */ Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueLigneBriseeEditable.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -15,7 +15,6 @@ import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluUI; -import org.fudaa.ctulu.gis.GISAttributeConstants; import org.fudaa.ebli.calque.ZCalqueLigneBrisee; import org.fudaa.ebli.calque.ZModeleLigneBrisee; import org.fudaa.ebli.calque.dessin.DeForme; @@ -53,10 +52,6 @@ return editor_ == null ? EbliLib.getS("Edition impossible") : editor_.edit(); } - private void addPoint(final int _ligneIdx, final int _idxBefore, final double _x, final double _y, final CtuluCommandContainer _cmd) { - getModelePoly().addPoint(_ligneIdx, _idxBefore, _x, _y, _cmd); - } - /** * Scinde en 2 une polyligne dont deux sommets cons\xE9cutifs sont s\xE9lectionn\xE9. Les attributs sont copi\xE9s. * @param _cmd La pile de commandes. @@ -162,45 +157,93 @@ } } - public boolean addAtome(final int _xEcran, final int _yEcran, final CtuluCommandContainer _cmd, final CtuluUI _ui) { - if (isAtomicMode() || getNbSelected()!=1) return false; + /** + * Ajoute un sommet a l'objet selectionn\xE9. Le sommet peut \xEAtre ajout\xE9 en bout de ligne, si un point extremit\xE9 est selectionn\xE9, + * ou bien inser\xE9 si 2 sommets s\xE9lectionn\xE9s. + * + * Si le nombre d'objets selectionn\xE9s est diff\xE9rent de 1, le point n'est pas ajout\xE9. + * + * @param _ptReel le point 3D r\xE9el de l'atome a ajouter + * @param _cmd le receveur de command + * @param _ui l'interface utilisateur + * @return true si atome ajoute + */ + public boolean addAtome(final GrPoint _ptReel, final CtuluCommandContainer _cmd, final CtuluUI _ui) { + if (getNbSelected()!=1) return false; +// if (isAtomicMode() || getNbSelected()!=1) return false; - final GrMorphisme versEcran = getVersEcran(); - final GrMorphisme versReel = getVersReel(); - final GrBoite bClip = getDomaine(); - bClip.autoApplique(versEcran); - final int tolerance = 5; - // Point \xE0 projeter - final GrPoint pt = new GrPoint(_xEcran, _yEcran, 0); - if ((!bClip.contientXY(pt)) && (bClip.distanceXY(pt) > tolerance)) { - return false; + if (isAtomicMode()) { + int idxGeom=selectionMulti_.getIdxSelected()[0]; + int idxBefore; + + if (selectionMulti_.getNbSelectedItem()==1) { + // Cas d'un polygone => Interdit d'ajouter un point en fin de g\xE9om\xE9trie. + if (getModelePoly().isGeometryFermee(idxGeom)) return false; + + if (selectionMulti_.getSelection(idxGeom).getMinIndex()==0) + idxBefore=-1; + else if (selectionMulti_.getSelection(idxGeom).getMaxIndex()==getModelePoly().getGeomData().getGeometry(idxGeom).getNumPoints()-1) + idxBefore=selectionMulti_.getSelection(idxGeom).getMaxIndex(); + else + return false; + } + else if (selectionMulti_.getNbSelectedItem()==2) { + if (selectionMulti_.getSelection(idxGeom).getMaxIndex()==selectionMulti_.getSelection(idxGeom).getMinIndex()+1) + idxBefore=selectionMulti_.getSelection(idxGeom).getMinIndex(); + else + return false; + } + else { + return false; + } + + getModelePoly().addPoint(idxGeom,idxBefore, _ptReel.x_, _ptReel.y_, _ptReel.z_, _cmd); + return true; } - final double distanceReel = GrMorphisme.convertDistanceXY(versReel, tolerance); - final GrPoint ptToTest = pt.applique(versReel); - final GrSegment seg = new GrSegment(new GrPoint(), new GrPoint()); - final GrBoite bPoly = new GrBoite(new GrPoint(), new GrPoint()); - int i=selection_.getMinIndex(); - modele_.getDomaineForGeometry(i, bPoly); - if (bPoly.contientXY(ptToTest)||bPoly.distanceXY(ptToTest)<distanceReel) { - for (int j=modele_.getNbPointForGeometry(i)-1; j>0; j--) { - modele_.point(seg.e_, i, j); - modele_.point(seg.o_, i, j-1); - if (seg.distanceXY(ptToTest)<distanceReel) { - addPoint(i, j-1, ptToTest.x_, ptToTest.y_, _cmd); - return true; - } + // En mode non atomique, le point ajout\xE9 est obligatoirement sur la polyligne. + else { + final GrMorphisme versEcran=getVersEcran(); + final GrMorphisme versReel=getVersReel(); + final GrBoite bClip=getDomaine(); + bClip.autoApplique(versEcran); + final int tolerance=5; + // Point \xE0 projeter + // final GrPoint pt = new GrPoint(_xEcran, _yEcran, 0); + final GrPoint ptEcran=_ptReel.applique(versEcran); + if ((!bClip.contientXY(ptEcran))&&(bClip.distanceXY(ptEcran)>tolerance)) { + return false; } - if (modele_.isGeometryFermee(i)) { - modele_.point(seg.e_, i, 0); - modele_.point(seg.o_, i, modele_.getNbPointForGeometry(i)-1); - if (seg.distanceXY(ptToTest)<distanceReel) { - addPoint(i, modele_.getNbPointForGeometry(i)-1, ptToTest.x_, ptToTest.y_, _cmd); - return true; + + final double distanceReel=GrMorphisme.convertDistanceXY(versReel, tolerance); + // final GrPoint _ptReel = pt.applique(versReel); + final GrSegment seg=new GrSegment(new GrPoint(), new GrPoint()); + final GrBoite bPoly=new GrBoite(new GrPoint(), new GrPoint()); + + int i=selection_.getMinIndex(); + modele_.getDomaineForGeometry(i, bPoly); + if (bPoly.contientXY(_ptReel)||bPoly.distanceXY(_ptReel)<distanceReel) { + for (int j=modele_.getNbPointForGeometry(i)-1; j>0; j--) { + modele_.point(seg.e_, i, j); + modele_.point(seg.o_, i, j-1); + if (seg.distanceXY(_ptReel)<distanceReel) { + GrPoint ptOnSeg=seg.pointPlusProcheXY(_ptReel); + getModelePoly().addPoint(i, j-1, ptOnSeg.x_, ptOnSeg.y_, null, _cmd); + return true; + } } + if (modele_.isGeometryFermee(i)) { + modele_.point(seg.e_, i, 0); + modele_.point(seg.o_, i, modele_.getNbPointForGeometry(i)-1); + if (seg.distanceXY(_ptReel)<distanceReel) { + GrPoint ptOnSeg=seg.pointPlusProcheXY(_ptReel); + getModelePoly().addPoint(i, modele_.getNbPointForGeometry(i)-1, ptOnSeg.x_, ptOnSeg.y_, null, _cmd); + return true; + } + } } + return false; } - return false; } public boolean addForme(final GrObjet _o, final int _deforme, final CtuluCommandContainer _cmd, final CtuluUI _ui, Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalqueMultiPointEditable.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -15,6 +15,7 @@ import org.fudaa.ctulu.CtuluCommandContainer; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluUI; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; import org.fudaa.ctulu.gis.GISGeometryFactory; import org.fudaa.ctulu.gis.GISMultiPoint; @@ -88,19 +89,17 @@ // return getModelePoly().joinGeometries(idxLines, idxSels, _cmd)!=-1; // } - public boolean addAtome(final int _xEcran, final int _yEcran, final CtuluCommandContainer _cmd, final CtuluUI _ui) { - if (isAtomicMode() || getNbSelected()!=1) return false; + public boolean addAtome(final GrPoint _ptReel, final CtuluCommandContainer _cmd, final CtuluUI _ui) { + if (getNbSelected()!=1) return false; - final GrMorphisme versEcran = getVersEcran(); - final GrMorphisme versReel = getVersReel(); - - final GrBoite bClip = getDomaineOnSelected(); - bClip.autoApplique(versEcran); - final GrPoint pt = new GrPoint(_xEcran, _yEcran, 0); - final GrPoint ptToTest = pt.applique(versReel); - - int idx=selection_.getMinIndex(); - ((ZModeleMultiPointEditable)modele_).addAtomic(idx,0, ptToTest.x_, ptToTest.y_, _cmd); + int idx; + if (isAtomicMode()) + idx=selectionMulti_.getIdxSelected()[0]; + else + idx=selection_.getMinIndex(); + + int idxBefore=modeleDonnees().getGeomData().getGeometry(idx).getNumGeometries()-1; + ((ZModeleMultiPointEditable)modele_).addAtomic(idx,idxBefore, _ptReel.x_, _ptReel.y_, _ptReel.z_, _cmd); return true; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZCalquePointEditable.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -21,7 +21,6 @@ import org.fudaa.ctulu.CtuluLibArray; import org.fudaa.ctulu.CtuluUI; import org.fudaa.ctulu.gis.GISAttributeInterface; -import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISZoneCollection; import org.fudaa.ebli.calque.ZCalquePoint; @@ -105,7 +104,7 @@ editor_ = _editor; } - public boolean addAtome(final int _xEcran, final int _yEcran, final CtuluCommandContainer _cmd, final CtuluUI _ui) { + public boolean addAtome(final GrPoint _ptReel, final CtuluCommandContainer _cmd, final CtuluUI _ui) { return false; } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZEditorDefault.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -24,12 +24,15 @@ import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import org.fudaa.ctulu.CtuluCommandComposite; import org.fudaa.ctulu.CtuluCommandManager; import org.fudaa.ctulu.CtuluCommandPersitant; import org.fudaa.ctulu.CtuluLib; import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluUI; +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; import org.fudaa.ctulu.gis.GISGuiBuilder; +import org.fudaa.ctulu.gis.GISMultiPoint; import org.fudaa.ctulu.gis.GISZoneCollectionPoint; import org.fudaa.ctulu.gui.CtuluDialogPanel; import org.fudaa.ctulu.gui.CtuluLibSwing; @@ -41,6 +44,7 @@ import org.fudaa.ebli.calque.ZEbliCalquesPanel; import org.fudaa.ebli.calque.ZModeleGeometry; import org.fudaa.ebli.calque.ZScene; +import org.fudaa.ebli.calque.ZScene.SceneSelectionHelper; import org.fudaa.ebli.calque.dessin.DeForme; import org.fudaa.ebli.commun.EbliActionInterface; import org.fudaa.ebli.commun.EbliActionSimple; @@ -50,6 +54,7 @@ import org.fudaa.ebli.geometrie.GrPoint; import org.fudaa.ebli.geometrie.GrPolygone; import org.fudaa.ebli.geometrie.GrPolyligne; +import org.fudaa.ebli.ressource.EbliResource; import org.fudaa.ebli.trace.TraceIcon; import com.memoire.bu.BuDesktop; @@ -80,11 +85,16 @@ class NodeAddListener implements ZCalqueClikInteractionListener { - public void pointClicked(final int _xEcran, final int _yEcran) { + public void pointClicked(GrPoint _ptReel) { if (getSupport().canUseAtomicMode()) { int idGeom=getSupport().getSelectionHelper().getUniqueSelectedIdx(); - if(idGeom!=-1) - ((ZCalqueEditable)getSupport().getLayerForId(idGeom)).addAtome(_xEcran, _yEcran, mng_, null); + if(idGeom!=-1) { + CtuluCommandComposite cmp=new CtuluCommandComposite(EbliLib.getS("Ajout d'un sommet")); + if (((ZCalqueEditable)getSupport().getLayerForId(idGeom)).addAtome(_ptReel, cmp, null)) { + if (mng_!=null) + mng_.addCmd(cmp.getSimplify()); + } + } } } } @@ -344,7 +354,8 @@ palette_.setEnable("GLOBAL_ADD_SEMIS", target_.canAddForme(DeForme.MULTI_POINT) && isModifiable); } -// updatePaletteState(); + + updatePaletteWhenSelectionChanged(); palette_.checkEnableAndCheckBt(); final AbstractButton bt = palette_.getSelectedButton(); if (bt == null) { @@ -353,7 +364,40 @@ changeState(bt.getActionCommand()); } } + + public void updatePaletteWhenSelectionChanged() { + if (palette_==null) return; + + ZScene scn=getSupport(); + SceneSelectionHelper hlp=scn.getSelectionHelper(); + int idGeom=-1; + boolean b=true; + // 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.isAtomicMode()) { + if (scn.getObject(idGeom) instanceof GISCoordinateSequenceContainerInterface) { + GISCoordinateSequenceContainerInterface geom=(GISCoordinateSequenceContainerInterface)scn.getObject(idGeom); + if (!(geom instanceof GISMultiPoint)) { + if (hlp.getNbAtomicSelected()==1) { + b=b + &&(hlp.getUniqueAtomicSelection().getMinIndex()==0||hlp.getUniqueAtomicSelection().getMaxIndex()+1==geom + .getCoordinateSequence().size()); + } + else if (hlp.getNbAtomicSelected()==2) { + b=b&&Math.abs(hlp.getUniqueAtomicSelection().getMinIndex()-hlp.getUniqueAtomicSelection().getMaxIndex())==1; + } + else { + b=false; + } + } + } + } + + palette_.setEnable("ATOME_ADD", b); + } + protected boolean changeState(final String _s) { // Pas de changement: le cas null,null et meme etat if (_s == state_ || (_s != null && _s.equals(state_))) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleLigneBriseeEditable.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -27,6 +27,7 @@ import org.fudaa.ctulu.CtuluListSelectionInterface; import org.fudaa.ctulu.CtuluUI; import org.fudaa.ctulu.gis.GISAttributeConstants; +import org.fudaa.ctulu.gis.GISAttributeDouble; import org.fudaa.ctulu.gis.GISAttributeInterface; import org.fudaa.ctulu.gis.GISAttributeModel; import org.fudaa.ctulu.gis.GISAttributeModelDoubleArray; @@ -271,20 +272,35 @@ CtuluLibString.DEUX); } - public void addPoint(final int _ligneIdx,final int _idxBefore,final double _x,final double _y,final CtuluCommandContainer _cmd){ + /** + * Ajoute un sommet 3D \xE0 une g\xE9om\xE9trie. + * @param _ligneIdx L'indice de la g\xE9om\xE9trie + * @param _idxBefore L'indice de sommet pr\xE9c\xE9dent pour l'insertion. Peut \xEAtre \xE9gal \xE0 -1. + * @param _x La coordonn\xE9e X du sommet \xE0 inserer + * @param _y La coordonn\xE9e Y du sommet \xE0 inserer + * @param _z La coordonn\xE9e Z du sommet \xE0 inserer. Peut \xEAtre null. Dans ce cas, le z est interpol\xE9 depuis les autres valeurs. + * @param _cmd Le container de commande. + */ + public void addPoint(final int _ligneIdx,final int _idxBefore,final double _x,final double _y,final Double _z,final CtuluCommandContainer _cmd){ if (geometries_ == null) { return; } - final CoordinateSequence g = ((LineString) geometries_.getGeometry(_ligneIdx)) - .getCoordinateSequence(); + + CtuluCommandComposite cmp=new CtuluCommandComposite(); + // Modification de l'\xE9tat de la g\xE9om\xE9trie - setGeomModif(_ligneIdx, _cmd); - // Cr\xE9ation du segment d\xE9fini par les deux point de la forme - // Construction du point projet\xE9 grace \xE0 'pointPlusProche' - GrPoint point = (new GrSegment(new GrPoint(g.getX(_idxBefore), g.getY(_idxBefore), 0), - new GrPoint(g.getX(_idxBefore + 1), g.getY(_idxBefore + 1), 0))) - .pointPlusProche(new GrPoint(_x, _y, 0)); - geometries_.addAtomic(_ligneIdx, _idxBefore, point.x_, point.y_, _cmd); + setGeomModif(_ligneIdx, cmp); + geometries_.addAtomic(_ligneIdx, _idxBefore, _x, _y, cmp); + + // Mise a jour du Z si necessaire. + GISAttributeInterface attZ=geometries_.getAttributeIsZ(); + if (_z!=null && attZ!=null && attZ.isAtomicValue()) { + GISAttributeModel md=(GISAttributeModel)geometries_.getModel(attZ).getObjectValueAt(_ligneIdx); + md.setObject(_idxBefore+1, _z, cmp); + } + + if (_cmd!=null) + _cmd.addCmd(cmp.getSimplify()); } /** Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ebli/src/org/fudaa/ebli/calque/edition/ZModeleMultiPointEditable.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -333,18 +333,32 @@ } /** - * Ajoute un sommet X,Y \xE0 la g\xE9om\xE9trie donn\xE9e.<p> + * Ajoute un sommet X,Y,Z \xE0 la g\xE9om\xE9trie donn\xE9e.<p> * <b>ATTENTION</b> : Les valeurs des attributs pour ce sommet sont d\xE9finies par d\xE9faut. * @param _idxGeom La g\xE9om\xE9trie modifi\xE9e. * @param _idxBefore Le sommet qui sera le pr\xE9cedent de celui ajout\xE9. * @param _x La coordonn\xE9e X du point. * @param _y La coordonn\xE9e Y du point. + * @param _z La coordonn\xE9e Z du point. * @param _cmd Le manager de commandes. */ - public void addAtomic(final int _idxGeom,final int _idxBefore,final double _x,final double _y,final CtuluCommandContainer _cmd){ + public void addAtomic(final int _idxGeom,final int _idxBefore,final double _x,final double _y, final double _z,final CtuluCommandContainer _cmd){ if (geometries_ == null) return; + + CtuluCommandComposite cmp=new CtuluCommandComposite(); + setGeomModif(_idxGeom, _cmd); // Modification de l'\xE9tat de la g\xE9om\xE9trie geometries_.addAtomic(_idxGeom, _idxBefore, _x, _y, _cmd); + + // Mise a jour du Z si necessaire. + GISAttributeInterface attZ=geometries_.getAttributeIsZ(); + if (attZ!=null && attZ.isAtomicValue()) { + GISAttributeModel md=(GISAttributeModel)geometries_.getModel(attZ).getObjectValueAt(_idxGeom); + md.setObject(_idxBefore+1, _z, cmp); + } + + if (_cmd!=null) + _cmd.addCmd(cmp.getSimplify()); } protected GISZoneCollectionMultiPoint createCollection(){ Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlEditionManager.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -192,8 +192,8 @@ palette_.setEnable("GLOBAL_ADD_ELLIPSE", target_.canAddForme(DeForme.ELLIPSE) && isModifiable); palette_.setEnable("GLOBAL_ADD_POLYGONE", target_.canAddForme(DeForme.POLYGONE) && isModifiable); palette_.setEnable("GLOBAL_ADD_SEMIS", target_.canAddForme(DeForme.MULTI_POINT) && isModifiable); - } + updatePaletteWhenSelectionChanged(); palette_.checkEnableAndCheckBt(); final AbstractButton bt = palette_.getSelectedButton(); if (bt == null) { @@ -202,5 +202,4 @@ changeState(bt.getActionCommand()); } } - } Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigImageWizardStepCalage.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -30,7 +30,6 @@ import org.fudaa.ctulu.image.RasterDataInterface; import org.fudaa.ebli.calque.BVueCalque; -import org.fudaa.ebli.calque.ZCalqueAffichageDonneesInterface; import org.fudaa.ebli.calque.ZCalqueClickInteraction; import org.fudaa.ebli.calque.ZCalqueClikInteractionListener; import org.fudaa.ebli.calque.ZCalqueImageRaster; @@ -94,8 +93,8 @@ calqueClickInteraction_ = new ZCalqueClickInteraction(); calqueClickInteraction_.setListener(new ZCalqueClikInteractionListener() { - public void pointClicked(final int _xEcran, final int _yEcran) { - mouseClickedOnReal(_xEcran, _yEcran); + public void pointClicked(final GrPoint _ptReel) { + mouseClickedOnReal(_ptReel); } @@ -201,19 +200,11 @@ return FSigLib.getS("G\xE9or\xE9f\xE9rencer l'image"); } - GrPoint reel_; - - public void pointClicked(final int _xEcran, final int _yEcran) { + public void pointClicked(final GrPoint _ptReel) { if (click_.isGele()) { return; } - if (reel_ == null) { - reel_ = new GrPoint(); - } - reel_.setCoordonnees(_xEcran, _yEcran, 0); - reel_.autoApplique(image_.getVersReel()); - control_.ptClickedInImg((int) reel_.x_, (int) reel_.y_); - + control_.ptClickedInImg((int) _ptReel.x_, (int) _ptReel.y_); } public void restaurer() { @@ -243,13 +234,8 @@ // cqDest_.setCalqueInteractionActif(calqueClickInteraction_); } - public void mouseClickedOnReal(final int _x, final int _y) { - if (reel_ == null) { - reel_ = new GrPoint(); - } - reel_.setCoordonnees(_x, _y, 0); - reel_.autoApplique(cqDest_.getVueCalque().getVersReel()); - control_.ptClickedInReel(reel_.x_, reel_.y_); + public void mouseClickedOnReal(final GrPoint _ptReel) { + control_.ptClickedInReel(_ptReel.x_, _ptReel.y_); } public void setRasterData(final RasterDataInterface _data) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarLimniSaisie.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarLimniSaisie.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarLimniSaisie.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -7,8 +7,6 @@ */ package org.fudaa.fudaa.tr.rubar; -import com.vividsolutions.jts.geom.Coordinate; - import org.fudaa.ctulu.CtuluLibString; import org.fudaa.ebli.calque.ZCalquePoint; @@ -32,14 +30,10 @@ super(_pn, _layer); } - GrPoint pt_ = new GrPoint(); - Coordinate m_ = new Coordinate(); - public void pointClicked(final int _xEcran,final int _yEcran){ - pt_.setCoordonnees(_xEcran, _yEcran, 0); - pt_.autoApplique(layer_.getVersReel()); + public void pointClicked(final GrPoint _ptReel){ final TrRubarLimniModel model = (TrRubarLimniModel) layer_.modeleDonnees(); - final int idxToAdd = model.mng_.getEltContaining(pt_.x_, pt_.y_); + final int idxToAdd = model.mng_.getEltContaining(_ptReel.x_, _ptReel.y_); if (idxToAdd < 0) { super.errMessage(TrResource.getS("Le point n'appartient pas \xE0 un \xE9l\xE9ment")); return; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarOuvrageSaisie.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarOuvrageSaisie.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/rubar/TrRubarOuvrageSaisie.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -166,20 +166,24 @@ } } - public void pointClicked(final int _xEcran, final int _yEcran) { + public void pointClicked(final GrPoint _ptReel) { + _ptReel.autoApplique(layer_.getVersEcran()); + final int xEcran=(int)_ptReel.x_; + final int yEcran=(int)_ptReel.y_; + boolean ok = false; switch (step_) { case 0: - ok = pointClickedElt1(_xEcran, _yEcran); + ok = pointClickedElt1(xEcran, yEcran); break; case 1: - ok = pointClickedArete1(_xEcran, _yEcran); + ok = pointClickedArete1(xEcran, yEcran); break; case 2: - ok = pointClickedElt2(_xEcran, _yEcran); + ok = pointClickedElt2(xEcran, yEcran); break; case 3: - ok = pointClickedArete2(_xEcran, _yEcran); + ok = pointClickedArete2(xEcran, yEcran); break; default: Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacSourceSaisie.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacSourceSaisie.java 2009-02-04 12:21:32 UTC (rev 4439) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/tr/telemac/TrTelemacSourceSaisie.java 2009-02-04 17:31:34 UTC (rev 4440) @@ -46,13 +46,11 @@ add(bt_); } - public void pointClicked(final int _xEcran,final int _yEcran){ + public void pointClicked(final GrPoint _ptReel){ if (!editor_.valide()) { return; } - final GrPoint p = new GrPoint(_xEcran, _yEcran, 0); - p.autoApplique(nodes_.getVersReel()); - final int i = ZCalquePoint.getSelectedPoint(nodes_.modele(), p, 5, nodes_.getVersReel(), pn_.getVueCalque().getViewBoite()); + final int i = ZCalquePoint.getSelectedPoint(nodes_.modele(), _ptReel, 5, nodes_.getVersReel(), pn_.getVueCalque().getViewBoite()); if (i < 0) { infoLabel_.setText(TrResource.getS("Aucun noeud trouv\xE9")); return; @@ -63,11 +61,11 @@ infoLabel_.setText(TrResource.getS("Noeud fronti\xE8re non autoris\xE9")); return; } - nodes_.modele().point(p, i, true); + nodes_.modele().point(_ptReel, i, true); final H2dTelemacSourceMng mng = ((TrTelemacSourceLayer) layer_).getNodeModel().getMng(); final String[] val = editor_.getValues(); - val[0] = CtuluLib.DEFAULT_NUMBER_FORMAT.format(p.x_); - val[1] = CtuluLib.DEFAULT_NUMBER_FORMAT.format(p.y_); + val[0] = CtuluLib.DEFAULT_NUMBER_FORMAT.format(_ptReel.x_); + val[1] = CtuluLib.DEFAULT_NUMBER_FORMAT.format(_ptReel.y_); mng.addSource(val, pn_.getCmdMng()); pointAjouteOk(val[0], val[1]); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |