Blog

>Blog>

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|

Syncfusion SfDataGrid groups state

Ich nutze sehr gerne das SfDataGrid von Syncfusion. Die Lizenz ist auch super für kleine Unternehmen.
Normalerweise sollte man mit MVVM nicht dazu gezwungen sein die ItemSource neu zu setzen. Es gibt aber ein paar Edgecases da ist es notwendig.

Leider geht dadurch der State vom DataGrid verloren. So werden Gruppen z.B. wieder eingeklappt.
Der super Support von Syncfusion hat mir bei meinem Vorhaben unterstützt. Für dieses Problem hab ich dann eine kleine Extension geschrieben.
Wichtig ist dass AutoExpandGroups = false; gesetzt ist, sonst werden immer alle Gruppen ausgeklappt.

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Syncfusion.Data;
using Syncfusion.UI.Xaml.Grid;

namespace Suplanus.Test.Extension
{
  internal static class SfDataGridExtensions
  {
    public static void RebindTo(this SfDataGrid dataGrid, object itemSource)
    {
      // Save state
      List<Group> expandedGroups = new List<Group>();
      ReadOnlyObservableCollection<object> groups = dataGrid.View?.Groups;
      if (groups != null)
      {
        dataGrid.AutoExpandGroups = false;
        foreach (Group group in groups)
        {
          if (group.IsExpanded)
          {
            expandedGroups.Add(group);
          }
        }
      }

      // Rebind
      dataGrid.ItemsSource = null;
      dataGrid.ItemsSource = itemSource;

      // Set state
      if (dataGrid.View?.Groups != null)
      {
        foreach (Group group in dataGrid.View.Groups)
        {
          Group isExpandGroup = group;
          Group key = expandedGroups.FirstOrDefault(c => c.Key.ToString() == isExpandGroup.Key.ToString());
          do
          {
            if (key != null)
            {
              dataGrid.ExpandGroup(isExpandGroup);
            }

            if (isExpandGroup.Groups != null)
            {
              isExpandGroup = isExpandGroup.Groups[0];
              key = expandedGroups.FirstOrDefault(
                col => col.Groups[0].Key.ToString() == group.Groups[0].Key.ToString());
            }
            else
            {
              isExpandGroup = null;
            }
          }
          while (isExpandGroup != null);
        }
      }
    }
  }
}
By |2019-08-08T07:51:45+02:002019-08-07|C#|

500. Beitrag

Bin selbst überrascht… 500 Beiträge hab ich hier auf Suplanus geschrieben. Das ganze in knapp 10 Jahren. Macht mich schon stolz 🦄
Vielen Dank an dieser Stelle auch an alle Personen die dazu beigetragen haben!
Dazu gehört auch jede Person, welche einen von über 800 Kommentare geschrieben hat.

By |2019-08-05T11:30:46+02:002019-08-06|Allgemein|