Newer
Older
LSPipeline / UserControls / CtrlLineStylePreview.cs
wxn on 1 Dec 2016 4 KB first
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using GeoScene.Data;
using System.Drawing.Drawing2D; 
namespace WorldGIS
{
    public partial class CtrlLineStylePreview : UserControl
    {
        public GSOStyle m_Style = null;
        public CtrlLineStylePreview(GSOStyle style)
        {
            InitializeComponent();
            m_Style = style;

        }

        public void CtrlLineStylePreview_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

         
            /*
            Color FColor = Color.FromArgb(255, 255, 255);

            Color TColor = Color.FromArgb(221, 221, 221);

            Brush b = new LinearGradientBrush(this.ClientRectangle, FColor, TColor, LinearGradientMode.Vertical);

            g.FillRectangle(b, this.ClientRectangle);
             */
             


            if (m_Style!=null)
            {
                GSOSimpleLineStyle3D simpleLineStyle= m_Style as GSOSimpleLineStyle3D;
                if (simpleLineStyle!=null)
                {
                    DrawSimpleLine(g, simpleLineStyle);
                }
                else
                {
                    GSOPipeLineStyle3D pipeLineStyle = m_Style as GSOPipeLineStyle3D;
                    if (pipeLineStyle!=null)
                    {
                        DrawPipeLine(g, pipeLineStyle);
                    }
                }
            }
            else
            {
                
                StringFormat stringFormat = new StringFormat();
                stringFormat.LineAlignment = StringAlignment.Center;
                stringFormat.Alignment = StringAlignment.Center;
                g.DrawString("无风格", new Font("宋体", 10), new SolidBrush(Color.Black), this.Bounds, stringFormat);
            }


        }
        public void DrawSimpleLine(Graphics g,GSOSimpleLineStyle3D simpleLineStyle)
        {

            int nStartX = (int)(Width * 0.1);
            Pen newPen = new Pen(simpleLineStyle.LineColor,(float)simpleLineStyle.LineWidth);

            switch (simpleLineStyle.LineType)
            {
                case EnumLineType.Solid:
                    newPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
                    break;
                case EnumLineType.Dash:
                    newPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
                    break;
                case EnumLineType.Dot:
                    newPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                    break;
               
                case EnumLineType.DashDot:
                    newPen.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot;
                    break;
                case EnumLineType.DashDotDot:
                    newPen.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot;
                    break;
              
            }

            Point pt1 = new Point(nStartX, this.Height / 2);
            Point pt2 = new Point(Width - nStartX, this.Height / 2);

            g.DrawLine(newPen, pt1, pt2);


            
        }
        public void DrawPipeLine(Graphics g,GSOPipeLineStyle3D pipeLineStyle)
        {
            Pen newPen = new Pen(pipeLineStyle.LineColor, 1.0f);

            
            int nEllipseHeight = (int)(Height * 0.3);
            int nEllipseWidth = nEllipseHeight/2;
            int nStartX = (int)(Width*0.1);

            int nHalfHeight=Height/2;
           

            int nBodyStartX=nStartX+nEllipseWidth/2;



            Rectangle rcEllipse = new Rectangle(nStartX, nHalfHeight - nEllipseHeight / 2, nEllipseWidth, nEllipseHeight);
            Rectangle rcTailEllipse = new Rectangle(this.Width - nStartX - nEllipseWidth, nHalfHeight - nEllipseHeight / 2, nEllipseWidth, nEllipseHeight);
            Rectangle rcFill = new Rectangle(nBodyStartX, rcEllipse.Top, Width - 2*nBodyStartX+nEllipseWidth/2, nEllipseHeight);

            Color FColor = pipeLineStyle.LineColor;

            Color TColor = Color.FromArgb(255, 255, 255);

            Brush b = new LinearGradientBrush(this.ClientRectangle, FColor, TColor, LinearGradientMode.BackwardDiagonal);

            g.FillRectangle(b, rcFill);



          
            g.DrawEllipse(newPen, rcEllipse);

            
            g.DrawEllipse(newPen, rcTailEllipse);


            g.DrawLine(newPen, nBodyStartX, rcEllipse.Top, Width - nBodyStartX, rcEllipse.Top);
            g.DrawLine(newPen, nBodyStartX, rcEllipse.Bottom, Width - nBodyStartX, rcEllipse.Bottom);


            


        }

        private void CtrlLineStylePreview_Load(object sender, EventArgs e)
        {

        }
    }
}