script

PrintYourStyle

Jan Güttler war so nett und hat ein Script bereitgestellt, welches den Druckvorgang automatisiert. Vielen Dank dafür!
Ein schönes Beispiel wie man mit Seitenfiltern im Scripting arbeiten kann.


Beschreibung:

Skript zur komfortablen und sortierten Ausgabe der Schaltungsunterlagen.
Einzelne Seiten hochkant in A3, beidseitig farbig oder einseitig schwarz weiß, völlig egal.
Alles was der Drucker unterstützt kann ausgenutzt werden.

Download

// Printyourstyle.cs 
//
// v.01
//
// Copyright by Jan Güttler 2020
// EPLAN P8 2.9
//
// Skript zur komfortablen Ausgabe der Elektrodokumentation.
// Im Prinzip kann man hier alles ansprechen, was zum Thema Ausdruck gehört.
// Voraussetzung ist, dass man Die Druckprofile der einzelnen Drucker als einzelnen Drucker installiert hat.
// Die Druckprofile innerhalb des jeweiligen Druckprogrammes lassen sich sicher auch ansprechen, da es aber unheimlich viele Druckprogramme gibt,
// gibt's keinen allgemeingültige Befehl.
//
// Mit Hilfe der Seitenfilter wird nur das an den jeweiligen Drucker gesendet, was auch gedruckt werden soll.
// 
//

using System.Threading;
public class printyourstyle
{
    [DeclareAction ("printyourstyle")] //Diese Action auf einen Button legen nachdem das Script geladen wurde
    public void Fertigung ()
    {
        //Um nicht bei Ausversehenklick gleich loszudrucken nochmal ne Abfrage
        DialogResult oDialogResult = MessageBox.Show ("Soll ich wirklich drucken?", "Letzte Chance!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);

        if (oDialogResult == DialogResult.Yes) //Bei "Ja" gehts los, bei "Nein" wird der Befehl zurückgenommen
        {

            //Filtername aus dem Seitennavigator auslesen (muss sein, weil von diesem Filter die weiteren Schritte abhängen)
            String Pagefilter = new Settings ().GetStringSetting ("USER.PageBrowserGui.PageFilterScheme.LastUsed", 0);

            if (Pagefilter == "Filtername1") //Beispielfilter für Maschinentyp 1
            {

                //Eplan-Druckeinstellungen für den Klemmenplan auf farbig
                CommandLineInterpreter oCLI = new CommandLineInterpreter ();
                ActionCallingContext acc = new ActionCallingContext ();
                acc.AddParameter ("set", "STATION.Print.BlackWhite");
                acc.AddParameter ("value", "0"); //or 0
                oCLI.Execute ("XAfActionSetting", acc);

                //Für die Fertigung sollen Bemaßungen ausgedruckt werden
                acc.AddParameter ("LAYER1", "EPLAN107");
                acc.AddParameter ("PRINTED1", "1");
                oCLI.Execute ("changeLayer", acc);

                //Klemmenplan Maschinentyp 1ausgeben
                ActionCallingContext printContext0001 = new ActionCallingContext ();
                printContext0001.AddParameter ("printername", "Standarddrucker 1"); //z.B.: Drucker mit Druckprofil A4, bunt, einseitig
                printContext0001.AddParameter ("number", "1");
                printContext0001.AddParameter ("printcollate", "0");
                printContext0001.AddParameter ("printreverse", "0");
                printContext0001.AddParameter ("printchangedpages", "0");
                printContext0001.AddParameter ("type", "PAGES");
                printContext0001.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Klemmenpläne Maschinentyp 1");
                new CommandLineInterpreter ().Execute ("print", printContext0001);

                //Zeitschleife, um Blätter nicht zu mischen
                {
                    Thread.Sleep (1000);
                }

                //Eplan-Druckeinstellungen für die Stückliste auf schwarzweiß
                acc.AddParameter ("set", "STATION.Print.BlackWhite");
                acc.AddParameter ("value", "1");
                oCLI.Execute ("XAfActionSetting", acc);

                //Stückliste
                ActionCallingContext printContext0004 = new ActionCallingContext ();
                printContext0004.AddParameter ("printername", "Standarddrucker 2"); //z.B.: Drucker mit Druckprofil A4, bunt, beidseitig
                printContext0004.AddParameter ("number", "1");
                printContext0004.AddParameter ("printcollate", "0");
                printContext0004.AddParameter ("printreverse", "0");
                printContext0004.AddParameter ("printchangedpages", "0");
                printContext0004.AddParameter ("type", "PAGES");
                printContext0004.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Stücklisten Maschinentyp 1");
                new CommandLineInterpreter ().Execute ("print", printContext0004);

                //1 Sekunde warten
                {
                    Thread.Sleep (1000);
                }

                //Stromlaufplan
                ActionCallingContext printContext0013 = new ActionCallingContext ();
                printContext0013.AddParameter ("printername", "Standarddrucker 3"); //z.B.: Drucker mit Druckprofil A4, b/w, beidseitig
                printContext0013.AddParameter ("number", "1");
                printContext0013.AddParameter ("printcollate", "0");
                printContext0013.AddParameter ("printreverse", "0");
                printContext0013.AddParameter ("printchangedpages", "0");
                printContext0013.AddParameter ("type", "PAGES");
                printContext0013.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Stromlaufplan");
                new CommandLineInterpreter ().Execute ("print", printContext0013);

                {
                    Thread.Sleep (1000);
                }

                //Aufbaupläne
                ActionCallingContext printContext0014 = new ActionCallingContext ();
                printContext0014.AddParameter ("printername", "Standarddrucker 4"); //z.B.: Drucker mit Druckprofil A3, farbig, einseitig
                printContext0014.AddParameter ("number", "1");
                printContext0014.AddParameter ("printcollate", "0");
                printContext0014.AddParameter ("printreverse", "0");
                printContext0014.AddParameter ("printchangedpages", "0");
                printContext0014.AddParameter ("type", "PAGES");
                printContext0014.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Aufbauplan");
                new CommandLineInterpreter ().Execute ("print", printContext0014);
            }
            else

            if (Pagefilter == "Filtername2") //Beispielfilter für Kundenunterlagen 		
            {
                //Eplan-Druckeinstellungen für den Klemmenplan auf farbig
                CommandLineInterpreter oCLI = new CommandLineInterpreter ();
                ActionCallingContext acc = new ActionCallingContext ();
                acc.AddParameter ("set", "STATION.Print.BlackWhite");
                acc.AddParameter ("value", "0"); //or 0
                oCLI.Execute ("XAfActionSetting", acc);

                //Für die Kundenunterlagen sollen keine Bemaßungen ausgedruckt werden
                acc.AddParameter ("LAYER1", "EPLAN107");
                acc.AddParameter ("PRINTED1", "0");
                oCLI.Execute ("changeLayer", acc);

                //Kundenklemmenplan Maschinentyp 1 ausgeben
                ActionCallingContext printContext0001 = new ActionCallingContext ();
                printContext0001.AddParameter ("printername", "Standarddrucker 2"); //z.B.: Drucker mit Druckprofil A4, bunt, beidseitig
                printContext0001.AddParameter ("number", "1");
                printContext0001.AddParameter ("printcollate", "0");
                printContext0001.AddParameter ("printreverse", "0");
                printContext0001.AddParameter ("printchangedpages", "0");
                printContext0001.AddParameter ("type", "PAGES");
                printContext0001.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Kundenklemmenpläne Maschinentyp 1");
                new CommandLineInterpreter ().Execute ("print", printContext0001);

                //Zeitschleife, um Blätter nicht zu mischen
                {
                    Thread.Sleep (1000);
                }

                //Eplan-Druckeinstellungen für die Kundenstückliste auf schwarzweiß
                acc.AddParameter ("set", "STATION.Print.BlackWhite");
                acc.AddParameter ("value", "1");
                oCLI.Execute ("XAfActionSetting", acc);

                //Stückliste Kunde
                ActionCallingContext printContext0004 = new ActionCallingContext ();
                printContext0004.AddParameter ("printername", "Standarddrucker 2"); //z.B.: Drucker mit Druckprofil A4, bunt, beidseitig
                printContext0004.AddParameter ("number", "1");
                printContext0004.AddParameter ("printcollate", "0");
                printContext0004.AddParameter ("printreverse", "0");
                printContext0004.AddParameter ("printchangedpages", "0");
                printContext0004.AddParameter ("type", "PAGES");
                printContext0004.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Kundenstücklisten");
                new CommandLineInterpreter ().Execute ("print", printContext0004);

                //1 Sekunde warten
                {
                    Thread.Sleep (1000);
                }

                //Stromlaufplan Kunde
                ActionCallingContext printContext0013 = new ActionCallingContext ();
                printContext0013.AddParameter ("printername", "Standarddrucker 3"); //z.B.: Drucker mit Druckprofil A4, b/w, beidseitig
                printContext0013.AddParameter ("number", "1");
                printContext0013.AddParameter ("printcollate", "0");
                printContext0013.AddParameter ("printreverse", "0");
                printContext0013.AddParameter ("printchangedpages", "0");
                printContext0013.AddParameter ("type", "PAGES");
                printContext0013.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Kundenstromlaufplan");
                new CommandLineInterpreter ().Execute ("print", printContext0013);

                {
                    Thread.Sleep (1000);
                }

                //Aufbaupläne Kunde
                ActionCallingContext printContext0014 = new ActionCallingContext ();
                printContext0014.AddParameter ("printername", "Standarddrucker 1"); //z.B.: Drucker mit Druckprofil A4, farbig, einseitig
                printContext0014.AddParameter ("number", "1");
                printContext0014.AddParameter ("printcollate", "0");
                printContext0014.AddParameter ("printreverse", "0");
                printContext0014.AddParameter ("printchangedpages", "0");
                printContext0014.AddParameter ("type", "PAGES");
                printContext0014.AddParameter ("PAGEFILTERNAME", "Seitenfilter für Kundenaufbauplan");
                new CommandLineInterpreter ().Execute ("print", printContext0014);

            }

        }
        if (oDialogResult == DialogResult.No) //Vertippt, wollte gar nicht drucken
        {
            MessageBox.Show ("Alles klar");
        }
        return;
    }
}
Von |2020-09-14T07:45:47+02:002020-09-04|EPLAN-Scripts|

EPLAN 5 Datenübernahme

EPLAN 5 ist nun schon länger abgekündigt. Mit der EPLAN P8 Version 2.7 kann man Projekte noch migrieren, danach nicht mehr.
Wir haben schon länger für dieses Szenario unser Tool UpgradeProject570 um mehrere Projekt gleichzeitig zu konvertieren.

In der EPLAN Oberfläche gibt es noch diese versteckte Actions:

  • Symbolbibliothek: E5ExfSymbolImportAction
  • Normblatt: E5ExfFrameImportAction
  • Formular: E5ExfFormularImportAction
  • Artikel: E5ExfArticlesImportAction
  • Wörterbuch: XTrImportE5LanguageDbAction
  • Makros: E5ExfMacroImportAction
  • Projekt: E5ExfProjectImportAction

Nun ist der Zeitpunkt gekommen um spätestens jetzt zu migrieren. Wir bei ibKastl bieten das auch als Dienstleistung an. Bei Fragen einfach melden!

Von |2020-05-29T08:10:06+02:002020-05-29|EPLAN, EPLAN-Scripts|

EDZ-Datei automatisiert exportieren

Ich liebe ja das EDZ-Format, alles was zum Artikel in EPLAN gehört ist dabei.

Es gibt den nicht dokumentierten Parameter IXPartsImportExportEdz für den Export via Scripting.
Somit ist es möglich mit der Action partlist auch EDZ-Dateien zu exportieren 🎉

Von |2019-12-05T08:28:47+01:002019-12-05|EPLAN, 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|

Alternative zu Fuslogvw Fusion++

EPLAN Signierung & Ich… eine traurige Geschichte…
Darum bin ich des öfteren gezwungen Fuslogvw zu nutzen um mal die Bindungen und das Laden der DLLs zu betrachten. Das Tool bzw. die UI ist einfach schlimm…

Als ich nun wieder Stunden mit Fuslogvw verbracht habe, suchte ich (erneut) nach einer Alternative. Und jetzt gibt es eine: Fusion++.
Frei, OpenSource, was will man mehr!

Von |2019-09-20T11:24:01+02:002019-09-20|C#, EPLAN|
Nach oben