private void DrawSoilLayer(Graphics g, SortedSet <float> elevations, SocketedShaftSystem sss) { // 转换坐标系 Matrix m = new Matrix(); float sp; float ratio; TransformUtils.GetAxisTransform(_daSoilLayers.Top, _daSoilLayers.Top + _daSoilLayers.Height, elevations.Max, elevations.Min, 0f, out sp, out ratio); m.Translate(_daSoilLayers.Left, sp); m.Scale(1, ratio); g.Transform = m; // 在模型坐标系下绘图 var colors = ColorUtils.ColorExpand(new Color[3] { Color.FromArgb(255, 0, 176, 80), Color.FromArgb(255, 0, 112, 192), Color.FromArgb(255, 0, 32, 96) }, sss.SoilLayers.Count); // colors = ColorUtils.ClassicalExpand(sss.SoilLayers.Count); for (int i = 0; i < sss.SoilLayers.Count; i++) { var s = sss.SoilLayers[i]; g.FillRectangle(new SolidBrush(colors[i]), new RectangleF(0, s.Bottom, _daSoilLayers.Width, s.Top - s.Bottom)); } }
private void DrawShaft(Graphics gr, SortedSet <float> elevations, SocketedShaftSystem sss) { // 转换坐标系:对 Y 方向进行变换 float sp; float ratio; TransformUtils.GetAxisTransform( s1: _daShaft.Top, s2: _daShaft.Top + _daShaft.Height, m1: elevations.Max, m2: elevations.Min, mp: 0f, sp: out sp, ratio: out ratio); // 将得到的结果应用到仿射矩阵中 Matrix mY = new Matrix(); mY.Translate(_daShaft.Left, sp); mY.Scale(1, ratio); gr.Transform = mY; // 将变换应用到绘图面板中 // 在模型坐标系下绘图 var colors = ColorUtils.ColorExpand(new Color[3] { Color.FromArgb(255, 255, 0, 0), Color.FromArgb(255, 255, 192, 0), Color.FromArgb(255, 255, 255, 0) }, sss.SocketedShaft.Sections.Count); for (int i = 0; i < sss.SocketedShaft.Sections.Count; i++) { var s = sss.SocketedShaft.Sections[i]; gr.FillRectangle(new SolidBrush(colors[i]), new RectangleF(0, s.Bottom, _daShaft.Width, s.Top - s.Bottom)); } }
/// <summary> 绘制标高与注释 </summary> /// <param name="g"></param> /// <param name="elevations"></param> /// <param name="sss"></param> private void DrawNotes(Graphics g, SortedSet <float> elevations, SocketedShaftSystem sss) { // 转换坐标系 Matrix m = new Matrix(); float sp; float ratio; TransformUtils.GetAxisTransform(_daNotations.Top, _daNotations.Top + _daNotations.Height, elevations.Max, elevations.Min, 0f, out sp, out ratio); m.Translate(_daNotations.Left, sp); m.Scale(1, ratio); // g.Transform = m; // 在模型坐标系下绘图 var c = Color.Black; var modelPoints = elevations.Select(r => new PointF(0, r)).ToArray(); m.TransformPoints(modelPoints); // 增加一定高度以放置字符 float stringHight = 15f; for (int j = 0; j < modelPoints.Length; j++) { modelPoints[j].Y -= stringHight; } // 写字 Pen blackPen = new Pen(Color.Black); Font ft = new Font("Times New Romans", 10, FontStyle.Regular); // "Arial" int i = 0; foreach (var ele in elevations) { g.DrawLine(blackPen, new PointF(0, modelPoints[i].Y + stringHight), new PointF(_daNotations.Width, modelPoints[i].Y + stringHight)); g.DrawString(ele.ToString("0.0"), ft, new SolidBrush(c), modelPoints[i]); i += 1; } }