【发布时间】:2011-06-23 15:42:05
【问题描述】:
我正在使用 C# 在 Studio 2010 中编写 Visio 2010 加载项。我需要阅读当前在 Visio 中打开的图表。我知道如何阅读图表的形状。
问题是
- 如果我有一个形状对象,哪些属性可以给我页面上形状的坐标和其他形状(如果有的话),当前与之相连,
- 如果我有一个连接器对象,哪些属性可以给我它连接的形状和连接的方向。
【问题讨论】:
标签: c# coordinates visio shape connector
我正在使用 C# 在 Studio 2010 中编写 Visio 2010 加载项。我需要阅读当前在 Visio 中打开的图表。我知道如何阅读图表的形状。
问题是
【问题讨论】:
标签: c# coordinates visio shape connector
Visio 中的连接是通过 Connect 对象处理的。每个形状都有一组传入连接对象和传出连接对象。它们的名字分别是 FromConnects 和 Connects。
每个连接对象都有一个 FromSheet 和 ToSheet 属性,它们只是指向 Shape 对象的指针,FromSheet 形状是连接到 ToSheet 形状的形状。
所以,如果你有一个正方形 (shape1) 用连接线 (connector) 连接到另一个正方形 (shape2),那么你实际拥有的是这样的: 连接器连接到 shape1 连接器连接到 shape2
所以在 shape1 上,您会查看 FromConnects 并看到一个 Connects 项,其中 FromSheet 引用连接器,而 ToSheet 引用 shape1。 形状 2 将是相同的。 如果您查看连接器形状上的 Connects,您会看到相同的 Connects 项目,并引用了相同的对象。
因此,弄清楚 shape1 是否连接到 shape2 或反之亦然是查看连接器上的顺序的问题...连接对象 1 将是“From”形状,Connects 对象 2 将是“To”形状。
这里有两个 VBA 例程,它们在您传入的形状上获取传入和传出胶水,并返回一个集合对象。我知道您说您使用的是 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
【讨论】:
坐标:
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;
【讨论】: