ESRI Dev Summit – Defense SIG
Defense users met during lunch on the second day. I guess probably 50 attendees. Show of hands indicated majority are involved in real-time GIS apps. Relative few doing traditional map production.
A reliable source at ESRI indicated at 9.3 MOLE symbols will implement ISymbol and IPersistStream, becoming more like all the other symbols in ArcGIS. This will result in allow geodetic geometry for tactical graphics. This is very good news.
ESRI also asked for input, so here goes …
I really would like to see an enhancement (or fix) to the current display pipeline so that if I call IScreenDisplay.Invalidate on a cacheIndex for a layer that has its own cache (ILayer.Cached == true) then I would not cause a refresh of the overlying caches. Last I checked, if labels are turned on then the cache for esriViewGraphics gets refreshed. Regenerating labels is expensive. I need a way to refresh only my layer’s cache without refreshing the other caches. IDynamicLayer is overkill when refreshing only a few times per second.
Speaking of IDynamicLayer, there was interest expressed in having dynamic featurelayers. An ESRI programmer indicated this is difficult because the underlying data structure is unknown. I mentioned that the underlying datastructure could be an in-memory featureclass based on a plugin datasource so beefing up the FeatureLayer to implement IDynamicLayer would be useful.
I guess the hard part would be juggling between IDynamicGlyphs and ISymbols, but seems possible. Seems like a DynamicRenderer concept would be helpful.
Maybe just use .NET inheritance to inherit from FeatureLayerClass, then also implement IDynamicLayer. Was told by a helpful user of a way to implement IPluginCursorHelper.NextRecord() without needing to throw a COMException to let the framework know there are no more records. To me this seems like a bug – why should ESRI even bother calling NextRecord() when they know there are no more records? After all, I can see that they just called IsFinished and I returned true.
Another option I will explore is dumping the Plugin altogether and replace it with an in-memory featureclass based on the InMemoryWorkspaceFactory. But then I’ll need to synch this featureclass with my model instead of just wrapping my model. (speaking in MVC terms).
I also mentioned it would be useful to support transparency at the Symbol level, perhaps something like ISymbol2.Transparency property. The renderer would also need to be beefed up, to support something similar to IRotationRenderer, maybe call it ITransparencyRenderer, with a TransparencyField property. That way I could go into arcmap and specify a transparency field for a a particular layer.