EPLAN-Scripts

>>EPLAN-Scripts

SVGExportAction

Es handelt sich um eine interne Action von EPLAN, welche offiziell nicht supported wird!

SVG ist ein tolles Format… Hab den Anwendungsfall dass ich SVG aus EPLAN brauche. Darum habe ich mir mal einen Helfer-Klasse geschrieben, damit der Zugriff einfacher ist:

public class SvgExportUtility
{
  public static void ExportProject(Project project, string exportPath, bool isFrameVisible = true)
  {
    if (Directory.Exists(exportPath))
    {
      Directory.Delete(exportPath);
    }

    ActionCallingContext acc = new ActionCallingContext();
    acc.AddParameter("DatabaseId", project.DatabaseIdentifier.ToString());
    acc.AddParameter("ExportPath", exportPath);
    acc.AddParameter("DrawFrame", isFrameVisible.ToString());
    acc.AddParameter("WriteGroupIds", false.ToString());
    new CommandLineInterpreter().Execute("SVGExportAction", acc);
  }

  public static void ExportPage(Page page, string fullFilename, bool isFrameVisible = true)
  {
    if (File.Exists(fullFilename))
    {
      File.Delete(fullFilename);
    }

    ActionCallingContext acc = new ActionCallingContext();
    acc.AddParameter("ExportPath", Path.GetDirectoryName(fullFilename));
    acc.AddParameter("PageObjId", page.ToStringIdentifier());
    acc.AddParameter("Filename", Path.GetFileNameWithoutExtension(fullFilename)); // only name needed
    acc.AddParameter("DrawFrame", isFrameVisible.ToString());
    acc.AddParameter("WriteGroupIds", false.ToString());
    new CommandLineInterpreter().Execute("SVGExportAction", acc);
  }

  public static void ExportPageMacro(Project project, string pageMacroFile, string fullFilename, bool isFrameVisible = true)
  {
    using (PageMacro pageMacro = new PageMacro())
    {
      // Have to insert pages into project because its not working with pageMacro.Pages.First()
      pageMacro.Open(pageMacroFile, project);

      // Set temp structure
      for (var index = 0; index < pageMacro.Pages.Length; index++)
      {
        var pageMacroPage = pageMacro.Pages[index];
        pageMacroPage.NameParts[Properties.Page.PAGE_COUNTER] = "SvgExportUtility" + index;
      }

      var storableObjects = new Insert().PageMacro(pageMacro, project, null, PageMacro.Enums.NumerationMode.None);
      var newPages = storableObjects.OfType().ToList();

      for (var index = 0; index < newPages.Count; index++)
      {
        var newPage = newPages[index];
        var path = Path.GetDirectoryName(fullFilename);
        var filename = Path.GetFileNameWithoutExtension(fullFilename) + "_" + (index + 1) + ".svg";

        // ReSharper disable once AssignNullToNotNullAttribute
        filename = Path.Combine(path, filename);

        if (File.Exists(fullFilename))
        {
          File.Delete(fullFilename);
        }

        ExportPage(newPage, filename, isFrameVisible);

        // Remove pages after export
        newPage.Remove();
      }
    }
  }

  public static void ExportMacro(string macroFile, string fullFilename, int variant, WindowMacro.Enums.RepresentationType representationType)
  {
    if (File.Exists(fullFilename))
    {
      File.Delete(fullFilename);
    }

    ActionCallingContext acc = new ActionCallingContext();
    acc.AddParameter("MacroFile", macroFile);
    acc.AddParameter("Filename1", fullFilename); // Full path needed
    acc.AddParameter("Variant1", variant.ToString());
    acc.AddParameter("RepType1", ((int)representationType).ToString());
    acc.AddParameter("WriteGroupIds", false.ToString());
    new CommandLineInterpreter().Execute("SVGExportAction", acc);
  }
}

Das exportieren von Symbol- & Fenstermakros funktioniert auch im Scripting!

Ich habe auch mal ein kleines Beispiel-Addin geschrieben um die Funktionalitäten zu testen.

By |2019-08-23T08:20:21+02:002019-08-23|EPLAN, EPLAN-API, EPLAN-Scripts|

EPLAN 2.9: Scripting Neuerungen

Folgende Actions sind laut eplan.help hinzugekommen:

XPamSelectPart

Startet die Artikelauswahl.

 

XSettingsRegisterAction

Ermöglicht das Registrieren von Add-ons.

 

XSettingsUnregisterAction

Ermöglicht das Deregistrieren von Add-ons.

 

XTranslateSourceLanguage

Ermöglicht das Übersetzen von Texten in einer bestimmten Quellsprache.

 

Größte Neuerung meiner Meinung nach im Scripting-Bereich ist, dass man nun den ActionCallingContext der Action übergeben kann. Somit ist man nicht mehr auf fixe Parameter eingeschränkt.

By |2019-08-06T08:55:13+02:002019-08-08|EPLAN, EPLAN-Scripts|

ProjectgroupAutoAssignment

FrankS hat wieder mal ein super Script hier bereitgestellt. Vielen Dank!
Hier mal ein Auszug aus der Beschreibung:

Ich habe ein kleines Skript geschrieben um die Möglichkeiten der Projektgruppe in der Eplan Version 2.8 sinnvoll nutzen zu können.

Nach Laden des Skript werden bis zu 4 Projekte (+1 Makroprojekt) in verschiedenen Farben in den Navigatoren markiert.

Damit Ihr die Farben in den Navigatoren auch seht muss in den Einstellung unter ‚Benutzer>Darstellung>Projektgruppen (Definition)‘ die ‚Farbe aktiviert‘ bei allen 5 Gruppen eingeschaltet werden.

Funktion:
Beim öffnen eines Projektes wird dieses automatisch einer Projektgruppe zugeordnet. Dies geht mit bis zu 4 Projektgruppen, die 5. Projektgruppe ist für Makroprojekte vorgesehen und wird von dem Skript ausgelassen. Beim schliessen eines Projektes wird diese Zuordnung wieder entfernt.

Hier noch ein Link in die Online-Hilfe, für diejenigen die noch nicht wissen was Projektgruppen sind.

Download

By |2019-07-19T08:54:10+02:002019-07-19|EPLAN, 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);
By |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;
  }
}
By |2019-04-01T11:15:12+02:002019-04-01|EPLAN, EPLAN-API, EPLAN-Scripts|