private IElement Get3DElementAirplane(IElement element, IGeometry elementGeometry, ICurve curvePath, double markerSize)
        {
            if (string.IsNullOrEmpty(fileName3DElement))
            {
                return(null);
            }

            // IElement element = new MarkerElement();

            IMarker3DSymbol pMarker3DSymbol = new Marker3DSymbol();

            pMarker3DSymbol.CreateFromFile(fileName3DElement);
            pMarker3DSymbol.UseMaterialDraping = true;
            //pMarker3DSymbol.
            IMarker3DPlacement pM3DP = (IMarker3DPlacement)pMarker3DSymbol;

            // pM3DP.Width =  markerSize ;
            pM3DP.Units = esriUnits.esriMeters;
            pM3DP.Angle = GetAngle(curvePath);
            pM3DP.MaintainAspectRatio = true;
            pM3DP.Size = markerSize;
            //pM3DP.Width = 83;
            //pM3DP.Depth = 73;


            IGraphicTrackerSymbol gts = Elements2D.m_graphicTracker3D.CreateSymbol(null, pMarker3DSymbol as ISymbol);

            GlobalValues.id3D = Elements2D.m_graphicTracker3D.Add(elementGeometry, gts);


            ((IMarkerElement)element).Symbol = (IMarkerSymbol)pMarker3DSymbol;

            element.Geometry = (IPoint)elementGeometry;
            return(element);
        }
        private IElement Get2DElementAirplane(IElement element, IGeometry elementGeometry, ICurve curvePath, double markerSize)
        {
            if (string.IsNullOrEmpty(fileName2DElement))
            {
                return(null);
            }

            IMarkerElement markerElement;

            // IElement element = new MarkerElement();
            markerElement = element as IMarkerElement;


            IColor rgbColor = GetRGBColor(255, 0, 0);

            IPictureMarkerSymbol pictureMarkerSymbol = new ESRI.ArcGIS.Display.PictureMarkerSymbol();

            pictureMarkerSymbol.CreateMarkerSymbolFromFile(_pictureType, fileName2DElement);
            pictureMarkerSymbol.Angle = GetAngle(curvePath);
            pictureMarkerSymbol.BitmapTransparencyColor = rgbColor;
            pictureMarkerSymbol.Size    = markerSize;
            pictureMarkerSymbol.XOffset = 0;
            pictureMarkerSymbol.YOffset = 0;


            IGraphicTrackerSymbol gts = Elements2D.m_graphicTracker2D.CreateSymbol(pictureMarkerSymbol as ISymbol, null);

            GlobalValues.id2D = Elements2D.m_graphicTracker2D.Add(elementGeometry, gts);

            markerElement.Symbol = pictureMarkerSymbol;
            element.Geometry     = (IPoint)elementGeometry;
            return(element);
        }
        void PopulateGraphicTracker()
        {
            m_graphicTracker.SuspendUpdate = true;

            foreach (DataRow row in m_weatherItemTable.Rows)
            {
                IGraphicTrackerSymbol symbol = GetSymbol(Convert.ToInt32(row[8]), Convert.ToString(row[7]));
                if (symbol == null)
                {
                    continue;
                }

                string label = string.Format("{0}, {1}?F", Convert.ToString(row[2]), Convert.ToString(row[5]));

                m_point.PutCoords(Convert.ToDouble(row[4]), Convert.ToDouble(row[3]));
                int trackerID = m_graphicTracker.Add(m_point as IGeometry, symbol);
                m_graphicTracker.SetTextSymbol(trackerID, m_textSymbol);
                m_graphicTracker.SetScaleMode(trackerID, esriGTScale.esriGTScaleAuto);
                m_graphicTracker.SetOrientationMode(trackerID, esriGTOrientation.esriGTOrientationAutomatic);
                m_graphicTracker.SetElevationMode(trackerID, esriGTElevation.esriGTElevationClampToGround);
                m_graphicTracker.SetLabel(trackerID, label);
                row[15] = trackerID;
                row.AcceptChanges();
            }

            m_graphicTracker.SuspendUpdate = false;
        }
        public void UpdateTracker(WeatherItemEventArgs weatherItemInfo)
        {
            System.Diagnostics.Trace.WriteLine("UpdateTracker - Thread ID: " + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
            if (m_graphicTracker == null)
            {
                throw new Exception("Graphic tracker is not initialized!");
            }


            // 1. lock the m_weatherItemTable and get the record
            DataRow row;

            lock (m_weatherItemTable)
            {
                row = m_weatherItemTable.Rows.Find(weatherItemInfo.ZipCode);
                if (row == null)
                {
                    return;
                }

                // 2. get the symbol for the item
                IGraphicTrackerSymbol symbol = GetSymbol(weatherItemInfo.IconID, Convert.ToString(row[7]));
                if (symbol == null)
                {
                    return;
                }

                string label = string.Format("{0}, {1}?F", Convert.ToString(row[2]), Convert.ToString(row[5]));

                // 3. check whether it has a tracker ID (not equals -1)
                int trackerID = Convert.ToInt32(row[15]);
                //m_graphicTracker.SuspendUpdate = true;
                m_point.PutCoords(weatherItemInfo.mapX, weatherItemInfo.mapY);
                m_point.SpatialReference = m_SRWGS84;
                m_point.Project(m_mapOrGlobe.SpatialReference);
                if (trackerID == -1) // new tracker
                {
                    trackerID = m_graphicTracker.Add(m_point as IGeometry, symbol);
                    m_graphicTracker.SetTextSymbol(trackerID, m_textSymbol);

                    row[15] = trackerID;
                }
                else // existing tracker
                {
                    m_graphicTracker.MoveTo(trackerID, m_point.X, m_point.Y, 0);
                    m_graphicTracker.SetSymbol(trackerID, symbol);
                }

                m_graphicTracker.SetLabel(trackerID, label);

                row.AcceptChanges();

                //m_graphicTracker.SuspendUpdate = false;
            }
        }
        /// <summary>
        /// Initialize a character marker symbol for a given bitmap path
        /// </summary>
        /// <param name="iconPath"></param>
        /// <param name="iconWidth"></param>
        /// <param name="iconHeight"></param>
        /// <returns></returns>
        private IGraphicTrackerSymbol InitializeSymbol(string iconPath, out int iconWidth, out int iconHeight, out Bitmap bitmap)
        {
            iconWidth = iconHeight = 0;
            bitmap    = null;
            try
            {
                //make sure that the icon exit on dist or else download it
                DownloadIcon(iconPath, out iconWidth, out iconHeight);
                string iconFileName = System.IO.Path.Combine(m_iconFolder, System.IO.Path.GetFileNameWithoutExtension(iconPath) + ".png");
                if (!System.IO.File.Exists(iconFileName))
                {
                    return(null);
                }

                IGraphicTrackerSymbol symbol = m_graphicTracker.CreateSymbolFromPath(iconFileName, iconFileName);
                return(symbol);
            }
            catch
            {
                return(null);
            }
        }