c# - 如何以编程方式重新路由 visio 中的连接器?
问题描述
我正在为 visio 2013 开发 VSTO 插件。我需要重新路由连接器,因为该图很复杂并且包含很多步骤。自动布线的连接器没有明确的路径。有没有办法以编程方式重新路由连接器?就像在 visio 应用程序中手动拖动连接器点一样。
我阅读了一些 vba 文档 https://docs.microsoft.com/en-us/office/vba/api/visio.connect 但没有一个能让我深入了解。
解决方案
您启发了我对此进行尝试,因为我需要做类似的事情。这是我发现的一种使它起作用的方法。此子例程引用连接器形状,隐藏自动布线的线,添加新的几何部分,并手动调整该部分中的几个点(基于原始可见线的百分比高度/宽度)。您显然可以通过编程方式调整数量/位置。
Sub CustomRoutedConnector(shpConnectorShape As Shape)
With shpConnectorShape
'Hide the automatically routed connector line (still there, just hidden)
.CellsSRC(visSectionFirstComponent, 0, 2).FormulaU = "TRUE"
'Make a custom geometry section
.AddSection visSectionFirstComponent + 1
.AddRow visSectionFirstComponent + 1, visRowComponent, visTagComponent
.AddRow visSectionFirstComponent + 1, visRowVertex, visTagLineTo
.AddRow visSectionFirstComponent + 1, visRowVertex, visTagMoveTo
'Set up the new geometry section rows (11,1 and 11,2 are the start and end rows)
.CellsSRC(11, 0, 0).FormulaForceU = "TRUE"
.CellsSRC(11, 0, 1).FormulaForceU = "FALSE"
.CellsSRC(11, 0, 2).FormulaForceU = "FALSE"
.CellsSRC(11, 0, 3).FormulaForceU = "FALSE"
.CellsSRC(11, 0, 5).FormulaForceU = "FALSE"
.CellsSRC(11, 1, 0).FormulaU = "0"
.CellsSRC(11, 1, 1).FormulaU = "0"
.CellsSRC(11, 2, 0).FormulaU = "0"
.CellsSRC(11, 2, 1).FormulaU = "0"
'Add two additional rows for demonstration (could be programatically
'adjusted to however many points you need)
.AddRow visSectionFirstComponent + 1, 2, visTagLineTo
.CellsSRC(11, 2, 0).FormulaU = "0"
.CellsSRC(11, 2, 1).FormulaU = "0"
.AddRow visSectionFirstComponent + 1, 3, visTagLineTo
.CellsSRC(11, 3, 0).FormulaU = "0"
.CellsSRC(11, 3, 1).FormulaU = "0"
'Adjust the geometry of the rows (the doubles given are percentages of the height/width of the original connector)
'I recommend stepping through this to see how it moves the points:
.CellsSRC(visSectionFirstComponent + 1, 2, 0).FormulaU = ".5"
.CellsSRC(visSectionFirstComponent + 1, 3, 0).FormulaU = ".5"
.CellsSRC(visSectionFirstComponent + 1, 3, 1).FormulaU = ".5"
.CellsSRC(visSectionFirstComponent + 1, 4, 0).FormulaU = "1"
.CellsSRC(visSectionFirstComponent + 1, 4, 1).FormulaU = "1"
End With
End Sub
此自定义路线的终点仍与起点和终点形状相关联。要完全杀死所有自动路由,请使用.LayoutRoutePassive
page 的属性。(这可能会给你你正在寻找的东西,但它需要一些修补)。
推荐阅读
- python - export serving_input_fn(): ValueError: too many values to unpack (expected 2)
- sql - 选择 SQL Server 中每个唯一组合的最后一行
- php - Laravel - 不同控制器的一种形式
- java - 如何创建一个完整的 java soap web 服务(jax-rpc)项目(不仅仅是客户端代码)一个 wsdl 文件?
- excel-formula - 如果单元格为空白或包含文本
- python - pandas:如何获取pandas系列中出现频率最高的item?
- qt - QLocale::formattedDataSize 函数有没有办法返回翻译量化单位?
- json - Azure + Cosmos DB:
- haskell - Haskell - 为什么 getSymbolicLinkTarget 不在范围内?
- php - PHP / Laravel - 从请求中获取 JSON 输入,动态匹配名称