Tengo la siguiente situación en un complemento de ArcMap que estoy creando:
Este complemento contiene un formulario en el que el usuario debe hacer clic en un botón y, a continuación, dibujar una polilínea en el mapa (el formulario no es modal). La polilínea es necesaria en el formulario para su posterior procesamiento.
Ahora he implementado esto utilizando una herramienta que hereda de ESRI.ArcGIS.Desktop.AddIns.Tool
y utiliza un RubberLineClass
en el OnMouseDown
evento. La herramienta se activa en el evento OnClick del botón. Todo esto funciona, y el usuario puede dibujar la polilínea.
El problema es obtener la polilínea de la herramienta. Yo estaba pensando en tener la herramienta de añadir la polilínea como un elemento gráfico en el mapa, y en la forma de escuchar a la ItemAdded evento en IActiveView. Desafortunadamente, este evento sólo se produce cuando maplayers se añaden. En hace funcionan con elementos en el PageLayout, pero si añado el elemento a este, las coordenadas de la polilínea se alteran. Además, esto se siente un poco torpe.
Entonces, la pregunta es: ¿hay una forma mejor de obtener información de una herramienta? ¿O hay una manera de dibujar una polilínea en el mapa sin utilizar una herramienta?
Tal vez no sea relevante, pero aquí está el código de todos modos:
// Activate the tool
var documentBars = ((IDocument)ArcMap.Document).CommandBars;
var cmdItem = documentBars.Find(new UIDClass { Value = ThisAddIn.IDs.PolylineTool });
ArcMap.Application.CurrentTool = cmdItem;
// The tool's OnMouseDown event
protected override void OnMouseDown(MouseEventArgs arg)
{
var rubberBand = new RubberLineClass();
var geometry = rubberBand.TrackNew(ArcMap.Document.ActiveView.ScreenDisplay, new SimpleLineSymbolClass { Color = new RgbColorClass { Red = 255 } });
geometry.SpatialReference = ArcMap.Document.FocusMap.SpatialReference;
if (!geometry.IsEmpty)
{
var container = (IGraphicsContainer)ArcMap.Document.FocusMap;
container.AddElement(new LineElementClass { Geometry = geometry }, 0);
}
}
1 votos
En algunas situaciones me ha resultado más fácil cambiar el caso de uso: El usuario dibuja un gráfico de polilínea utilizando la herramienta out-of-the-box. El usuario selecciona el gráfico. El usuario pulsa el botón personalizado. El sistema verifica que se ha seleccionado un gráfico de polilínea y lo utiliza para el procesamiento.
0 votos
@KirkKuykendall Sí, me planteé hacerlo así, pero añade lógica extra que hay que manejar. Por ejemplo, más de un gráfico podría estar en el mapa, un usuario necesita para eliminar el gráfico después.