Archiv für das Jahr: 2015

XEsSetProjectPropertyAction PropertyIdentName

EPLAN hat ja die Handhabung mit benutzerdefinierten Eigenschaften geändert.
Diese können nun über Optionen > Eigenschaften konfigurieren… geändert werden.

Leider hat EPLAN nicht gesagt wie man diese Eigenschaften dann auch Schreiben kann.
In der Action XEsSetProjectPropertyAction ist nur dokumentiert wie man die ID-bezogenen Eigenschaften setzt.

Es gibt, wie so oft, einen nicht dokumentierten Parameter namens PropertyIdentName mit dem man die Eigenschaften ansprechen kann.

Beispiel:

  • Projekt
  • Seite
  • Funktion
  • Artikelreferenz
XEsSetProjectPropertyAction /PropertyIdentName:"EPLAN.Project.UserSupplementaryField1" /PropertyIndex:0 /PropertyValue:"My project property"

XEsSetPagePropertyAction /PropertyIdentName:"EPLAN.Page.UserSupplementaryField1" /PropertyIndex:0 /PropertyValue:"My page property"

XEsSetPropertyAction /PropertyIdentName:"EPLAN.Function.UserSupplementaryField1" /PropertyIndex:0 /PropertyValue:"My function property"

XEsSetPropertyAction /PropertyIdentName:"EPLAN.ArticleRef.EPLAN.PartRef.UserSupplementaryField1" /PropertyIndex:1 /PropertyValue:"My articlereference property"
Von |2017-11-09T11:22:18+01:002015-12-02|EPLAN, EPLAN-Scripts|

Pushover unter Mono

Ich hab ja die Superkraft in Probleme zu laufen die wohl sonst keiner hat…

Wenn man unter Mono auf den Dienst Pushover zugreifen will dann ist es notwendig das Zertifikat zu registrieren (Shell):

certmgr -ssl https://api.pushover.net --machine

Mir ist es aufgefallen als ich mit der .NET-Library NPushOver gearbeitet habe… kann ich sehr empfehlen.
Da hatte ich aber auch das Problem dass ich Push-Notifications ohne Inhalt (Body) versenden wollte. Bekam dann immer einen 400er Fehler. Liegt daran dass Pushover keine leeren Notifications erlaubt.

Pushover API

Von |2015-11-24T10:39:24+01:002015-11-24|C#, Mono|

ToggleLayers

Ich habe im letzten Jahr, seit Veröffentlichung von EPLAN 2.4, viele Anfragen bzgl. der EPLAN API Erweiterung ToggleLayers erhalten.

Mit diesem API Addin das von allen EPLAN Anwendern, auch ohne API genutzt werden kann, ist es möglich Ebenen per Scripting zu steuern.

Leider habe ich keine Freigabe für den Download bekommen. Aber die Anmerkung dass User welche diese Funktion brauchen beim Support danach fragen sollen.

Somit ist geklärt: Auch mit EPLAN 64bit (2.4/2.5) ist es möglich die Ebenen umzuschalten.

Hier die Doku der Action:

Actionname
ToggleLayers

Parameter
LAYERSTATE

Werte

  • Name der Ebene zum Beispiel EPLAN491
  • Textgröße zum Beispiel 1,0
  • Sichtbar Wert y für sichtbar / n für unsichtbar
  • Drucken Wert y für Druckausgabe / n für keine Druckausgabe
  • Farbe gemäß der Farbnummern in EPLAN z.B. 102

Beispiel:

ToggleLayers /LAYERSTATE:"EPLAN491|1,0|y|y|102"
Von |2017-11-09T11:22:18+01:002015-11-24|EPLAN, EPLAN-Scripts|

Abkündigung EPLAN 5 / EPLAN 21

Irgendwie ist das total an mir vorbeigegangen und hab es zufällig im EPLAN Solution Center gelesen…

Falls es auch so geht, hier die offizielle Meldung:

