当前位置:编程学习 > C#/ASP.NET >>

C#进行Visio二次开发之动态仿真实现

Visio二次开发可以实现的项目情景很多,如电气线路分析、配电网络分析、流程图等,现因为项目需要,又认识多了一个应用场合,液压传动的仿真。项目效果图如下所示:

\ 

动态仿真,其实也就是模拟实际线路的走向,实现动画的展现。以前我的Visio的项目,基本上都是基于静态的图形展现,并没有设置太多的动态展现。原来配电网络的通电线路的分析,严格来说也是静态的,因为基本上是一次性把通电和不通电的线路给绘制出来。而动态仿真则要求慢慢的动画展现线路的走向和颜色变化。

如活塞运动的仿真,要求不停止动画的情况下,可以一直循环的变化。 如下图所示的效果:

\ 

 本文介绍如何实现线路走向、颜色变化,以及特定图形(如活塞)的动态仿真效果。

首先实现动态仿真效果,必须先分析出整个图纸的拓扑网络顺序及层次,这样我们才能知道正确的线路走向以及动画的变化顺序,如配电网络线路图中,必定是电源开始,通过导线或者设备传递电源,以实现电路的贯通。在液压线路中,由油箱开始,经过一系列设备,最后又回到油箱。

要在Visio图纸上实现如上图的动画效果,其中最重要的奥秘是使用下面代码:

 

 System.Windows.Forms.Application.DoEvents();
 Thread.Sleep(50);

 

 

 

很多情况下,我们可能对这个DoEvents函数的功能不是很熟悉,其实我们可以理解为主动触发事件,让消息流提前进入处理流程,这样我们就能够看到在Visio图纸上的图形更新效果了。

整个图形分析的过程,分为3个步骤:

1)进行简单的拓扑分析,把设备周边的关系保持到数据库进行分析。

2)根据数据库结构,对设备关系进行分析,获得拓扑网络的设备层次结构列表

3)根据不同的设备类型和图纸当前状态,对设备进行适当的绘制和动画仿真展示。

 

大致的代码如下所示:

 

       private void PowerCutAnalyze(Visio.Application app)
        {
            #region 获取操作设备和判断是否图纸有设备
            Visio.Shape shapeSelected = null;
            try
            {
                Visio.Window wndVisio = app.ActiveWindow;
                if (wndVisio.Selection.Count == 1)
                {
                    shapeSelected = wndVisio.Selection.get_Item16(1);
                }
            }
            catch { ; }

            if (!VisioUtility.HasShapeInWindow(VisWindow))
            {
                MessageUtil.ShowWarning("图纸上没有设备, 不能执行该操作");
                return;
            } 
            #endregion

            app.UndoEnabled = false;
            List<string> list = new List<string>();
            string message = "";
            list = powerCutBLL.RunPowerCutAnalyzing(app, shapeSelected, ref message);
            app.UndoEnabled = true;

            if (message != 
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,