程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#進行Visio二次開發之動態仿真實現(2)

C#進行Visio二次開發之動態仿真實現(2)

編輯:關於C語言

本文介紹如何實現線路走向、顏色變化,以及特定圖形(如活塞)的動態仿真效果。

首先實現動態仿真效果,必須先分析出整個圖紙的拓撲網絡順序及層次,這樣我們才能知道正確的線路走向以及動畫的變化順序,如配電網絡線路圖中,必定是電源開始,通過導線或者設備傳遞電源,以實現電路的貫通。在液壓線路中,由油箱開始,經過一系列設備,最後又回到油箱。

要在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 != "")
            {
                MessageUtil.ShowError(message);
                return;
            }
            if (list.Count > 0)
            {
                AnalyzeShapeIdList.Clear();
                foreach (string shapeStrID in list)
                {
                    AnalyzeShapeIdList.Add(Convert.ToInt32(shapeStrID));
                }
                RunColorChanging(app);
            }
            else
            {
                MessageUtil.ShowWarning("請檢查線路是否連接正確。");
            }
        }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved