zoukankan      html  css  js  c++  java
  • EPLAN API 入门系列 实战篇(How to Change Properties in EPlan?)

    How to Change Properties in EPlan?

    In general,I think there are tow ways:

    1、Offline programe in Console Application

     1         public void Execute()
     2         {
     3             Console.WriteLine("Update Article Properties Demo");
     4 
     5             //Start P8
     6             EplApplication eplApp = new EplApplication();
     7             eplApp.Init("", true, true);  
     8 
     9             Project prj = null;
    10             try
    11             {
    12                 using (LockingStep ls = new LockingStep())
    13                 {
    14                     // 1. Open a project
    15                     Console.WriteLine("Opening project...");
    16                     eplApp.OpenProjectDlg();
    17 
    18                     ProjectManager prjMngr = new ProjectManager();
    19                     if (prjMngr.CurrentProject == null)
    20                     {
    21                         Console.WriteLine("No project is open. Finished.");
    22                         return;
    23                     }
    24                     prj = prjMngr.CurrentProject;
    25                     Console.WriteLine("Project '{0}' is open.", prj.ProjectFullName);
    26 
    27                     // 2. Get all terminal strips in the project
    28                     DMObjectsFinder fndr = new DMObjectsFinder(prj);
    29                     TerminalStrip[] arrTermStrips = fndr.GetTerminalStrips(null);
    30 
    31                     using (UndoStep us = (new UndoManager()).CreateUndoStep())
    32                     {
    33                         // 3. Change a property
    34                         Console.WriteLine("Modifying terminal strips...");
    35                         foreach (TerminalStrip ts in arrTermStrips)
    36                         {
    37                             if (ts.ManualPlacementType != DocumentTypeManager.DocumentType.Circuit
    38                                 && ts.ManualPlacementType != DocumentTypeManager.DocumentType.CircuitSingleLine) continue;
    39  
    40                             string sNewValue = string.Format("{0} - Change at {1}", (new Random()).Next(), DateTime.Now.ToShortTimeString());
    41 
    42                             MessageBox.Show(sNewValue.ToString());
    43 
    44                             MultiLangString mls = new MultiLangString();
    45                             mls.AddString((new Languages()).GuiLanguage.GetNumber(), sNewValue);
    46                             ts.Properties.FUNC_TEXT = mls;
    47                         }
    48 
    49                         // revert changes
    50                         Console.WriteLine("Reverting changes in project...");
    51                         us.DoUndo(); 
    52                     }
    53 
    54                     Console.WriteLine("Done.");
    55                 }
    56             }
    57             catch (System.Exception ex)
    58             {
    59                 Console.WriteLine("ERROR. " + ex.Message);
    60             }
    61             finally
    62             {
    63                 if (prj != null) prj.Close();
    64 
    65                 GC.Collect();
    66                 GC.WaitForPendingFinalizers();
    67 
    68                 Console.WriteLine("Press any key.");
    69                 Console.ReadKey();
    70 
    71                 eplApp.Exit();  
    72             }
    73         }

    2、Online programe via EventListerner in Eplan.Action.Addin

    EventListerner class:

     1     public class SystemEventListerner
     2     {
     3         [DeclareEventHandler("onActionStart.String.*")]
     4         public long MyEventHandlerFunction(String strActionName)
     5         {
     6             try
     7             {
     8                 System.Windows.Forms.MessageBox.Show("Action " + strActionName + " was started!",
     9                                         "MyEventHandler");
    10             }
    11             catch (System.InvalidCastException exc)
    12             {
    13                 String strExc = exc.Message;
    14                 System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");
    15             }
    16 
    17             return 0;
    18 
    19         }
    20     }

    Addin Class:

     1         #region IEplAddIn Members
     2 
     3         public bool OnExit()
     4         {
     5             return true;
     6         }
     7 
     8         SystemEventListerner _lstnr = null; 
     9 
    10         public bool OnInit()
    11         {
    12             _lstnr = new SystemEventListerner();
    13             _lstnr.MyEventHandlerFunction(Action.NAME);
    14 
    15             return true;
    16         }
    17 
    18         public bool OnInitGui()
    19         {
    20             Menu m = new Menu();
    21 
    22             uint id = m.GetPersistentMenuId("System messages");
    23 
    24             //menu item
    25             id = m.AddMainMenu("Example", Menu.MainMenuName.eMainMenuUtilities, "Example #1", Action.NAME, Action.DESCR, 1);
    26              
    27             return true;
    28         }
    29 
    30         public bool OnRegister(ref bool bLoadOnStart)
    31         {
    32             //bLoadOnStart = false; // this prevents addin intialization (OnInit, OnInitGui) when P8 starts; not usefull
    33             return true;
    34         }
    35 
    36         public bool OnUnregister()
    37         {
    38             _lstnr = null;
    39             return true;
    40         }
    41 
    42         #endregion

    Action class:

     1         public bool Execute(ActionCallingContext oActionCallingContext)
     2         {
     3             try
     4             {
     5                 using (LockingStep ls = new LockingStep())
     6                 {  
     7                     // 1. Get all terminal strips in the project
     8                     SelectionSet oSelSet = new SelectionSet();
     9                     Project oProj = oSelSet.GetCurrentProject(true);
    10 
    11                     DMObjectsFinder fndr = new DMObjectsFinder(oProj);
    12                     TerminalStrip[] arrTermStrips = fndr.GetTerminalStrips(null);
    13 
    14                     using (UndoStep us = (new UndoManager()).CreateUndoStep())
    15                     {
    16                         // 2. Change a property
    17                         Console.WriteLine("Modifying terminal strips...");
    18                         foreach (TerminalStrip ts in arrTermStrips)
    19                         {
    20                             if (ts.ManualPlacementType != DocumentTypeManager.DocumentType.Circuit
    21                                 && ts.ManualPlacementType != DocumentTypeManager.DocumentType.CircuitSingleLine) continue;
    22 
    23                             string sNewValue = string.Format("{0} - Change at {1}", (new Random()).Next(), DateTime.Now.ToShortTimeString());
    24 
    25                             MessageBox.Show(sNewValue.ToString());
    26 
    27                             MultiLangString mls = new MultiLangString();
    28                             mls.AddString((new Languages()).GuiLanguage.GetNumber(), sNewValue);
    29                             ts.Properties.FUNC_TEXT = mls;
    30                         }
    31 
    32                         // revert changes
    33                         //Console.WriteLine("Reverting changes in project...");
    34                         us.DoUndo();
    35                     }
    36 
    37                     Console.WriteLine("Done.");
    38                 }
    39             }
    40             catch (System.Exception ex)
    41             {
    42                 //Console.WriteLine("ERROR. " + ex.Message);
    43             }
    44             finally
    45             {
    46                 //if (prj != null) prj.Close();
    47 
    48                 GC.Collect();
    49                 GC.WaitForPendingFinalizers();
    50 
    51                 //Console.WriteLine("Press any key.");
    52                 //Console.ReadKey();
    53 
    54                 //eplApp.Exit();
    55             }
    56 
    57             return true;
    58         }

    if any question,welcome you to comment...

  • 相关阅读:
    装饰器模式(学习笔记10)
    软件设计七大原则 (学习笔记2)
    设计模式(学习笔记1)
    桥接模式 (学习笔记9)
    Mini2440裸机开发之LCD基础
    配置中心java客户端实现
    高效CSS写法
    整理电脑里面的前端开发中的小Tips【及时更新】
    IE6 position:fixed (固定定位)的解决方案
    jquery 文档操作
  • 原文地址:https://www.cnblogs.com/AriLee/p/3014603.html
Copyright © 2011-2022 走看看