2015-06-30 56 views
1

我有一個csv文件,列出了各種多邊形的X和Y座標。我有一個名爲「Polygon」的主形狀,其中包含文本字段中的區域和名稱等一些功能。根據外部XY座標刪除Visio形狀

示例CSV文件的:

CSV File Sample Image

這些是2周格的形狀,一個與0,0其左下角和在5,5-另一個。

現在的問題是,我如何使用我的「多邊形」主圖來繪製該圖,以便它佔據表中列出的座標。所以一個「多邊形」將在0,0和其他5,5。

「FID」是一個唯一的序列號碼,有助於識別下一個點。 「形狀#」有助於確定座標屬於哪個形狀。例如:形狀#1有4個頂點(0,0; ​​1,0; 1,1; 0,1),第5個頂點(0,0再次)關閉形狀。 「FID」有助於確定這些頂點的順序,即1,1在1,0之後,反之亦然。

所以,如果我想繪製形狀#1,它將是一個邊長爲1個單位的正方形。

任何幫助表示讚賞。

謝謝。

回答

0

下面的C#示例可能會對您有所幫助。它不會使用大師級的,但這應該大致完成你所需要的。

 var data = new[] 
     { 
      new {FID = 0, ShapeNum = 1, X = 0.0, Y = 0.0}, 
      new {FID = 1, ShapeNum = 1, X = 1.0, Y = 0.0}, 
      new {FID = 2, ShapeNum = 1, X = 1.0, Y = 1.0}, 
      new {FID = 3, ShapeNum = 1, X = 0.0, Y = 1.0}, 
      new {FID = 4, ShapeNum = 1, X = 0.0, Y = 0.0}, 
      new {FID = 5, ShapeNum = 2, X = 5.0, Y = 5.0}, 
      new {FID = 6, ShapeNum = 2, X = 6.0, Y = 5.0}, 
      new {FID = 7, ShapeNum = 2, X = 6.0, Y = 6.0}, 
      new {FID = 8, ShapeNum = 2, X = 5.0, Y = 6.0}, 
      new {FID = 9, ShapeNum = 2, X = 5.0, Y = 5.0} 
     }; 


     // group by shapenum 
     var data2 = from record in data 
      group record by record.ShapeNum 
      into g 
      select new {ShapeNum = g.Key, Records = g} 
      ; 

     var app = new Microsoft.Office.Interop.Visio.ApplicationClass(); 
     var doc = app.Documents.Add(""); 
     var page = doc.Pages[1]; 

     foreach (var g in data2) 
     { 
      var sorted_records = g.Records.OrderBy(i => i.FID).ToList(); 
      var doubles = new List<double>(); 

      foreach (var r in sorted_records) 
      { 
       doubles.Add(r.X); 
       doubles.Add(r.Y); 
      } 

      page.DrawPolyline(doubles.ToArray(), 0); 

     } 
+0

謝謝@Saveenr。如何使用* .csv文件獲取座標?我所顯示的表格是一個外部數據集,並且有兩個以上的形狀。 –

+0

對於.NET代碼,我使用了CsvHelper:http://joshclose.github.io/CsvHelper/ – saveenr