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);

     下面展示一下效果:

时间: 2024-08-04 10:48:30

Visio二次开发(二)----Shape的添加和连接的相关文章

.net项目的二次开发解决方案

公司原来项目的二次开发方式主要使用SQL,基本上也能满足客户的要求,优点是使用简单,只要熟悉SQL语句就可以操作,缺点是受限制太多,需要对数据库底层相当的了解,使用时容易出错,无法直接调用业务层代码等,研究了一下.net的动态编译,感觉用它来做二次开发效果应该不错的. 首先我们先做个demo来解释一下动态编译,下面这段代码的意思就是先组织一个源码字符串,然后编译执行. 动态编译简单代码 using System;using System.Collections.Generic;using Sys

C#进行Visio二次开发之管理下拉列表

每个Shape有很多属性,这里我是指自定义属性,每个属性都对应一种类型,就像我们在SqlServer创建一个字段的时候,需要指定其类型一样.Visio的属性类型有以下几种: 值 说明 自动常量 0 字符串.此为默认值. visPropTypeString 1 固定列表.在"形状数据"对话框的下拉组合框中显示列表项.在 Format 单元格中指定列表项.用户只能从该列表中选择一项. visPropTypeListFix 2 数字.包括日期.时间.持续时间和货币值,以及标量.尺寸和角度.在

C#进行Visio二次开发之知识点考核试题

本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一回客座老师,重新拉起Visio二次开发这面大旗,个人觉得这也是一次比较难忘的一次经历. 本次准备的培训,除了全面介绍Visio的相关知识和概念,还以实战开发的方式加深Visio二次开发的知识掌握,另外还通过试题来考核各个学生的掌握情况,本文主要是介绍我根据自己一直以来的Visio开发经验所得,准备的Visio

如何使用C#进行Visio二次开发

    Visio在VB6中的开发有很多现成的项目及代码,但在.NET领域相对比较滞后,但是从Visio SDK2007发布以来,给予Visio的C#开发逐渐多了起来,虽然和VB6的开发思路有一定的相似,不过平台不一样,做出来的东西差别还是有一定的距离,虽然总体慢一点,但是,DotNET框架的逐渐强大以及更多的DotNet程序和开发人员的加入,带给大家更高的整合价值以及更美好的发展未来.     本人将会在C#领域将Visio的二次开发进行下去,希望大家一起学习研究,碰撞出更美的火花 Visio

C#进行Visio二次开发之图纸设备信息的保存

在Visio的二次开发中,当发布图纸的时候,我们往往需要保存图纸和图纸的设备信息到数据库,图纸是将文件以二进制保存到数据库中,设备信息是保存图纸对应的Shape的各种自定义属性.本文主要介绍如何保存图纸背后的设备信息. 这里图纸的设备信息可以通过一个设备表如Device1来放置同一类型的设备信息,如负荷开关存放在Device1,架空线放在Device2等等,Device(n)是我们详细放置某种类型设备的表,其结构如下 另外主要我们再新建一个表来管理那种类型的设备对应那个表即可.如下图所示: 一旦

C#进行Visio二次开发之设备状态跟踪

明察秋毫,很多情况下是非常需要的,例如,如果我们完善了一套系统,能够将四川赈灾的款项的筹集.采购.分发等步骤都能明察秋毫,相信整个世界会安静很多. 同样,对于一个使用Visio进行二次开发的程序来说,背后你需要知道用户增加了那些设备,删除了那些设备,修改了那些设备,这样你才能对整个系统的数据进行有效的控制,否则"赈灾"款项就可能丢失了,呵呵. 那我们应该如何做才能有效的处理这些事件,达到对设备的变更明察秋毫呢? 我前面介绍了一篇文章<C#进行Visio开发的事件处理 >,其

C#进行Visio二次开发之界面设计及架构设计

写C#进行Visio二次开发的系列文章有很多篇了,都是写一些经验总结和技术知识的分享,本文继续来探讨这方面开发的一些心得,主要介绍下WinForm界面的设计和Visio软件的架构设计.先看看我花了N个月的业余时间完成的软件概貌,然后大家一起讨论下相关的技术知识. 软件界面主要有菜单区.工具条区.图纸内容区.右边的管理区.状态条区等等,主要注意的是采用了ToolStripPanel来进行布局,然后并使用了有名的WeifenLuo.WinFormsUI.Docking.dll控件对图纸内容区.右边的

如何使用C#进行Visio二次开发-总结版

很久没有写C#进行Visio二次开发的文章了,这次温习一下Visio二次开发的相关知识,全面总结一下Visio 二次开发的方方面面.一方面让对Visio的开发不太了解人员有一个全局的认识,对已经看过我前面文章的人来一个回顾总结. 本次主要根据我在Visio二次开发过程中,获得的一些实际系统开发经验以及学习历程,分三个方面对下面内容进行介绍: 1)介绍C#的Visio二次开发管理系统的架构设计思路 2)介绍C#进行Visio开发的准备工作 3)Visio的编程对象模型 1)Viso二次开发管理系统

Solidworks二次开发—06—在装配体中添加配合

Solidworks二次开发-06-在装配体中添加配合     折腾了三天终于完成了计划中的功能模块.在一个装配体中自动判断插入合适的零件,并添加配合. 在前面几篇文章中我已经基本上说明了如何得到零部件的数据信息.如何插入零部件.如何得到已经选择的特征等. 下面只介绍怎样进行配合 在做配合时,需要经常选择到零件的面.线等,这是一个问题,还有就是介绍一下addmate2函数的使用: 一般进行配合我们按照下面的次序来进行:     1-ModelDoc.ClearSelection2  '取消所有选