Blog

Anzeigesprache per Script ermitteln

Wie so oft ist es in der API ganz einfach… Im Scripting muss man aber einmal einen Roundtrip machen…
Hier eine Action um die Anzeigesprache des Projektes per Script zu ermitteln.

Aufruf:

public void Function()
{
  var languages = GetDisplayLanguages();
  foreach (var language in languages)
  {
    MessageBox.Show(language);
  }
  return;
}

private static List<string> GetDisplayLanguages()
{
  string value = null;
  ActionCallingContext actionCallingContext = new ActionCallingContext();
  new CommandLineInterpreter().Execute("GetDisplayLanguages", actionCallingContext);
  actionCallingContext.GetParameter("value", ref value);
  var split = value.Split(';');
  var languages = split.Where(language => !string.IsNullOrEmpty(language)).ToList();
  return languages;
}

 

Script:

using System.IO;
using System.Xml;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

namespace EplanScriptingProjectBySuplanus.GetDisplayLanguages
{
    public class GetDisplayLanguages
  {
        [DeclareAction("GetDisplayLanguages")]
        public void Action(out string value)
        {
            // Get language from settings
            string tempFile = Path.Combine(PathMap.SubstitutePath("$(TMP)"), "GetDisplayLanguages.xml");

            ActionCallingContext actionCallingContext = new ActionCallingContext();
            actionCallingContext.AddParameter("prj", FullProjectPath());
            actionCallingContext.AddParameter("node", "TRANSLATEGUI");
            actionCallingContext.AddParameter("XMLFile", tempFile);
            new CommandLineInterpreter().Execute("XSettingsExport", actionCallingContext);

            // Needed because there is no direct access to setting
            string language = GetValueSettingsXml(tempFile, "/Settings/CAT/MOD/Setting[@name='DISPLAYED_LANGUAGES']/Val");
            value = language;
        }

        private static string GetValueSettingsXml(string filename, string url)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(filename);
            XmlNodeList rankListSchemaName = xmlDocument.SelectNodes(url);
            if (rankListSchemaName != null && rankListSchemaName.Count > 0)
            {
                string value = rankListSchemaName[0].InnerText;
                return value;
            }
            return null;
        }

        private static string FullProjectPath()
        {
            ActionCallingContext acc = new ActionCallingContext();
            acc.AddParameter("TYPE", "PROJECT");

            string projectPath = string.Empty;
            new CommandLineInterpreter().Execute("selectionset", acc);
            acc.GetParameter("PROJECT", ref projectPath);

            return projectPath;
        }
    }
}

 

Ihr findet das wie gewohnt auf GitHub.

Von |2019-03-14T08:30:01+01:002018-09-07|EPLAN, EPLAN-Scripts|

EPLAN Version ermitteln

Vielen Dank an nairolf für die Bereitstellung der schönen Methode um die EPLAN Version zu ermitteln. Funktioniert in API & Scripting. Man kann das dann z.B. so verwenden:

if (EplanApplicationInfo.GetActiveEplanVersion() >= 270)
{
  FlyToTheRainbowIn27();
}

Die Methode:

using System;
using System.Diagnostics;
using System.IO;
using Eplan.EplApi.Base;

