コード例 #1
0
        /// <summary>创建矩形范围(由点集合,可以累加创建)
        /// </summary>
        /// <param name="pPoints">点集</param>
        public bool Create(clss_Points pPoints)
        {
            clss_Point pPoint = null;
            double     dMax_X = m_dRight == 0 ? double.MinValue : m_dRight;
            double     dMin_X = m_dLeft == 0 ? double.MaxValue : m_dLeft;
            double     dMax_Y = m_dBottom == 0 ? double.MinValue : m_dBottom;
            double     dMin_Y = m_dTop == 0 ? double.MaxValue : m_dTop;
            double     dDelta_W = 0, dDelta_H = 0;
            int        nLength = 0;

            try
            {
                //循环所有获取XY最大最小值
                nLength = pPoints.p_Points.Count;
                for (int i = 0; i < nLength; i++)
                {
                    pPoint = pPoints.p_Points[i];

                    //获取X最大最小值
                    if (dMax_X < pPoint.p_X)
                    {
                        dMax_X = pPoint.p_X;
                    }
                    else if (dMin_X > pPoint.p_X)
                    {
                        dMin_X = pPoint.p_X;
                    }

                    //获取X最大最小值
                    if (dMax_Y < pPoint.p_Y)
                    {
                        dMax_Y = pPoint.p_Y;
                    }
                    else if (dMin_Y > pPoint.p_Y)
                    {
                        dMin_Y = pPoint.p_Y;
                    }
                }

                //放大边界,避免画图有不可见部分
                dDelta_W = (dMax_X - dMin_X) * 0.05;
                dDelta_H = (dMax_Y - dMin_Y) * 0.05;

                //修正后的范围
                m_dLeft   = dMin_X - dDelta_W;
                m_dTop    = dMin_Y - dDelta_H;
                m_dRight  = dMax_X + dDelta_W;
                m_dBottom = dMax_Y + dDelta_H;
                m_dWidth  = m_dRight - m_dLeft;
                m_dHeight = Math.Abs(m_dBottom - m_dTop);
                return(true);
            }
            catch
            {
                throw;
            }
        }
コード例 #2
0
ファイル: clsGraphics.cs プロジェクト: zixingcheng/zxcProj
        /// <summary>生成绘制文字信息,但不绘制(字符串组位置循环间隔制定XY值,支持自使用字符串字体对应高宽)
        /// </summary>
        /// <param name="lstStrings">字符串组</param>
        /// <param name="objPoint">起始位置</param>
        /// <param name="dDeltaX">X间隔值</param>
        /// <param name="dDeltaY">Y间隔值</param>
        /// <param name="bAuto_Position">是否在XY基础上自动增加显示文字所需的最大高宽度值,以实现自适应</param>
        /// <returns></returns>
        public List <clssText> GetData_Texts(List <string> lstStrings, clss_Point objPoint, double dDeltaX, double dDeltaY, bool bAuto_Position)
        {
            List <clssText> lstTexts = new List <clssText>();
            clss_Font_Style objFontStyle = this.p_FontStyle;
            double          dLeft = 0, dTop = 0;
            int             nWidth = 0, nHeight = 0;

            try
            {
                //计算长度和高度
                clsFont.Instance().Compute_CtrlMaxWidth(lstStrings.ToArray(), objFontStyle.p_Font, this.p_objGraph, ref nWidth, ref nHeight);

                //依次生成
                for (int i = 0; i < lstStrings.Count; i++)
                {
                    clssText objText = new clssText();
                    objText.p_Text = lstStrings[i];

                    //信息设置
                    objText.p_FontStyle          = new clss_Font_Style();
                    objText.p_FontStyle.p_Font   = objFontStyle.p_Font;
                    objText.p_FontStyle.p_Color  = objFontStyle.p_Color;
                    objText.p_FontStyle.p_Format = objFontStyle.p_Format;

                    //位置信息
                    if (bAuto_Position)
                    {
                        //自动调整合适字体起始位置,依据字体样式
                        dTop  = objPoint.p_Y + (nHeight + dDeltaY) * (i);
                        dLeft = objPoint.p_X + (nWidth + dDeltaX) * (i);
                    }
                    else
                    {
                        dTop  = objPoint.p_Y + (dDeltaY) * (i);
                        dLeft = objPoint.p_X + (dDeltaX) * (i);
                    }
                    objText.p_Position = new clss_Point(objPoint.p_X, dTop, 0);
                    lstTexts.Add(objText);
                }

                //返回
                return(lstTexts);
            }
            catch
            {
                throw;
            }
        }
コード例 #3
0
        /// <summary>创建矩形范围(由点集合,可以累加创建)
        /// </summary>
        /// <param name="pPoint">点</param>
        public bool Create(clss_Point pPoint)
        {
            clss_Points pPoints = null;

            try
            {
                //生成点集
                pPoints = new clss_Points();
                pPoints.Add(pPoint);

                //调用
                return(this.Create(pPoints));
            }
            catch
            {
                throw;
            }
        }
コード例 #4
0
        /// <summary>将几何对象转换为画布坐标
        /// </summary>
        /// <param name="pPoint">点对象</param>
        /// <param name="pRect_Map">画布边框</param>
        /// <returns></returns>
        public virtual clss_Point Trans_ToMap(clss_Point pPoint, clssRectangle_D pRect_Map)
        {
            clss_Point pPoint_T = new clss_Point();
            double     dRatio_X, dRatio_Y;

            try
            {
                //计算X,Y在数据框的坐标比例
                dRatio_X = (pPoint.p_X - p_Left) / p_Width;
                dRatio_Y = (pPoint.p_Y - p_Top) / p_Height;     //上大下小

                //计算画布坐标值
                pPoint_T.p_X = pRect_Map.m_dLeft + dRatio_X * pRect_Map.p_Width;
                pPoint_T.p_Y = pRect_Map.p_Top - dRatio_Y * pRect_Map.p_Height;
                return(pPoint_T);
            }
            catch
            {
                throw;
            }
        }