¿Es posible usar un Multiparche para implementar IFeatureRenderer.Draw en un renderizador personalizado

8

Tengo un renderizador personalizado que necesita renderizar geometría modificada. Las características de entrada están llegando a través de IFeatureCursorelementos poligonales. (Esto es similar a este ejemplo , aunque no estoy representando puntos).

Puedo renderizar fácilmente polígonos, líneas y puntos ya sea pasando la nueva geometría IFeatureDraw.Drawo llamando IDisplay.DrawPolygon/ IDisplay.DrawPoint/ etc.

Sin embargo, IDisplayno proporciona un mecanismo para dibujar un multiparche y pasarlo como la geometría a IFeatureDraw.Drawresultados no genera nada en la pantalla.

¿Hay alguna manera de "dibujar" directamente un elemento multiparche (preferiblemente con texturizado), dentro de este método?

Reed Copsey
fuente
¿Está esto en 2D Display (ArcMap) o en ArcScene o Globe?
Craig Williams
@Craig: Esto debe ser compatible con los tres, aunque estoy dispuesto a usar múltiples rutas de código para manejarlo. Esto es para una fuente de datos de complemento, por lo que el soporte deberá ser "global".
Reed Copsey

Respuestas:

3

Como dice Craig, OpenGL es el camino a seguir para 3D.

Consulte Crear una aplicación de ArcGIS Engine con C-Sharp y OpenGL . Las versiones anteriores de ArcGIS Explorer también admitían llamadas OpenGL , pero la última vez que verifiqué que Esri ya no lo admite.

No sé por qué hicieron esto: el dibujo de OpenGL realmente ayudó a diferenciar a AGX de Google Earth.

Actualizar

Incluso si su complemento devolvió multiparches correctamente, no creo que ArcObjects ofrezca métodos para admitir el dibujo de multiparches con llamadas OpenGL. Probablemente sería más fácil simplemente dibujar desde su formato nativo (omitir el complemento en otras palabras). Nunca lo he usado, pero aquí hay un script que muestra cómo usar OpenGL con ArcScene .

Kirk Kuykendall
fuente
1

La pantalla 2D (IDisplay) no admite el dibujo de multiparches directamente. Deberá convertirlos en huellas (consulte IMultipatch :: XYFootprint para saber cómo extraer la huella). Si desea una representación 2D de las texturas multiparche, necesitará crear una imagen a partir de una proyección 2D del multiparche y dibujar eso.

Para 3D, debería poder devolver mulitpatches en el cursor y funcionará, pero sinceramente, la mayoría de las personas solo implementan una capa personalizada para globo y hacen su propio trabajo en OpenGL.

Craig Williams
fuente
Estoy tratando de admitir ArcScene principalmente (no Globe), pero también map / globe como secundario. Desafortunadamente, devolver multiparches en el cursor no funciona correctamente en un conjunto de datos de complemento, por lo que puedo decir ...
Reed Copsey