Más

Seguimiento de eventos de mapa en el complemento de ventana acoplable de ArcObjects?

Seguimiento de eventos de mapa en el complemento de ventana acoplable de ArcObjects?


Estoy creando un complemento para ArcGIS 10.2 con c #.

Es una ventana acoplable que albergará algunos controles para nuestra solución de exportación personalizada.

Quiero escuchar los eventos Map-Move del mapa principal (IActiveView), para actualizar la visualización de las coordenadas del cuadro delimitador actual dentro de la ventana acoplable.

Mi problema es que no encuentro una buena manera de escuchar los mapeventos. La única forma que encontré es creando un nuevo objeto IMapControl-> IMapControlEvents2 y escuchando el evento OnExtentUpdated.

¿Hay algo que pueda usar lanzando desde IActiveView o tengo que crear un nuevo objeto IMapControl?


MapControl es un componente del motor para crear su propia ventana para mostrar el contenido del mapa. He mirado antes y nunca encontré una manera de obtener una referencia al ArcMap MapControl. Es posible que ArcMap ni siquiera use un MapControl para su visualización, puede usar alguna otra clase interna.

Dos opciones:

1)

var ave = ActiveView como IActiveViewEvents; ave.AfterDraw + = onAfterDraw;

vacío estático protegido onAfterDraw (IDisplay DISPLAY, esriViewDrawPhase PHASE) {if (PHASE! = esriViewDrawPhase.esriViewForeground) return;… [actualizar coordenadas]}

Obtendrá mensajes adicionales que no están relacionados con el cambio de extensión, pero si solo está usando el evento para actualizar la coordinación mostrada, podría ser aceptable.

2) Varias clases implementan ITransformEvents, pero solo 2 como eventos: TransformEventsListener (coclase auxiliar de C ++, no aplicable aquí) y DisplayTransformation.

var te = ActiveView.ScreenDisplay.DisplayTransformation como ITransformEvents_Event te.VisibleBoundsUpdated + = onVsibleBoundsUpdated;

vacío estático protegido onVsibleBoundsUpdated (IDisplayTransformation TRANSFORMATIONmay, bool SIZECHANGED) {… [actualizar coordenadas]}

Usaría onAfterDraw, de lo contrario, es posible que tenga que escuchar varios ITransformEvents, p. onAfterDraw disparado para pan, zoom, map rotar; onVisibleBoundsUpdated activado para panorámica, zoom, pero NO rotación de mapa.

FWIW, cuando se activa, onVisibleBoundsUpdated se activa antes de onAfterDraw.

Es posible que también deba eliminar / agregar su controlador a medida que cambia la vista activa. Entonces, si usa doc.ActiveView, debe desenganchar / volver a enganchar los eventos av cuando cambie, del mismo modo si está usando FocusMap.