<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'><div dir='ltr'>
Buen dia!<BR>
&nbsp;<BR>
Estoy realizando una extension para gvsig en donde busco por medio de los Listener, crear puntos al vuelo sobre el MapControl&nbsp;y obtener a su vez las coordenadas de dichos puntos que se van creando, hasta ahora he conseguido capturar las coordenadas pero de la vista, a través de la&nbsp;clase que enseñare al final, pero a su vez sé, que la herramienta Catch Coodinates&nbsp;esta capturando las coordenadas de los layer y es precisamente lo que necesito, pero no se como acceder al codigo de dicha herramienta, por favor si alguien conoce, espero me indique!<BR>
&nbsp;<BR>
A su vez, como ya comentaba, quiero lograr crear puntos al vuelo, pero la unica forma que lo he conseguido es creando puntos pero de capas en edicion, reitero que quiero conseguir que esto sea al vuelo y sin tener que estar editando una capa existente, solo quiero indicar que voy a dibujar puntos y capturarlos&nbsp;para con estos realizar otras operaciones <BR>
&nbsp;<BR>
Espero me puedan ayudar, muchas gracias!<BR>
&nbsp;<BR>
&nbsp;<BR>
package org.gvsig.proyecto;<BR>
<BR>import java.awt.Cursor;<BR>import java.awt.Image;<BR>import java.awt.Point;<BR>import java.awt.Toolkit;<BR>import java.awt.geom.Point2D;<BR>
import javax.swing.ImageIcon;<BR>import javax.swing.JOptionPane;<BR>
//import com.hardcode.driverManager.DriverLoadException;<BR>import java.lang.Exception;<BR>//import com.iver.cit.gvsig.fmap.DriverException;<BR>import com.iver.cit.gvsig.fmap.MapControl;<BR>import com.iver.cit.gvsig.fmap.layers.FBitSet;<BR>import com.iver.cit.gvsig.fmap.layers.FLayer;<BR>import com.iver.cit.gvsig.fmap.layers.FLyrVect;<BR>import com.iver.cit.gvsig.fmap.tools.Events.PointEvent;<BR>import com.iver.cit.gvsig.fmap.tools.Listeners.PointListener;<BR>import com.iver.cit.gvsig.fmap.tools.BehaviorException;<BR>
<BR>/**<BR>&nbsp;* Implementación de la interfaz PointListener como herramienta para realizar<BR>&nbsp;* una selección por punto.<BR>&nbsp;*<BR>&nbsp;* @author Vicente Caballero Navarro<BR>&nbsp;*/<BR>&nbsp;<BR>public class PointSelectionListener implements PointListener {<BR>
<BR>&nbsp;private Point2D p;<BR>
&nbsp;private final Image img = new ImageIcon(MapControl.class.getResource("images/PointSelectCursor.gif")).getImage();<BR>&nbsp;private Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(16, 16), "");<BR>&nbsp;protected MapControl mapCtrl;<BR>
&nbsp;/**<BR>&nbsp; * Crea un nuevo AreaListenerImpl.<BR>&nbsp; *<BR>&nbsp; * @param mc MapControl.<BR>&nbsp; */<BR>&nbsp; <BR>&nbsp;public PointSelectionListener(MapControl mc) {<BR>&nbsp;<BR>&nbsp;&nbsp;JOptionPane.showMessageDialog(null, " Estoy en PointSelection");<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;this.mapCtrl = mc;<BR>&nbsp;}<BR>
&nbsp;/**<BR>&nbsp; * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)<BR>&nbsp; */<BR>&nbsp; <BR>&nbsp;public void point(PointEvent event) throws BehaviorException {<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//mapCtrl.getMapContext().selectByPoint(event.getPoint(), 1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point2D p = event.getPoint();<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point2D mapPoint = mapCtrl.getViewPort().toMapPoint((int) p.getX(), (int) p.getY());<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(null, "Puntos x:" +&nbsp; (int)p.getX() + " Puntos y:" + (int)p.getY());<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Tolerancia de 3 pixels<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double tol = mapCtrl.getViewPort().toMapDistance(3);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FLayer[] actives = mapCtrl.getMapContext()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getLayers().getActives();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i &lt; actives.length; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (actives[i] instanceof FLyrVect) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FLyrVect lyrVect = (FLyrVect) actives[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FBitSet oldBitSet = lyrVect.getSource().getRecordset().getSelection();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FBitSet newBitSet = lyrVect.queryByPoint(mapPoint, tol);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (event.getEvent().isControlDown())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newBitSet.xor(oldBitSet);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lyrVect.getRecordset().setSelection(newBitSet);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;} /*catch (DriverException e) {*/<BR>&nbsp;&nbsp;catch (Exception e) {<BR>&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;throw new BehaviorException("No se pudo hacer la selección");<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;} /*catch (DriverLoadException e) {*/<BR>&nbsp;&nbsp;&nbsp;/*catch (Exception e) {*/<BR>&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<BR>&nbsp;&nbsp;&nbsp;//e.printStackTrace();<BR>&nbsp;&nbsp;//}<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;public void setPoint(Point2D p) throws BehaviorException {<BR>&nbsp;<BR>&nbsp;&nbsp;this.p = p;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()<BR>&nbsp; */<BR>&nbsp;public Cursor getCursor() {<BR>&nbsp;&nbsp;return cur;<BR>&nbsp;}<BR>
&nbsp;/**<BR>&nbsp; * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()<BR>&nbsp; */<BR>&nbsp;public boolean cancelDrawing() {<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>
&nbsp;public void pointDoubleClick(PointEvent event) throws BehaviorException {<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;// mapCtrl.getMapContext().selectByPoint(event.getPoint(), 1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point2D p = event.getPoint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Point2D mapPoint = mapCtrl.getViewPort().toMapPoint((int) p.getX(), (int) p.getY());<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(null, "Puntos x:" +&nbsp; (int)p.getX() + " Puntos y:" + (int)p.getY());<BR>&nbsp;}<BR>
<BR>}<BR><BR><BR><BR>
<P align=left><FONT face=Verdana></FONT><FONT color=#d99694>&nbsp;</FONT></P>
<P align=left><FONT color=#d99694 face="Comic Sans MS">Diana Marcela Ortiz Giraldo</FONT></P>
<P align=left><FONT color=#d99694 face="Comic Sans MS">&nbsp;&nbsp; Universidad del Valle</FONT></P>
<P align=left>&nbsp;</P>                                               </div></body>
</html>