Visio二次開發(二)----Shape的添加和連接

先說一說爲什麼我要用到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);

下面展示一下效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章