namespace Suplanus.Sepla.Application
{
  public class EplanApplicationInfo
  {
    public static int GetActiveEplanVersion()
    {
      string eplanVersion = "0"; //default value = 0 to ensure, that EPLAN-version is correctly recognized 

      //try new variable $(EPLAN_VERSION) first, if not valid, no possibility to get active get active EPLAN-version
      if (PathMap.SubstitutePath("$(EPLAN_VERSION)") != "$(EPLAN_VERSION)")
      {
        eplanVersion = PathMap.SubstitutePath("$(EPLAN_VERSION)");
      }
      else
      {
        //try different method to get version of executing eplan, in case the actual version doesn't support $(EPLAN_VERSION)
        string dllFilename = Path.Combine(PathMap.SubstitutePath("$(BIN)"), "Eplan.EplApi.Baseu.dll");
        FileInfo fileInfo = new FileInfo(dllFilename);
        if (fileInfo.Exists)
        {
          var versionInfo = FileVersionInfo.GetVersionInfo(dllFilename);
          //return main-version-infos (without build number)
          if (versionInfo.ProductVersion.Length >= 5)
          {
            eplanVersion = versionInfo.ProductVersion.Substring(0, 5);
          }
        }
      }

      if (eplanVersion == "0" || eplanVersion == "$(EPLAN_VERSION)")
      {
        MultiLangString multiLangErrorText = new MultiLangString();
        multiLangErrorText.AddString(ISOCode.Language.L_de_DE, "Die aktuelle EPLAN-Version konnte nicht ermittelt werden.");
        multiLangErrorText.AddString(ISOCode.Language.L_en_US, "Unable to get actual EPLAN-version.");
        ISOCode.Language guiLanguage = new Languages().GuiLanguage.GetNumber();
        string errorText = multiLangErrorText.GetStringToDisplay(guiLanguage);
        if (String.IsNullOrEmpty(errorText))
        {
          //if actual GUI-language is not defined in multi-language-string, use en_US-text-version
          errorText = multiLangErrorText.GetStringToDisplay(ISOCode.Language.L_en_US);
        }
        new BaseException(errorText, MessageLevel.Warning).FixMessage(); 
        eplanVersion = "0";
      }
      return Convert.ToInt32(eplanVersion.Replace(".", string.Empty));
    }
  }
}

Findet Ihr auch hier auf GitHub.

Von |2022-03-28T08:08:11+02:002018-09-04|EPLAN, EPLAN-API, EPLAN-Scripts|

iMac Lampe

Fand das Design des iMacs G3 immer sehr schön und sogar zeitlos. Durch Zufall hab ich einen alten günstig bekommen (Ebay-Preis derzeit ca. 50€).
Aber eigentlich war mir nicht klar was ich damit mache… So hab ich Ihn auf mein Sideboard im Büro gestellt.

Naja, aber da sind zwei Schränke, somit musste ein zweiter her.

Sah schon gut aus, aber irgendwie erinnerten Sie mich an eine Lampe… also machen wir eine Lampe draus.
Alle Bauteile ausgebaut, was nicht so einfach war. Fertige Plexiglasscheibe in Milch-Optik im Internet bestellt (günstiger als im Baumarkt).
Mit Sekundenkleber angeklebt. Innen drin eine E27 Fassung mit Sockel montiert. Kabel dran.

Als Lampe verwende ich eine Phillips Hue bzw. heißt jetzt Signify. Dadurch kann ich verschiedene Farben machen und sogar zur Musik animieren.
Somit können die Fische bisl Party machen.

Finde es sieht super aus (auch am Tag). Einfach und günstig selber zu bauen.

Von |2018-08-23T12:19:17+02:002018-08-24|Projekte|

SyncProjects

Es gibt mal wieder ein neues Produkt von uns, was für mich in die Kategorie gehört “was man eigentlich schon immer gebraucht hätte”.
Hat man, wie es sich gehört, Basisprojekt und mindestens ein Makroprojekt, kommt man in die missliche Lage dass man die Einstellungen bei Änderungen immer über alle Projekte verteilen muss.

Das nimmt einen SyncProjects ab und verteilt folgendes:

  • Projekteinstellungen
  • Ebenen
  • Eigenschaftsanordnungen
  • Benutzerdefinierte Zusatzfelder

 

Von |2018-08-23T12:17:02+02:002018-08-23|EPLAN, ShopForProcess|

Wie ein continue die CPU ärgert

Ich hatte durch Zufall gesehen, dass einer meiner Python Prozesse die CPU in die Höhe schießt.
Es handelt sich um meine HueRainbowClock

Tja, aber warum? Ich hab doch extra was eingebaut damit die CPU geschont wird:

while(True):	
	# Check time
	now = datetime.datetime.now()
	hour = int(now.strftime("%H"))

	# Check if already set
	if hour == hourBefore:
		continue # do nothing

	# Doit
	DingDong()
	
	# Sleep (gentle CPU)
	time.sleep(60)

Mein Blick fiel dann gleich auf das continue  … dann musste ich an “Weniger schlecht Programmieren” denken.
Die sleep()  Methode wurde nie erreicht…

Darum sollte man mit sowas immer vorsichtig sein, oder gar ganz vermeiden.

Von |2018-08-21T13:11:32+02:002018-08-22|Coding, Python|
Nach oben