コード例 #1
0
        public IElement CreateElement(IActiveView pAV, IPoint pt)
        {
            IElement element;
            double   num   = 0;
            int      count = this.m_symbolLists.Count / this.m_colum;

            if (count * this.m_colum < this.m_symbolLists.Count)
            {
                count++;
            }
            int           num1              = 0;
            double        num2              = 0;
            double        height            = 0;
            double        y                 = pt.Y + 0.1;
            IGroupElement groupElementClass = new GroupElement() as IGroupElement;
            IEnvelope     envelopeClass     = new Envelope() as IEnvelope;

            envelopeClass.PutCoords(pt.X + 0.1, pt.Y + 0.1, pt.X + 0.1, pt.Y + 0.1);
            IRgbColor rgbColorClass = new RgbColor()
            {
                Red   = 255,
                Blue  = 255,
                Green = 255
            };
            IElement element1 = this.CreatePolygonElement(envelopeClass, rgbColorClass);

            groupElementClass.AddElement(element1);
            pt.X = pt.X + 0.1;
            pt.Y = pt.Y + 0.1;
            IElement element2 = null;

            if (this.m_Title.Length > 0)
            {
                element2 = this.CreateTitleElement(pt);
                IEnvelope envelope = new Envelope() as IEnvelope;
                element2.QueryBounds(pAV.ScreenDisplay, envelope);
                height = envelope.Height;
                groupElementClass.AddElement(element2);
            }
            double        x              = pt.X;
            double        mItemheight    = pt.Y - height - this.m_rowspace;
            IPoint        pointClass     = new ESRI.ArcGIS.Geometry.Point();
            IEnvelope     envelopeClass1 = new Envelope() as IEnvelope;
            List <double> nums           = new List <double>();
            List <double> nums1          = new List <double>();

            if (height > 0)
            {
                nums.Add(mItemheight + this.m_rowspace / 2);
            }
            bool flag = false;

            for (int i = 0; i < this.m_symbolLists.Count; i++)
            {
                ISymbol item = this.m_symbolLists[i];
                pointClass.PutCoords(x, mItemheight);
                element = this.CreateElement(pointClass, this.m_symbolLists[i], this.m_backsymbolLists[i] as IFillSymbol,
                                             this.m_symbolDescriptions[i]);
                element.QueryBounds(pAV.ScreenDisplay, envelopeClass1);
                if (!(element is IGroupElement))
                {
                    groupElementClass.AddElement(element);
                }
                else
                {
                    int elementCount = (element as IGroupElement).ElementCount;
                    for (int j = 0; j < (element as IGroupElement).ElementCount; j++)
                    {
                        groupElementClass.AddElement((element as IGroupElement).Element[j]);
                    }
                }
                num2        = (num2 > envelopeClass1.Width ? num2 : envelopeClass1.Width);
                mItemheight = mItemheight - this.m_itemheight - this.m_rowspace;
                num1++;
                if (num1 == count)
                {
                    mItemheight = pt.Y - height - this.m_rowspace;
                    nums1.Add(x + this.m_itemwidth + this.m_space / 2);
                    x = x + (num2 + this.m_colspace);
                    nums1.Add(x - this.m_colspace / 2);
                    num1 = 0;
                    num2 = 0;
                    flag = true;
                }
                else if (!flag)
                {
                    nums.Add(mItemheight + this.m_rowspace / 2);
                }
            }
            if (num1 != count)
            {
                mItemheight = pt.Y - height - this.m_rowspace;
                nums1.Add(x + this.m_itemwidth + this.m_space / 2);
                x = x + (num2 + this.m_colspace);
                nums1.Add(x - this.m_colspace / 2);
            }
            IEnvelope envelope1 = new Envelope() as IEnvelope;

            (groupElementClass as IElement).QueryBounds(pAV.ScreenDisplay, envelope1);
            (groupElementClass as IElement).Activate(pAV.ScreenDisplay);
            envelope1.Expand(0.05, 0.05, false);
            try
            {
                if (!this.m_HasBorder)
                {
                    groupElementClass.DeleteElement(element1);
                }
                else
                {
                    IRgbColor rgbColorClass1 = new RgbColor()
                    {
                        Red   = 255,
                        Blue  = 255,
                        Green = 255
                    };
                    (groupElementClass as IGroupElement3).ReplaceElement(element1,
                                                                         this.CreatePolygonElement(envelope1, rgbColorClass1));
                }
                (groupElementClass as IElement).QueryBounds(pAV.ScreenDisplay, envelope1);
                if (this.m_isdrawline)
                {
                    foreach (double num3 in nums)
                    {
                        element = this.CreateLineElement(envelope1.XMin, num3, envelope1.XMax, num3);
                        groupElementClass.AddElement(element);
                    }
                    double yMax = envelope1.YMax;
                    if (nums.Count > 0)
                    {
                        if (height > 0)
                        {
                            yMax = nums[0];
                        }
                    }
                    if (nums1.Count > 0)
                    {
                        nums1.RemoveAt(nums1.Count - 1);
                    }
                    foreach (double num3 in nums1)
                    {
                        element = this.CreateLineElement(num3, envelope1.YMin, num3, yMax);
                        groupElementClass.AddElement(element);
                    }
                    (groupElementClass as IElement).QueryBounds(pAV.ScreenDisplay, envelope1);
                }
                this.m_pEnvelop = envelope1;
            }
            catch (Exception exception)
            {
            }
            if (element2 != null)
            {
                IPoint point = new ESRI.ArcGIS.Geometry.Point();
                point.PutCoords((envelope1.XMin + envelope1.XMax) / 2, y);
                element2.Geometry = point;
                (element2 as ITextElement).Symbol = this.FontStyle(20, esriTextHorizontalAlignment.esriTHACenter,
                                                                   esriTextVerticalAlignment.esriTVATop);
            }
            (groupElementClass as IElementProperties).Name = "图例";
            (groupElementClass as IElement).Geometry       = envelope1;
            return(groupElementClass as IElement);
        }