EPLAN-API

Alles rund um die API in EPLAN

EPLAN 2022: Scripting Neuerungen

2021-06-04

Die Betaversion von EPLAN 2022 ist nun verfügbar. Folgende Änderungen an den Actions habe ich aus den News entnommen.

 

2021-08-05

Die API-Hilfe ist nun auch verfügbar und ich habe die Listen ergänzt.

 

 

Entfernt

Hinzugefügt

Von |2021-08-05T08:08:41+02:002021-08-04|EPLAN, EPLAN-API, EPLAN-Scripts|

DLLs manuell kopieren

Ab EPLAN 2.6 kopiert EPLAN ja die DLLs welche geladen werden in ein ShadowCopy-Verzeichnis.
Mit dem Interface IEplAddInShadowCopy können wir Einfluss nehmen…

Ich habe ein API-Addin, welches per Entity Framework Daten aus der Datenbank abruft. Komischerweise werden nicht alle DLLs kopiert und werden somit nicht vom AssemblyResolver gefunden.

Über das Interface IEplAddInShadowCopy kopiert dieser Code nun alle DLLs manuell, welche im Orginalverzeichnis vorhanden sind:

public void OnBeforeInit(string strOriginalAssemblyPath)
{
  CopyAssemblies(strOriginalAssemblyPath);
}

private void CopyAssemblies(string originalAssemblyPath)
{
  string sourcePath = Path.GetDirectoryName(originalAssemblyPath);
  DirectoryInfo source = new DirectoryInfo(sourcePath);

  Type type = this.GetType();
  string dllLocation = Assembly.GetAssembly(type).Location;
  string destinationPath = Path.GetDirectoryName(dllLocation);
  DirectoryInfo destination = new DirectoryInfo(destinationPath);

  CopyFilesRecursively(source, destination, ".dll");
}

public static void CopyFilesRecursively(DirectoryInfo source, DirectoryInfo target, string fileExtension = null)
{
  IEnumerable<DirectoryInfo> sourceDirectories = source.GetDirectories();
  foreach (DirectoryInfo sourceDirectory in sourceDirectories)
  {
    DirectoryInfo destinationDir = target.CreateSubdirectory(sourceDirectory.Name);
    CopyFilesRecursively(sourceDirectory, destinationDir);
  }
  IEnumerable<FileInfo> sourceFiles;
  if (string.IsNullOrEmpty(fileExtension))
  {
    sourceFiles = source.GetFiles().ToList();
  }
  else
  {
    sourceFiles = source.GetFiles().Where(obj => obj.Extension.Equals(fileExtension)).ToList();
  }

  foreach (FileInfo sourceFile in sourceFiles)
  {
    string destination = Path.Combine(target.FullName, sourceFile.Name);
    if (!File.Exists(destination))
    {
      sourceFile.CopyTo(destination);
    }
  }
}
Von |2019-10-08T12:30:33+02:002019-10-08|EPLAN, EPLAN-API|

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.

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