2010-05-28 71 views
2

我是Silverlight的新手。刚刚创建了我的第一个显示deepzoom图像的应用程序。silverlight中的矢量图形

寻找一些指针如何在Silverligth中显示矢量图形。这些图形都是二维的,是一系列线条(x1y1,x2y2),点(xy),基本形状。数据以ASCII文本文件形式提供。

从文件中读取数据并在SL中绘制的方式是什么?我需要首先将矢量对象转换/转换为图像(XAML)吗?从哪儿开始?

理想的情况是所有的矢量obects应该可以通过编程或用户操作进行选择。

感谢, 瓦尔

+0

包含描述合理简单项目的ASCII文本的一小段代码。 – AnthonyWJones 2010-05-28 16:01:57

回答

2

没有直接绘图API来我knoweldge,但你可以seperately通过添加各种形状,以可视化树添加值。

你正在寻找可能会涉及Path类,反过来的代码,PathFigurePolyLineSegment(或可能LineSegment)。

下面是一些代码,绘制一个正方形:

PolyLineSegment segment = new PolyLineSegment(); 
segment.Points.Add(new Point(0, 50)); 
segment.Points.Add(new Point(50, 50)); 
segment.Points.Add(new Point(50, 0)); 
segment.Points.Add(new Point(0, 0)); 

PathFigure figure = new PathFigure() 
{ 
    StartPoint = new Point(0, 0) 
}; 
figure.Segments.Add(segment); 

PathGeometry geometry = new PathGeometry() 
{ 
    Figures.Add(pathFigure) 
}; 

Path path = new Path() 
{ 
    Stroke = new SolidColorBrush(Colors.Black), 
    StrokeThickness = 2, 
    Data = pathGeometry 
}; 

// To render, the Path needs to be added to the visual tree 
LayoutRoot.Children.Add(path); 

编辑如果在ASCII文本文件中的数据可以在运行时不能改变,它可能是值得研究编写转换的文件到XAML脚本所以可以编译。

+0

谢谢理查德。 数据在运行时不会被改变,所以我会研究XAML编译。 周末愉快, Val – val 2010-05-28 19:28:27

0

您首先遇到了实际访问文件的问题。

获取文件内容

如果你有地方举行服务器端,那么你会用WebClient获取使用DownloadStringAsync文件这些文件。

在另一方面,如果用户打开一个本地文件,那么你需要使用OpenFileDialog类,要求他们打开该文件,然后FileInfo对象使用OpenTextOpenFileDialog提供读取字符串数据。

解析

好,是你的格式,所以你必须代码自己。

__Generating UI elements_

你不会将其转换为XAML。既然你想让这些载体项目是单独选择的元素,那么你可能要使用的一组中System.Windows.ShapesElipseLinePathPolygonPolylineRectangle发现Shape类型。

毫无疑问,有问题的格式有一些定义这些元素相对于固定的0,0点的位置。因此,用于显示这些内容的最佳面板是Canvas

您将通读每个向量项目,选择创建一个适当形状的实例,根据项目中的数据设置其属性。您需要确定其在Canvas内的正确位置,并使用附加属性Canvas.LeftCanvas.Top。将形状添加到CanvasChildren集合中。

+0

明白了。我会在周末尝试。感谢您的及时回复。 干杯, Val – val 2010-05-28 19:30:53