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...