我正在使用C#在Studio 2010中为Visio 2010编写一个加载项。我需要阅读当前在Visio中打开的图表。我知道如何阅读图表的形状。
问题是
答案 0 :(得分:3)
Visio中的连接通过Connect对象处理。每个形状都有一组传入的连接对象和传出的连接对象。它们的名称分别是FromConnects和Connects。
每个连接对象都有一个FromSheet和ToSheet属性,它们只是指向Shape对象的指针,FromSheet形状是连接到ToSheet形状的形状。
所以,如果你有一个方形(shape1)连接到另一个带有连接线(连接器)的方形(shape2),你实际拥有的是: 连接器连接到shape1 连接器连接到shape2
因此,在shape1上,您将查看FromConnects并查看一个Connects项,使用FromSheet引用连接器,ToSheet引用shape1。 形状2将是相同的。 如果您查看连接器形状上的连接,您将看到相同的连接项,并引用相同的对象。
因此,确定shape1是否连接到shape2或反之亦然是查看连接器上的顺序...连接对象1将是“从”形状,连接对象2将是“到”形状。 / p>
以下是两个VBA例程,它们在您传入的形状上获取Incoming和Outgoing胶水,并返回一个集合对象。我知道你说你正在使用C#,但我为Visio做VBA。该代码仅说明了原始连接信息。我建议你试着在VBA中逛一逛,看看这一切是如何运作的,因为它仍然让我感到困惑。
Public Function GetShapesThatConnectTo(TheShp As Visio.Shape) As Collection
Dim Result As Collection
Set Result = New Collection
For i = 1 To TheShp.FromConnects.Count
Result.Add TheShp.FromConnects.Item(i).FromSheet
Next i
Set GetShapesThatConnectTo = Result
End Function
Public Function GetWhatShapeConnectsTo(TheShp As Visio.Shape) As Collection
Dim Result As Collection
Set Result = New Collection
For i = 1 To TheShp.Connects.Count
Result.Add TheShp.Connects.Item(i).ToSheet
Next i
Set GetWhatShapeConnectsTo = Result
End Function
答案 1 :(得分:0)
对于坐标:
foreach (Visio.Page Page in Pages)
{
Visio.Shapes Shapes = Page.Shapes;
foreach (Visio.Shape Shape in Shapes)
{
double x = Shape.Cells["PinX"].ResultIU;
double y = Shape.Cells["PinY"].ResultIU;