根据外部XY坐标放下visio形状

时间:2015-06-30 18:04:33

标签: vb.net ms-office visio

我有一个csv文件,列出了各种多边形的X和Y坐标。我有一个名为" Polygon"使用文本字段中的区域和名称等功能。

csv文件示例:

CSV File Sample Image

这些是2个正方形形状,一个的左下角为0,0,另一个为5,5。

问题是,如何使用我的" Polygon" master,它占用表中列出的坐标。所以一个" Polygon"将是0,0,其他是5,5。

" FID"是序列中的唯一编号,有助于识别下一个点。 "#形状"有助于确定坐标属于哪个形状。例如:Shape#1有4个顶点(0,0; ​​1,0; 1,1; 0,1),第5个顶点(0,0再次)关闭形状。 " FID"有助于确定这些顶点的顺序,即1,1在1.0之后出现,反之亦然。

所以,如果我想绘制Shape#1,它将是一个边长为1个单位的正方形。

感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分: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);

        }