1. 程式人生 > >DXF檔案的點、線讀取

DXF檔案的點、線讀取

#region DXF輸入         private FileStream fs;         private StreamReader sr;         private string[] str = new string[2];         public List<PointD> pointList=new List<PointD> ();         public List<PointD[]> linePointList = new List<PointD[]>();         public void ReadDXF(string inputDXFPath)         {             fs = new FileStream(inputDXFPath, FileMode.Open, FileAccess.Read);             sr = new StreamReader(fs);             Read();         }         //讀取編碼與值         private string[] ReadPair()         {             string[] result = new string[2];             result[0] = sr.ReadLine().Trim();             result[1] = sr.ReadLine().Trim();             return result;         }

        private void Read()         {             while (sr.Peek()!=-1)             {                 str = ReadPair();                 if (str[1]=="SECTION")                 {                     str = ReadPair();                     switch (str[1])                     {                         case "ENTITIES": ReadEntities();                             break;                         default:                             break;                     }                 }             }             sr.Close();             fs.Close();         }         //讀取實體         private void ReadEntities()         {             while (str[1]!="ENDSEC")             {                 switch (str[1])                 {                     case "LINE": ReadLINE();                         break;                     case "POINT": ReadPoint();                         break;                     default: str = ReadPair();                         break;                 }             }         }

        //讀取LINE         private void ReadLINE()         {             PointD[] line = new PointD[2];             line[0] = new PointD();             line[1] = new PointD();             str = ReadPair();             while (str[0]!="0")             {                 str = ReadPair();                 switch (str[0])                 {                     case "10": line[0].distance = Convert.ToDouble(str[1]);                         break;                     case "20": line[0].elev = Convert.ToDouble(str[1]);                         break;                     case "11": line[1].distance = Convert.ToDouble(str[1]);                         break;                     case "21": line[1].elev = Convert.ToDouble(str[1]);                         break;                     default:                         break;                 }             }             linePointList.Add(line);         }

        //讀取POINT         private void ReadPoint()         {             PointD point = new PointD();             str = ReadPair();             while (str[0] != "0")             {                 str = ReadPair();                 switch (str[0])                 {                     case "10": point.distance = Convert.ToDouble(str[1]);                         break;                     case "20": point.elev = Convert.ToDouble(str[1]);                         break;                     default:                         break;                 }             }             pointList.Add(point);         }         #endregion

    }