在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#文件解析和处理 → dxf文件解析工具(c#源码)

dxf文件解析工具(c#源码)

C#文件解析和处理

下载此实例
  • 开发语言:C#
  • 实例大小:0.92M
  • 下载次数:102
  • 浏览次数:1093
  • 发布时间:2019-07-17
  • 实例类别:C#文件解析和处理
  • 发 布 人:lxsun78
  • 文件格式:.rar
  • 所需积分:2
 相关标签:

实例介绍

【实例简介】

【实例截图】

from clipboard


from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Drawing2D;



namespace ex3_txf
{

   
    public partial class Form1 : Form
    {
        public struct DataLineStruct
        {
            public int iLineType;
            public float fX1Pos;
            public float fY1Pos;
            public float fZ1Pos;
            public float fX2Pos;
            public float fY2Pos;
            public float fZ2Pos;
        };

        public struct DataPolyLineStruct
        {
            public int iLineType;
            public int iNum;
            public float fX1Pos;
            public float fY1Pos;
            public float fX2Pos;
            public float fY2Pos;

        };

        public struct DataArcStruct
        {
            public float fXPos;
            public float fYPos;
            public float fX1Pos;
            public float fY1Pos;
            public float fRPos;
            public float fptXPos;
            public float fptYPos;
            public float fAngle1Pos;
            public float fAngle2Pos;
            public float fIPos;
            public float fJPos;
        };

        public struct DataCircleStruct
        {
            public float fXPos;
            public float fYPos;
            public float fZPos;
            public float fRPos;
        };

        public struct DataTypeStruct
        {

            public int iCutNum;
            public bool xIsMoveDown;
            public int iLineType;
            public float fXPos;
            public float fYPos;
            public float fIPos;
            public float fJPos;
        };


        List<DataPolyLineStruct> stuPolyLineArray = new List<DataPolyLineStruct>();
        List<DataTypeStruct> stuDataArray = new List<DataTypeStruct>();
        List<DataLineStruct> stuLineArray = new List<DataLineStruct>();
        List<DataArcStruct> stuArcArray = new List<DataArcStruct>();
        List<DataCircleStruct> stuCircleArray = new List<DataCircleStruct>();
        private string path = "";
        DataTypeStruct stuActPoint, stuOldPoint;
        private FileInfo theSourceFile;
        private double XMax, XMin;
        private double YMax, YMin;
        private double ZMax, ZMin;
        int xStrat, xEnd, yStart, yEnd;
        bool xIsRead = false;

        float m_fradio;
        float m11, m12, m13, m21, m22, m23;

//         private double scaleX = 1;
//         private double scaleY = 1;
//         private double mainScale = 1;
        public Form1()
        {
            InitializeComponent();

            m_fradio = 1;
            m11 = m22 = 1;
            m12 = m21 = 0;
            m13 = 0;
            m23 = 0;
            xStrat = xEnd = yStart = yEnd = 0;
            path = System.Environment.CurrentDirectory;
            path = path   "\\DxfFile";
            DirectoryInfo TheFolder = new DirectoryInfo(path);
            //遍历文件
            foreach (FileInfo NextFile in TheFolder.GetFiles())
                this.treeView1.Nodes.Add(NextFile.Name);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            string filename;
            string line1, line2;							//these line1 and line2 is used for getting the a/m data groups...

            line1 = "0";									//line1 and line2 are are initialized here...
            line2 = "0";

            filename = path   "\\"   e.Node.Text;
            richTextBox1.Clear();
            stuLineArray.Clear();
            stuCircleArray.Clear();
            stuArcArray.Clear();
            stuPolyLineArray.Clear();
            theSourceFile = new FileInfo(filename);		//the sourceFile is set.

//            StreamReader reader = new StreamReader(filename, Encoding.Default);
            StreamReader reader;
            reader = theSourceFile.OpenText();			//the reader is set ...
            do
            {
                ////////////////////////////////////////////////////////////////////
                //This part interpretes the drawing objects found in the DXF file...
                ////////////////////////////////////////////////////////////////////

                if (line1 == "2" && line2 == "ENTITIES")
                {
                    xIsRead = true;
                }

                if (line2 == "ENDSEC")
                {
                    xIsRead = false;
                }


                if (xIsRead)
                {


                    if (line1 == "0" && line2 == "LINE")
                        LineModule(reader);


                    else if (line1 == "0" && line2 == "LWPOLYLINE")
                        //                    PolylineModule(reader);
                        ;

                    else if (line1 == "0" && line2 == "CIRCLE")
                        CircleModule(reader);


                    else if (line1 == "0" && line2 == "ARC")
                        ArcModule(reader);


                    else if (line1 == "0" && line2 == "POLYLINE")
                        PolylineModule(reader);
                    ////////////////////////////////////////////////////////////////////
                    ////////////////////////////////////////////////////////////////////
                }

                    GetLineCouple(reader, out line1, out line2);		//the related method is called for iterating through the text file and assigning values to line1 and line2...
                
            }
            while (line2 != "EOF");

            reader.DiscardBufferedData();							//reader is cleared...
            theSourceFile = null;
            reader.Close();

            PaintBack();
            Compare();
        }

        private void GetLineCouple(StreamReader theReader, out string line1, out string line2)		//this method is used to iterate through the text file and assign values to line1 and line2
        {
            System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
            string decimalSeparator = ci.NumberFormat.CurrencyDecimalSeparator;

            line1 = line2 = "";

            if (theReader == null)
                return;

            line1 = theReader.ReadLine();
            if (line1 != null)
            {
                line1 = line1.Trim();
                line1 = line1.Replace('.', decimalSeparator[0]);

            }
            line2 = theReader.ReadLine();
            if (line2 != null)
            {
                line2 = line2.Trim();
                line2 = line2.Replace('.', decimalSeparator[0]);
            }
        }

        private void LineModule(StreamReader reader)		//Interpretes line objects in the DXF file
        {
            string line1, line2;
            line1 = "0";
            line2 = "0";

            float x1 = 0;
            float y1 = 0;
            float z1 = 0;
            float x2 = 0;
            float y2 = 0;
            float z2 = 0;

            DataLineStruct stu1 = new DataLineStruct();


            do
            {
                GetLineCouple(reader, out line1, out line2);

                if (line1 == "10")
                {
                    x1 = (float)Convert.ToDouble(line2);

                    if (x1 > XMax)
                        XMax = x1;

                    if (x1 < XMin)
                        XMin = x1;
                }

                if (line1 == "20")
                {
                    y1 = (float)Convert.ToDouble(line2);
                    if (y1 > YMax)
                        YMax = y1;

                    if (y1 < YMin)
                        YMin = y1;
                }

                if (line1 == "30")
                {
                    z1 = (float)Convert.ToDouble(line2);
                    if (z1 > ZMax)
                        ZMax = y1;

                    if (z1 < ZMin)
                        ZMin = y1;
                }

                if (line1 == "11")
                {
                    x2 = (float)Convert.ToDouble(line2);

                    if (x2 > XMax)
                        XMax = x2;

                    if (x2 < XMin)
                        XMin = x2;
                }

                if (line1 == "21")
                {
                    y2 = (float)Convert.ToDouble(line2);

                    if (y2 > YMax)
                        YMax = y2;

                    if (y2 < YMin)
                        YMin = y2;
                }

                if (line1 == "31")
                {
                    z2 = (float)Convert.ToDouble(line2);
                    if (z2 > ZMax)
                        ZMax = y1;

                    if (z2 < ZMin)
                        ZMin = y1;
                }


            }
            while (line1 != "31");

            stu1.fX1Pos = x1;
            stu1.fX2Pos = x2;
            stu1.fZ1Pos = z1;
            stu1.fZ2Pos = z2;
            stu1.fY1Pos = y1;
            stu1.fY2Pos = y2;

            stuLineArray.Add(stu1);
            //****************************************************************************************************//
            //***************This Part is related with the drawing editor...the data taken from the dxf file******//
            //***************is interpreted hereinafter***********************************************************//

//             if ((Math.Abs(XMax) - Math.Abs(XMin)) > this.pictureBox1.Size.Width)
//             {
//                 scaleX = (double)(this.pictureBox1.Size.Width) / (double)(Math.Abs(XMax) - Math.Abs(XMin));
//             }
//             else
//                 scaleX = 1;
// 
// 
//             if ((Math.Abs(YMax) - Math.Abs(YMin)) > this.pictureBox1.Size.Height)
//             {
//                 scaleY = (double)(this.pictureBox1.Size.Height) / (double)(Math.Abs(YMax) - Math.Abs(YMin));
//             }
//             else
//                 scaleY = 1;
// 
//             mainScale = Math.Min(scaleX, scaleY);
// 
// 
// 
// 
//             int ix = drawingList.Add(new Line(new Point((int)x1, (int)-y1), new Point((int)x2, (int)-y2), Color.White, 1));
//             objectIdentifier.Add(new DrawingObject(2, ix));

            ///////////////////////////////////////////////////////////////////////////////////////////////////////
            ///////////////////////////////////////////////////////////////////////////////////////////////////////

        }

//         private void PolylineModule(StreamReader reader)	//Interpretes polyline objects in the DXF file
//         {
//             string line1, line2;
//             line1 = "0";
//             line2 = "0";
// 
//             float x1 = 0;
//             float y1 = 0;
//             float x2 = 0;
//             float y2 = 0;
// 
//             DataLineStruct stu1 = new DataLineStruct();
// 
// 
// //            thePolyLine = new polyline(Color.White, 1);
// 
// //             int ix = drawingList.Add(thePolyLine);
// //             objectIdentifier.Add(new DrawingObject(5, ix));
// 
// //             int counter = 0;
// //             int numberOfVertices = 1;
// //             int openOrClosed = 0;
// //             ArrayList pointList = new ArrayList();
// 
// 
//             do
//             {
//                 GetLineCouple(reader, out line1, out line2);
// 
//                 if (line1 == "90")
//                     numberOfVertices = Convert.ToInt32(line2);
// 
//                 if (line1 == "70")
//                     openOrClosed = Convert.ToInt32(line2);
// 
// 
//                 if (line1 == "10")
//                 {
//                     x1 = Convert.ToDouble(line2);
//                     if (x1 > XMax)
//                         XMax = x1;
// 
//                     if (x1 < XMin)
//                         XMin = x1;
//                 }
// 
//                 if (line1 == "20")
//                 {
//                     y1 = Convert.ToDouble(line2);
// 
//                     if (y1 > YMax)
//                         YMax = y1;
// 
//                     if (y1 < YMin)
//                         YMin = y1;
// 
//                     pointList.Add(new Point((int)x1, (int)-y1));
//                     counter  ;
//                 }
// 
//             }
//             while (counter < numberOfVertices);
// 
// 
// 
//             //****************************************************************************************************//
//             //***************This Part is related with the drawing editor...the data taken from the dxf file******//
//             //***************is interpreted hereinafter***********************************************************//
// 
// 
// //             for (int i = 1; i < numberOfVertices; i  )
// //             {
// //                 thePolyLine.AppendLine(new Line((Point)pointList[i - 1], (Point)pointList[i], Color.White, 1));
// //             }
// // 
// //             if (openOrClosed == 1)
// //                 thePolyLine.AppendLine(new Line((Point)pointList[numberOfVertices - 1], (Point)pointList[0], Color.White, 1));
// // 
// //             if ((Math.Abs(XMax) - Math.Abs(XMin)) > this.pictureBox1.Size.Width)
// //             {
// //                 scaleX = (double)(this.pictureBox1.Size.Width) / (double)(Math.Abs(XMax) - Math.Abs(XMin));
// //             }
// //             else
// //                 scaleX = 1;
// // 
// // 
// //             if ((Math.Abs(YMax) - Math.Abs(YMin)) > this.pictureBox1.Size.Height)
// //             {
// //                 scaleY = (double)(this.pictureBox1.Size.Height) / (double)(Math.Abs(YMax) - Math.Abs(YMin));
// //             }
// //             else
// //                 scaleY = 1;
// // 
// //             mainScale = Math.Min(scaleX, scaleY);
// 
//             //////////////////////////////////////////////////////////////////////////////////////////////////////
//             //////////////////////////////////////////////////////////////////////////////////////////////////////
// 
// 
//         }

        private void CircleModule(StreamReader reader)		//Interpretes circle objects in the DXF file
        {
            string line1, line2;
            line1 = "0";
            line2 = "0";

            float x1 = 0;
            float y1 = 0;
            float z1 = 0;
            float radius = 0;

            DataCircleStruct stu1;

            do
            {
                GetLineCouple(reader, out line1, out line2);

                if (line1 == "10")
                {
                    x1 = (float)Convert.ToDouble(line2);

                }


                if (line1 == "20")
                {
                    y1 = (float)Convert.ToDouble(line2);

                }

                if (line1 == "30")
                {
                    z1 = (float)Convert.ToDouble(line2);

                }


                if (line1 == "40")
                {
                    radius = (float)Convert.ToDouble(line2);

                    if ((x1   radius) > XMax)
                        XMax = x1   radius;

                    if ((x1 - radius) < XMin)
                        XMin = x1 - radius;

                    if (y1   radius > YMax)
                        YMax = y1   radius;

                    if ((y1 - radius) < YMin)
                        YMin = y1 - radius;

                }



            }
            while (line1 != "40");

            stu1.fXPos = x1;
            stu1.fYPos = y1;
            stu1.fZPos = z1;
            stu1.fRPos = radius;

            stuCircleArray.Add(stu1);

            //****************************************************************************************************//
            //***************This Part is related with the drawing editor...the data taken from the dxf file******//
            //***************is interpreted hereinafter***********************************************************//


//             if ((Math.Abs(XMax) - Math.Abs(XMin)) > this.pictureBox1.Size.Width)
//             {
//                 scaleX = (double)(this.pictureBox1.Size.Width) / (double)(Math.Abs(XMax) - Math.Abs(XMin));
//             }
//             else
//                 scaleX = 1;
// 
// 
//             if ((Math.Abs(YMax) - Math.Abs(YMin)) > this.pictureBox1.Size.Height)
//             {
//                 scaleY = (double)(this.pictureBox1.Size.Height) / (double)(Math.Abs(YMax) - Math.Abs(YMin));
//             }
//             else
//                 scaleY = 1;
// 
//             mainScale = Math.Min(scaleX, scaleY);
// 
// 
//             int ix = drawingList.Add(new circle(new Point((int)x1, (int)-y1), radius, Color.White, Color.Red, 1));
//             objectIdentifier.Add(new DrawingObject(4, ix));

            //////////////////////////////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////////////////////////////

        }

        private void ArcModule(StreamReader reader)		//Interpretes arc objects in the DXF file
        {
            string line1, line2;
            line1 = "0";
            line2 = "0";
            float ptx = 0;
            float pty = 0;
            float x1 = 0;
            float y1 = 0;
            float x2 = 0;
            float y2 = 0;
            float radius = 0;
            float angle1 = 0;
            float angle2 = 0;
            float i = 0;
            float j = 0;

            DataArcStruct stu1;

            do
            {
                GetLineCouple(reader, out line1, out line2);

                if (line1 == "10")
                {
                    ptx = (float)Convert.ToDouble(line2);
                    if (ptx > XMax)
                        XMax = ptx;
                    if (ptx < XMin)
                        XMin = ptx;

                }


                if (line1 == "20")
                {
                    pty = (float)Convert.ToDouble(line2);
                    if (pty > YMax)
                        YMax = pty;
                    if (pty < YMin)
                        YMin = pty;
                }



                if (line1 == "40")
                {
                    radius = (float)Convert.ToDouble(line2);

                    if ((ptx   radius) > XMax)
                        XMax = ptx   radius;

                    if ((ptx - radius) < XMin)
                        XMin = ptx - radius;

                    if (pty   radius > YMax)
                        YMax = pty   radius;

                    if ((pty - radius) < YMin)
                        YMin = pty - radius;
                }

                if (line1 == "50")
                    angle1 = (float)Convert.ToDouble(line2);

                if (line1 == "51")
                    angle2 = (float)Convert.ToDouble(line2);


            }
            while (line1 != "51");

            x1 = ptx   (float)Math.Cos(angle1 / 180.0 * Math.PI) * radius;
            y1 = pty   (float)Math.Sin(angle1 / 180.0 * Math.PI) * radius;
            x2 = ptx   (float)Math.Cos(angle2 / 180.0 * Math.PI) * radius;
            y2 = pty   (float)Math.Sin(angle2 / 180.0 * Math.PI) * radius;
            i = ptx - x1;
            j = pty - y1;
            stu1.fXPos = x1;
            stu1.fYPos = y1;
            stu1.fX1Pos = x2;
            stu1.fY1Pos = y2;
            stu1.fIPos = i;
            stu1.fJPos = j;
            stu1.fRPos = radius;
            stu1.fptXPos = ptx;
            stu1.fptYPos = pty;
            stu1.fAngle1Pos = angle1;
            stu1.fAngle2Pos = angle2;

            
            stuArcArray.Add(stu1);
            //****************************************************************************************************//
            //***************This Part is related with the drawing editor...the data taken from the dxf file******//
            //***************is interpreted hereinafter***********************************************************//


//             if ((Math.Abs(XMax) - Math.Abs(XMin)) > this.pictureBox1.Size.Width)
//             {
//                 scaleX = (double)(this.pictureBox1.Size.Width) / (double)(Math.Abs(XMax) - Math.Abs(XMin));
//             }
//             else
//                 scaleX = 1;
// 
// 
//             if ((Math.Abs(YMax) - Math.Abs(YMin)) > this.pictureBox1.Size.Height)
//             {
//                 scaleY = (double)(this.pictureBox1.Size.Height) / (double)(Math.Abs(YMax) - Math.Abs(YMin));
//             }
//             else
//                 scaleY = 1;
// 
//             mainScale = Math.Min(scaleX, scaleY);
// 
// 
//             int ix = drawingList.Add(new arc(new Point((int)x1, (int)-y1), radius, angle1, angle2, Color.White, Color.Red, 1));
//             objectIdentifier.Add(new DrawingObject(6, ix));

            //////////////////////////////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////////////////////////////

        }

        private void PolylineModule(StreamReader reader)
        {
            string line1, line2;
            line1 = "0";
            line2 = "0";

            float x1 = 0;
            float y1 = 0;
            float x2 = 0;
            float y2 = 0;
            int count = 0;
            int num = 1;
            DataPolyLineStruct stu1 = new DataPolyLineStruct();
            do
            {
                GetLineCouple(reader, out line1, out line2);

                if (line1 == "10")
                {
                    if (count <= 1)
                    {
                        x1 = (float)Convert.ToDouble(line2);
                    }
                    else
                    {
                        x2 = (float)Convert.ToDouble(line2);
                    }
                    

                }

                if (line1 == "20")
                {
                    if (count <= 1)
                    {
                        y1 = (float)Convert.ToDouble(line2);
                    } 
                    else
                    {
                        y2 = (float)Convert.ToDouble(line2);
                    }
                    

                }

                if (line1 == "0" && line2 == "VERTEX" )
                {
                    if (count > 1)
                    {
                        stu1.fX1Pos = x1;
                        stu1.fX2Pos = x2;
                        stu1.fY1Pos = y1;
                        stu1.fY2Pos = y2;
                        stu1.iNum = num;
                        stuPolyLineArray.Add(stu1);
                        x1 = x2;
                        y1 = y2;
                        num  ;
                    }


                    count  = 1;
                }

            }
            while (line2 != "SEQEND");

        }

        private void PaintBack()
        {
            Rectangle newRect = pictureBox1.DisplayRectangle;
            Bitmap bmp = new Bitmap(newRect.Width, newRect.Height);
            Graphics g = Graphics.FromImage(bmp);
            Graphics g1 = pictureBox1.CreateGraphics();
            SolidBrush mysbrush1 = new SolidBrush(Color.Black);
            g.FillRectangle(mysbrush1, newRect);
            Pen p = new Pen(Color.Blue, 2);
            Pen p1 = new Pen(Color.FromArgb(50, 50, 50), 1);
            PointF ptStart, ptEnd, ptRect, ptAngle,ptPt;
            float r, angle;
            RectangleF rect1 = new RectangleF();
            ptStart = new PointF();
            ptEnd = new PointF();
            ptRect = new PointF();
            ptAngle = new PointF();
            ptPt = new PointF();


            int n = 1;
            while (n * 40 < newRect.Height)
            {
                g.DrawLine(p1, 0, 40 * n, newRect.Width, 40 * n);
                n  ;
            }
            n = 1;
            while (n * 40 < (newRect.Width))
            {
                g.DrawLine(p1, 40 * n, 0, 40 * n, newRect.Height);
                n  ;
            }


            n = 0;

            for (int i = 0; i < stuLineArray.Count; i  )
            {
                ptStart.X = stuLineArray[i].fX1Pos;
                ptStart.Y = stuLineArray[i].fY1Pos;
                ptEnd.X = stuLineArray[i].fX2Pos;
                ptEnd.Y = stuLineArray[i].fY2Pos;
                ptStart.X = ptStart.X * m_fradio;
                ptStart.Y = ptStart.Y * m_fradio;
                ptEnd.X = ptEnd.X * m_fradio;
                ptEnd.Y = ptEnd.Y * m_fradio;

                ptStart.X = ptStart.X * m11   ptStart.Y * m12   m13;
                ptStart.Y = ptStart.X * m21   ptStart.Y * m22   m23;

                ptEnd.X = ptEnd.X * m11   ptEnd.Y * m12   m13;
                ptEnd.Y = ptEnd.X * m21   ptEnd.Y * m22   m23;

                g.DrawLine(p, ptStart, ptEnd);
            }

            for (int i = 0; i < stuPolyLineArray.Count; i  )
            {
                ptStart.X = stuPolyLineArray[i].fX1Pos;
                ptStart.Y = stuPolyLineArray[i].fY1Pos;
                ptEnd.X = stuPolyLineArray[i].fX2Pos;
                ptEnd.Y = stuPolyLineArray[i].fY2Pos;

                ptStart.X = ptStart.X * m_fradio;
                ptStart.Y = ptStart.Y * m_fradio;
                ptEnd.X = ptEnd.X * m_fradio;
                ptEnd.Y = ptEnd.Y * m_fradio;

                ptStart.X = ptStart.X * m11   ptStart.Y * m12   m13;
                ptStart.Y = ptStart.X * m21   ptStart.Y * m22   m23;

                ptEnd.X = ptEnd.X * m11   ptEnd.Y * m12   m13;
                ptEnd.Y = ptEnd.X * m21   ptEnd.Y * m22   m23;

                g.DrawLine(p, ptStart, ptEnd);
            }



            for (int i = 0; i < stuCircleArray.Count;i   )
            {
                r = stuCircleArray[i].fRPos * m_fradio;
                ptStart.X = stuCircleArray[i].fXPos;
                ptStart.Y = stuCircleArray[i].fYPos;
                ptStart.X = ptStart.X * m_fradio;
                ptStart.Y = ptStart.Y * m_fradio;
                ptStart.X = ptStart.X * m11   ptStart.Y * m12   m13;
                ptStart.Y = ptStart.X * m21   ptStart.Y * m22   m23;
                rect1.X = ptStart.X - r;
                rect1.Y = ptStart.Y - r;
                rect1.Width = 2 * r;
                rect1.Height = 2 * r;
//                 rect1.X = stuCircleArray[i].fXPos - stuCircleArray[i].fRPos;
//                 rect1.Y = stuCircleArray[i].fYPos - stuCircleArray[i].fRPos;
//                 rect1.Height = 2 *  stuCircleArray[i].fRPos;
//                 rect1.Width = 2 * stuCircleArray[i].fRPos;
                g.DrawEllipse(p,rect1);
            }

            for (int i = 0; i < stuArcArray.Count; i  )
            {
                RectangleF rect = new RectangleF();
                ptStart.X = stuArcArray[i].fXPos;
                ptStart.Y = stuArcArray[i].fYPos;
                ptEnd.X = stuArcArray[i].fX1Pos;
                ptEnd.Y = stuArcArray[i].fY1Pos;
                ptRect.X = stuArcArray[i].fIPos;
                ptRect.Y = stuArcArray[i].fJPos;
                ptPt.X = stuArcArray[i].fptXPos;
                ptPt.Y = stuArcArray[i].fptYPos;
                ptStart.X = ptStart.X * m_fradio;
                ptStart.Y = ptStart.Y * m_fradio;
                ptEnd.X = ptEnd.X * m_fradio;
                ptEnd.Y = ptEnd.Y * m_fradio;
                ptRect.X = ptRect.X * m_fradio;
                ptRect.Y = ptRect.Y * m_fradio;

                ptStart.X = ptStart.X * m11   ptStart.Y * m12   m13;
                ptStart.Y = ptStart.X * m21   ptStart.Y * m22   m23;

                ptEnd.X = ptEnd.X * m11   ptEnd.Y * m12   m13;
                ptEnd.Y = ptEnd.X * m21   ptEnd.Y * m22   m23;
//                 r = stuArcArray[i].fRPos;
//                 ptAngle.X = stuArcArray[i].fAngle1Pos;
//                 ptAngle.Y = stuArcArray[i].fAngle2Pos;
//                 rect.X = ptPt.X - r;
//                 rect.Y = ptPt.Y - r;
//                 rect.Width = 2 * r;
//                 rect.Height = 2 * r;
//                 ptAngle.X = (float)(Math.Atan2(Convert.ToDouble(ptStart.Y - ptPt.Y), Convert.ToDouble(ptStart.X - ptPt.X)) / Math.PI * 180);
//                 ptAngle.Y = (float)(Math.Atan2(Convert.ToDouble(ptEnd.Y - ptPt.Y), Convert.ToDouble(ptEnd.X) - ptPt.X) / Math.PI * 180);
                r = (float)Math.Pow((ptRect.X * ptRect.X   ptRect.Y * ptRect.Y), 0.5);
                rect.X = ptStart.X   ptRect.X - r;
                rect.Y = ptStart.Y   ptRect.Y - r;
                rect.Height = 2 * r;
                rect.Width = 2 * r;

                ptAngle.X = (float)(Math.Atan2(Convert.ToDouble(-ptRect.Y), Convert.ToDouble(-ptRect.X)) / 3.14 * 180);
                ptAngle.Y = (float)(Math.Atan2(Convert.ToDouble(ptEnd.Y - ptRect.Y - ptStart.Y), Convert.ToDouble(ptEnd.X - ptRect.X - ptStart.X)) / 3.14 * 180);

                if (ptAngle.X < 0)
                {
                    ptAngle.X = 360   ptAngle.X;
                }
                if (ptAngle.Y < 0)
                {
                    ptAngle.Y = 360   ptAngle.Y;
                }
                angle = ptAngle.Y- ptAngle.X;
                if (angle < 0)
                {
                    angle  = 360;
                }
                
                g.DrawArc(p, rect, ptAngle.X, angle);
            }


            Matrix M = new Matrix(1, 0, 0, -1, 0, 0);
            g1.Transform = M;
            g1.TranslateTransform(0, -newRect.Height);
            g1.DrawImage(bmp, 0, 0);

            M.Dispose();
            g.Dispose();
            g1.Dispose();
            mysbrush1.Dispose();
            p.Dispose();
            p1.Dispose();

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            this.pictureBox1.Focus();
        }

        public void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta < 0)
                m_fradio -= 0.1f;
            else
                m_fradio  = 0.1f;
            if (m_fradio >= 10)
                m_fradio = 10;
            if (m_fradio <= 0.1)
                m_fradio = 0.1f;

            PaintBack();
        }


        private void Compare()
        {
            //提取第一个数据,在判断
//             while (!(stuArcArray.Count == 0) && !(stuLineArray.Count == 0))
//             {
//                 for (int i = 0; i < stuArcArray.Count; i  )
//                 {
// 
//                 }
//             }
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            xEnd = e.X;
            yEnd = e.Y;
            m13  = xEnd - xStrat;
            m23  = yStart - yEnd;
            PaintBack();
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            xStrat = e.X;
            yStart = e.Y;
        }

    }
}

标签:

实例下载地址

dxf文件解析工具(c#源码)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警