EPLAN-Scripts

Navigator aktualisieren

Um Navigatoren in EPLAN zu aktualisieren (wie F5 drücken), könnt ihr folgenden Action verwenden:

GfDlgMgrActionReload /DialogName:<Name des Dialogs>

Der Seitennavigator hat hier eine eigene Methode, da hier noch der Filter mit dran hängt:

EventParameterString eventParameterString = new EventParameterString(); 
eventParameterString.String = "RefreshPageFilter"; 
new EventManager().Send("RefreshPageFilter", eventParameterString);
Von |2019-04-10T13:12:11+02:002019-04-11|EPLAN, EPLAN-Scripts|

API-Addins & Scripte auslesen

Im CAD.de-Forum gab es die Frage wie man auslesen kann welche API-Addins und Scripte geladen sind. Ich habe das mal ausprogrammiert:

using System.Windows.Forms;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
using System.Collections.Generic;
using System.Collections.Specialized;

public class ReadApiAddinsAndScripts
{
  [Start]
  public void Action()
  {
    // API addins
    List<string> apiAddins = GetApiAddins();
    string apiAddinsText = string.Join("\n", apiAddins);
    MessageBox.Show(apiAddinsText, "ApiAddins", MessageBoxButtons.OK, MessageBoxIcon.Information);

    // scripts
    List<string> scripts = GetScripts();
    string scriptsText = string.Join("\n", scripts);
    MessageBox.Show(scriptsText, "Scripts", MessageBoxButtons.OK, MessageBoxIcon.Information);
  }

  public List<string> GetApiAddins()
  {
    List<string> list = new List<string>();
    Settings settings = new Settings();
    SettingNode settingsNode = new SettingNode("STATION.EplanEplApiModule.Module");
    StringCollection nodes = new StringCollection();
    settingsNode.GetListOfNodes(ref nodes, false);
    foreach (string node in nodes)
    {
      SettingNode subNode = settingsNode.GetSubNode(node);
      string name = subNode.GetNodePath() + ".AssemblyName";
      var text = settings.GetStringSetting(name, 0);
      list.Add(text);
    }
    return list;
  }

  private List<string> GetScripts()
  {
    List<string> list = new List<string>();
    Settings settings = new Settings();
    string settingsPath = "STATION.EplanEplApiScriptGui.Scripts";
    var count = settings.GetCountOfValues(settingsPath);
    for (var index = 0; index < count; index++)
    {
      var text = settings.GetStringSetting(settingsPath, index);
      list.Add(text);
    }
    return list;
  }
}
Von |2019-04-01T11:15:12+02:002019-04-01|EPLAN, EPLAN-API, EPLAN-Scripts|

Normblatt umschalten

Dachte ich hätte das hier schon gepostet, aber da ging es nur um Normblatt für Seite umschalten.
Dank an FrankS der hier beschreibt wie man das auch für das Projekt machen kann:

public class Script
{
  [Start]
  public void XAfActionSettingProject_Start()
  {
    CommandLineInterpreter cli = new CommandLineInterpreter();
    ActionCallingContext acc = new ActionCallingContext();
    acc.AddParameter("set", "TrDMProject.Frame");
    acc.AddParameter("value", "FN1_001");
    cli.Execute("XAfActionSettingProject", acc);
    cli.Execute("XPrjActionProjectCompleteMasterData", acc); // Update masterdata

    // Refresh the GED
    EventParameterString eventParameterString = new EventParameterString();
    eventParameterString.String = "";
    new EventManager().Send("PageManagement.ProjectSettings.Changed", eventParameterString);

    return;
  }
}
Von |2019-03-26T09:36:19+01:002019-03-27|EPLAN, EPLAN-Scripts|

Fenstermakro an bestimmter Position einfügen

Aufgrund der Diskussion hier, hab ich das ganze mal getestet.
Mit dem Script kann man ein Fenstermakro an auf einer bestimmten Seite mit X- & Y-Koordinaten einfügen.

Mir ist nicht ganz klar was passiert wenn das Laden des Makros (übers Netzwerk) länger dauert. Denke aber dann würde es nicht funktionieren.
Hab hier im Beispiel mal eine Sekunde Wartezeit eingebaut.
Und die Maus sollte beim Ausführen nicht bewegt werden. Denke könnte man auch irgendwie blocken.
Mal ne Idee: Man wartet auf das Resultat des CLI  fürs einfügen.

Danke an SgbMarkus für das Bereitstellen des Codes.

using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;

public class Script
{
  [Start]
  public void Action()
  {
    InsertMacro(@"C:\Test\Test.ema", "/2");
  }

  private void InsertMacro(string macroFileName, string pageName)
  {
    Edit(pageName);
    Parallel.Invoke(() =>
                      InsertMacro(macroFileName),
                    KeyPress);
  }

  private static void InsertMacro(string macroFileName)
  {
    ActionCallingContext acc = new ActionCallingContext();
    acc.AddParameter("Name", "XMIaInsertMacro");
    acc.AddParameter("filename", macroFileName);
    acc.AddParameter("variant", "0");
    CommandLineInterpreter cli = new CommandLineInterpreter();
    cli.Execute("XGedStartInteractionAction", acc);
  }

  private static void Edit(string pageName)
  {
    ActionCallingContext acc = new ActionCallingContext();
    acc.AddParameter("PAGENAME", pageName); // Full page name
    acc.AddParameter("X", "100");
    acc.AddParameter("Y", "100");
    CommandLineInterpreter cli = new CommandLineInterpreter();
    cli.Execute("edit", acc);
  }

  private void KeyPress()
  {
    Thread.Sleep(1000);
    SendKeys.SendWait("{ENTER}");
  }
}

 

Von |2019-07-26T09:53:12+02:002019-02-04|EPLAN, EPLAN-Scripts|

Seitenfilter Filtereinstellungen per Script setzen

Nun habe ich schon gezeigt wie man ein Seitenfilter Schema aktiv schalten kann… Und hier seht ihr wie man einzelnen Filtereinstellungen hinzufügen kann.
In diesem Beispiel wird der Filter neu erstellt und eine Filtereinstellung hinzugefügt:

  • Kriterium: Seitenbeschreibung
  • Wert: Test
public class PageFilterExample
{
  private const string SCHEME_NAME = "MyFilter";
  private const string SETTINGS_PATH = "USER.PageBrowserGui.PageFilterScheme";

  [DeclareAction("PageFilterExample")]
  public void Action()
  {
    try
    {
      // Remove filter if exists
      SchemeSetting schemeSetting = new SchemeSetting();
      schemeSetting.Init(SETTINGS_PATH);
      if (schemeSetting.CheckIfSchemeExists(SCHEME_NAME))
      {
        schemeSetting.RemoveScheme(SCHEME_NAME);
      }

      // Create filter
      MultiLangString mlName = new MultiLangString();
      mlName.AddString(ISOCode.Language.L___, SCHEME_NAME);

      MultiLangString mlDescription = new MultiLangString();
      mlDescription.AddString(ISOCode.Language.L___, "My Description");
      schemeSetting.CreateScheme(SCHEME_NAME, mlName, mlDescription);

      SetSchemeSettings();

      // Update page filter
      schemeSetting.SetLastUsed(SCHEME_NAME);
      new Settings().SetBoolSetting("USER.PageBrowserGui.PageFilterScheme.ApplyCheckBox", true, 0);
      EventParameterString eventParameterString = new EventParameterString();
      eventParameterString.String = "RefreshPageFilter";
      new EventManager().Send("RefreshPageFilter", eventParameterString);
    }
    catch (Exception exception)
    {
      var baseException = new BaseException("PageFilterExample: " + exception, MessageLevel.Error);
      baseException.FixMessage();
      new Decider().Decide(EnumDecisionType.eOkDecision, exception.ToString(), "SetPageFilter",
        EnumDecisionReturn.eOK, EnumDecisionReturn.eOK, null, false, EnumDecisionIcon.eFATALERROR);
    }
  }

  private void SetSchemeSettings(int index = 0)
  {
    // Setup path: < is in the default schemes also, don't know why
    const string SETTINGS_PATH_SCHEME_SETTINGS = SETTINGS_PATH + "." + SCHEME_NAME + ".Data<.";

    // Set single (needed) settings
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Value", "Test", index); // Search value
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "PropDescr", "11011;0", index); // page property id & index
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Activ", true, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "CriteriaType", 0, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "IgnoreCase", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Negation", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Operator", 0, index);      
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "QuickFilter", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "RelationDescr", "0;0", index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "SingleValue", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "UseWildcards", true, index);      
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "WholeText", true, index);
  }

  public void SetSchemeSetting(string settingsPath, object value, int index = 0)
  {
    // Add settings nodes (needed because SchemeSetting.Set don't create Settings) & Set filter entries
    var settings = new Settings();
    if (value is bool)
    {
      settings.AddBoolSetting(settingsPath, new[] { (bool)value }, ISettings.CreationFlag.Insert);
      settings.SetBoolSetting(settingsPath, (bool)value, index);

    }
    else if (value is int)
    {
      var range = new[] { new Range { FromValue = 0, ToValue = 32768 } };
      settings.AddNumericSetting(settingsPath, new[] { (int)value }, range, ISettings.CreationFlag.Insert);
      settings.SetNumericSetting(settingsPath, (int)value, 0);

    }
    else if (value is string)
    {
      settings.AddStringSetting(settingsPath, new string[] { }, new string[] { }, ISettings.CreationFlag.Insert);
      settings.SetStringSetting(settingsPath, value.ToString(), 0);
    }
    else if (value is MultiLangString)
    {
      settings.AddMultiLangStringDefault(settingsPath, new MultiLangString[] { }, new MultiLangString[] { }, ISettings.CreationFlag.Insert);
      settings.SetMultiLangStringSetting(settingsPath, (MultiLangString) value, 0);
    }
    else
    {
      throw new NotImplementedException("SetSchemeSetting: Unknow type --> " + value.GetType());
    }
  }

}
Von |2018-11-30T16:16:09+01:002018-12-12|EPLAN, EPLAN-Scripts|
Nach oben