2015-11-23_09-35-20

Was das für Konsequenzen für EPLAN Electric P8 hat, weiß ich leider auch nicht. Ob die Funktion EPLAN 5 / 21 Import irgendwann wegfällt oder Ähnliches.

Von |2015-11-23T09:39:46+01:002015-11-23|EPLAN|

Suplanus Eplan Api… Sepla

Da ich demnächst mehr mit der EPLAN API arbeiten darf, hab ich die Entscheidung getroffen einen Teil davon Open Source zu stellen.

Es handelt sich um eine Standard Library um gewisse Abläufe zu vereinfachen.
Der Name ist nicht gerade kreativ gewählt, aber das Kind braucht ja einen Namen :)
Würde mich freuen wenn ihr auch daran mitarbeitet! Man findet alles auf GitHub

Als erstes möchte ich gleich die Implementierung einer Offline-Application vorstellen.
Es ist nicht ganz einfach ein Programm mit EPLAN Anbindung zu schreiben. Der Aufruf mit Sepla erfolgt wie folgt:

string binPath = Starter.GetBinPath();
IntPtr handle = new WindowInteropHelper(this).Handle;
EplanOffline eplanOffline = new EplanOffline();
eplanOffline.Start(handle, binPath);
if (!eplanOffline.IsRunning)
{
    throw new NotImplementedException();
}

Geschlossen wird das ganze dann über:

eplanOffline.Close();

 

Im Hintergrund arbeiten zwei Klassen, damit eine Trennung gewährleistet ist. Denn der Resolver muss erst die Assemblies laden.

Starter.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Eplan.EplApi.Starter;

namespace Suplanus.Sepla.Application
{
    /// <summary>
    /// EPLAN Starter Helper: No other EPLAN-Namespaces are allowd
    /// </summary>
    public class Starter
    {
        public static string GetBinPath()
        {
            List<EplanData> eplanVersions = new List<EplanData>();

            List<EplanData> eplanVersions32bit = new List<EplanData>();
            new EplanFinder().GetInstalledEplanVersions(ref eplanVersions32bit);
            eplanVersions.AddRange(eplanVersions32bit);

            List<EplanData> eplanVersions64bit = new List<EplanData>();
            new EplanFinder().GetInstalledEplanVersions(ref eplanVersions64bit, true);
            eplanVersions.AddRange(eplanVersions64bit);

            eplanVersions = new List<EplanData>(eplanVersions
                .Where(obj => obj.EplanVariant.Equals("Electric P8"))
                .OrderBy(obj => obj.EplanVersion));

            EplanData eplanData = eplanVersions.LastOrDefault();

            var binPath = Path.GetDirectoryName(eplanData.EplanPath);

            AssemblyResolver resolver = new AssemblyResolver();
            resolver.SetEplanBinPath(binPath);
            resolver.PinToEplan();

            return binPath;
        }
    }
}

 

EplanOffline.cs

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Eplan.EplApi.Starter;
using Eplan.EplApi.System;

namespace Suplanus.Sepla.Application
{
    public class EplanOffline
    {
        public EplApplication Application;

        public bool IsRunning
        {
            get { return Application != null; }
        }

        public void Start(IntPtr handle, string binPath)
        {
            if (Application == null)
            {
                try
                {
                    EplApplication eplApplication = new EplApplication();
                    eplApplication.EplanBinFolder = binPath;
                    eplApplication.ResetQuietMode();
                    eplApplication.SetMainFrame(handle);
                    eplApplication.Init("", true, true);
                    Application = eplApplication;
                }
                catch
                {
                    Application = null;
                } 
            }
        }

        public void Close()
        {
            if (Application != null)
            {
                Application.Exit();
                Application = null;
            }
        }
    }
}

Suplanus.Sepla auf GitHub

Von |2017-11-09T11:24:05+01:002015-11-19|EPLAN, EPLAN-API|
Nach oben