先說一說爲什麼我要用到Visio的二次開發,現在做的項目設計到了一些電子地圖,下面的這張圖片是美工畫的一張地鐵裏面門禁佈局圖,而這些圖在做項目的時候是需要用Visio畫的,有提前畫好的直接加載到項目中就可以使用,但是有些是需要通過代碼也就是二次開發來實現的!
下面說說具體的實現過程:
shape的添加
你只需要找到相應的模板,模板下的形狀,就可以加載形狀,沒有什麼困難的,如果你實在不知道,那麼就學者去用用Visio宏,對你的學習很有幫助(Visio二次開發(一)—-巧用Visio宏 )
'''新建一個documents集合''' Visio.Documents visDocs = adcVisio.Document.Application.Documents; '''加載模板並將其加載到一個停靠的窗口中''' Visio.Document visStencil = visDocs.OpenEx("BASIC_M.VSS", (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenDocked); '''加載一個當前活動的Page繪圖區域''' Visio.Page visPage = adcVisio.Document.Application.ActivePage; '''加載三角形''' Visio.Master visioRectMaster = visStencil.Masters.get_ItemU(@"Triangle"); Visio.Shape visioRectShape = visPage.Drop(visioRectMaster, 3.25, 4.5); '''加載圓形''' Visio.Master visioRect1Master = visStencil.Masters.get_ItemU(@"Square"); Visio.Shape visioRect1Shape = visPage.Drop(visioRect1Master, 1.25, 2.5); '''加載動態鏈接線''' Visio.Master visioWallMaster = visStencil.Masters.get_ItemU(@"Line-curve connector"); Visio.Shape visioWallShape = visPage.Drop(visioWallMaster, 5.5, 6.5);
Shape的連接
從上面的途中可以看出,兩個門Shape之間有的是通過線連接的,那麼我們能夠通過代碼來實現連接的功能嗎?當然,必須的可以:
''' <summary>''' ''' 將兩個形狀進行連接''' ''' </summary>''' '''<param name="shape1"></param>''' ''' <param name="shape2"></param>''' ''' <param name="connector"></param>''' private static void ConnectShapes(Visio.Shape shape1, Visio.Shape shape2, Visio.Shape connector) { ''' get the cell from the source side of the connector ''' Cell beginXCell = connector.get_CellsSRC( (short)Visio.VisSectionIndices.visSectionObject, (short)Visio.VisRowIndices.visRowXForm1D, (short)Visio.VisCellIndices.vis1DBeginX); '''glue the source side of the connector to the first shape ''' beginXCell.GlueTo(shape1.get_CellsSRC( (short)Visio.VisSectionIndices.visSectionObject, (short)Visio.VisRowIndices.visRowXFormOut, (short)Visio.VisCellIndices.visXFormPinX)); ''' get the cell from the destination side of the connector''' Cell endXCell = connector.get_CellsSRC( (short)Visio.VisSectionIndices.visSectionObject, (short)Visio.VisRowIndices.visRowXForm1D, (short)Visio.VisCellIndices.vis1DEndX); ''' glue the destination side of the connector to the second shape ''' endXCell.GlueTo(shape2.get_CellsSRC( (short)Visio.VisSectionIndices.visSectionObject, (short)Visio.VisRowIndices.visRowXFormOut, (short)Visio.VisCellIndices.visXFormPinX)); }
然後再在定義形狀的代碼下邊加上一句話
'''將兩個圖形用動態鏈接線鏈接起來''' ConnectShapes(visioRectShape, visioRect1Shape, visioWallShape);
下面展示一下效果: