/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }