Select to view content in your preferred language

Flash Geometry

801
0
10-17-2011 02:04 PM
ToddLighthizer
Deactivated User
Hello,

I've created some code that'll zoom to a feature queried from an ArcGIS Server Map Service, however now I want to flash the feature's geometry on the screen.  I've grabbed the FlashGeometry snippet, http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/Flash_Geometry_Snippet/0...

however nothing happens when I get to that portion of my code.  I'm not sure what I'm missing, any suggestions would be appreciated.

{
            IGISServerConnection pGISServCon = new GISServerConnection();
            pGISServCon.Connect("MyServer");
            IServerObjectManager pSOM = pGISServCon.ServerObjectManager;
            IServerContext pServerContext = pSOM.CreateServerContext("MyMapService", "MapServer");
            IMapServer pMapServer = pServerContext.ServerObject as IMapServer;

            IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
            IMap pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);

            ILayer pFLayer = pMap.get_Layer(zoomMapServID) as ILayer;

            IFeatureLayer pFeatlayer = pFLayer as IFeatureLayer;
            IFeatureClass pFeatureClass = pFeatlayer.FeatureClass;

            IQueryFilter pQfilt = new QueryFilterClass();
            pQfilt.WhereClause = zoomColumn + " = '" + textBox1.Text + "'";


            IFeatureCursor pFC = pFeatureClass.Search(pQfilt, false);
            IFeature pFeat = pFC.NextFeature(); // all queries will return only 1 feature           

            IGeometry pGeom = pFeat.ShapeCopy as IGeometry;  

            IApplication pApp = ArcMap.Application;

            IMxDocument pMxd = ArcMap.Document;


            // Get the focus map
            IMap map = pMxd.FocusMap;

            // Cast from IMap to IActiveView
            IActiveView pActiveview = (IActiveView)map;

            IEnvelope pEnv = new EnvelopeClass();
            //Set envelope to the geometry collection from the property below
            pEnv = pGeom.Envelope;           

            //Create a new envelope to pass the values to from the geometry 
            IEnvelope envelope = new EnvelopeClass();
            envelope.XMax = pEnv.Envelope.XMax;
            envelope.YMax = pEnv.Envelope.YMax;
            envelope.XMin = pEnv.Envelope.XMin;
            envelope.YMin = pEnv.Envelope.YMin;

            envelope.Expand(150, 150, false);  

            pActiveview.Extent = envelope;

            pActiveview.Refresh(); 

            pActiveview.ScreenDisplay.UpdateWindow();
           
            //Setup parameters for FlashGeometry method

            IRgbColor rgbColor = new RgbColorClass();
            //Color Properties
            rgbColor.Red = 133;
            rgbColor.Green = 135;
            rgbColor.Blue = 43;            
            
            IDisplay pDisplay = pActiveview.ScreenDisplay;


            FlashGeometry(pGeom, rgbColor, pDisplay, 300);         
           
            
            
        }            
  

Flash Geometry Code, I removed the case statements for all other geometries other than polygon to shorten the code block.

public void FlashGeometry(ESRI.ArcGIS.Geometry.IGeometry geometry, ESRI.ArcGIS.Display.IRgbColor color, ESRI.ArcGIS.Display.IDisplay display, System.Int32 delay)
{
  if (geometry == null || color == null || display == null)
  {
    return;
  }

  display.StartDrawing(display.hDC, (System.Int16)ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache); // Explicit Cast

 
  switch (geometry.GeometryType)
  {
    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
      {
        //Set the flash geometry's symbol.
        ESRI.ArcGIS.Display.ISimpleFillSymbol simpleFillSymbol = new ESRI.ArcGIS.Display.SimpleFillSymbolClass();
        simpleFillSymbol.Color = color;
        ESRI.ArcGIS.Display.ISymbol symbol = simpleFillSymbol as ESRI.ArcGIS.Display.ISymbol; // Dynamic Cast
        symbol.ROP2 = ESRI.ArcGIS.Display.esriRasterOpCode.esriROPNotXOrPen;

        //Flash the input polygon geometry.
        display.SetSymbol(symbol);
        display.DrawPolygon(geometry);
        System.Threading.Thread.Sleep(delay);
        display.DrawPolygon(geometry);
        break;
      }

      }
  display.FinishDrawing();
}
0 Kudos
0 Replies