Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
        /// <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;
            }
        }