2016-05-24 31 views
-2

嗨,我將到想知道,如果是沒有辦法讀取.ply文件,只需要XYZ positions.A層的文件格式是:閱讀並導入.PLY flle用C#

ply 

format ascii 1.0 

element vertex 303943 

property float x 

property float y 

property float z 

property uchar red 

property uchar green 

property uchar blue 

end_header 

1.955 1.647 -1.359 182 185 182 

0.87 1.532 -1.453 152 160 153 

0.843 1.548 -1.484 153 161 154 

0.832 1.539 -1.472 151 159 152 

我的天堂除了一個在Matlab上做的方法之外,還沒有找到任何東西。

+1

是什麼阻止你寫一些C#代碼來解析這種格式,並得到的x,y和z? – auburg

+4

您似乎誤解了StackOverflow的概念。你沒有描述你想要的,並且人們向你發送代碼。你提供你自己的代碼的[mcve],並告訴我們什麼是不工作的。如果你正在尋找一個現有的圖書館來爲你做到這一點 - 這也是題外話。 –

回答

2

試試這個

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication93 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.txt"; 
     static void Main(string[] args) 
     { 
      List<List<double>> data = new List<List<double>>(); 
      StreamReader reader = new StreamReader(FILENAME); 
      string inputLine = ""; 
      Boolean endHeader = false; 
      while ((inputLine = reader.ReadLine()) != null) 
      { 
       inputLine = inputLine.Trim(); 
       if (inputLine.Length > 0) 
       { 
        if(endHeader) 
        { 
         List<double> newRow = inputLine.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries).Select(x => double.Parse(x)).ToList(); 
         data.Add(newRow); 
        } 
        else 
        { 
         if(inputLine.Contains("end_header")) 
         { 
          endHeader = true; 
         } 
        } 
       } 
      } 

     } 
    } 

} 
+0

非常感謝...... –

+0

請注意,該腳本也會讀取「人臉列表」。如果您只是想要頂點,應該從PLY頭中讀取頂點數並只讀取該線的數量。 (或在inputLine.Split給出3個以上值時停止讀取 ply格式: http://paulbourke.net/dataformats/ply/ – mgear

+0

如果需要,我可以輕鬆修改代碼。 – jdweng