EPLAN

ConnectionPointDesignationReverse

Frank Schöneck hat wieder ein super Script geschrieben um Anschlussbezeichnungen zu drehen.
Das Script ist im Kontextmenü ausführbar. Vielen Dank!

P8_20151001_01 P8_20151001_02

Download auf GitHub

// ConnectionPointDesignationReverse.cs
//
// Erweitert das Kontextmenü von 'Anschlussbezeichnungen',
// im Dialog 'Eigenschaften (Schaltzeichen): Allgemeines Betriebsmittel',
// um den Menüpunkt 'Reihenfolge drehen'.
// Es wird die Eingabe im Feld 'Anschlussbezeichnungen' automatisch gedreht.
//
// Copyright by Frank Schöneck, 2015
// letzte Änderung:
// V1.0.0, 04.03.2015, Frank Schöneck, Projektbeginn
//
// für Eplan Electric P8, ab V2.3

using System;
using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class ConnectionPointDesignationReverse
{

	[DeclareMenu]
	public void ProjectCopyContextMenu()
	{
		//Context-Menüeintrag
		string menuText = getMenuText();
		Eplan.EplApi.Gui.ContextMenu oContextMenu = new Eplan.EplApi.Gui.ContextMenu();
		Eplan.EplApi.Gui.ContextMenuLocation oContextMenuLocation = new Eplan.EplApi.Gui.ContextMenuLocation("XDTDataDialog", "4006");
		oContextMenu.AddMenuItem(oContextMenuLocation, menuText, "ConnectionPointDesignationReverse", true, false);
	}

	[DeclareAction("ConnectionPointDesignationReverse")]
	public void Action()
	{
		try
		{
			string sSourceText = string.Empty;
			string sReturnText = string.Empty;
			string EplanCRLF = "¶";

			//Zwischenablage leeren
			System.Windows.Forms.Clipboard.Clear();

			//Zwischenablage füllen
			CommandLineInterpreter oCLI = new CommandLineInterpreter();
			oCLI.Execute("GfDlgMgrActionIGfWind /function:SelectAll"); // Alles markieren
			oCLI.Execute("GfDlgMgrActionIGfWind /function:Copy"); // Kopieren

			if (System.Windows.Forms.Clipboard.ContainsText())
			{
				sSourceText = System.Windows.Forms.Clipboard.GetText();
				if (sSourceText != string.Empty)
				{
					string[] sAnschlussbezeichnungen = sSourceText.Split(new string[] { EplanCRLF }, StringSplitOptions.None);

					if (sAnschlussbezeichnungen.Length > 2) // Mehr als 2 Anschlussbezeichnungen
					{
						Decider eDecision = new Decider();
						EnumDecisionReturn eAnswer = eDecision.Decide(EnumDecisionType.eYesNoDecision,
							"Sollen die Anschlussbezeichnungen paarweise gedreht werden?",
							"Reihenfolge drehen",
							EnumDecisionReturn.eYES,
							EnumDecisionReturn.eYES,
							"ConnectionPointDesignationReverse",
							true,
							EnumDecisionIcon.eQUESTION);

						if (eAnswer == EnumDecisionReturn.eYES)
						{
							// String neu aufbauen
							for (int i = 0; i < sAnschlussbezeichnungen.Length; i = i + 2)
							{
								sReturnText += sAnschlussbezeichnungen[i + 1] + EplanCRLF + sAnschlussbezeichnungen[i] + EplanCRLF;
							}
						}
						else
						{
							// String Array drehen
							Array.Reverse(sAnschlussbezeichnungen);

							// String neu aufbauen
							foreach (string sAnschluss in sAnschlussbezeichnungen)
							{
								sReturnText += sAnschluss + EplanCRLF;
							}
						}
					}
					else // Nur 2 Anschlussbezeichnungen
					{
						// String Array drehen
						Array.Reverse(sAnschlussbezeichnungen);

						// String neu aufbauen
						foreach (string sAnschluss in sAnschlussbezeichnungen)
						{
							sReturnText += sAnschluss + EplanCRLF;
						}
					}

					// letztes Zeichen wieder entfernen
					sReturnText = sReturnText.Substring(0, sReturnText.Length - 1);

					//Zwischenablage einfügen
					System.Windows.Forms.Clipboard.SetText(sReturnText);
					oCLI.Execute("GfDlgMgrActionIGfWind /function:SelectAll"); // Alles markieren
					oCLI.Execute("GfDlgMgrActionIGfWindDelete"); // Löschen
					oCLI.Execute("GfDlgMgrActionIGfWind /function:Paste"); // Einfügen
				}
			}
		}
		catch (System.Exception ex)
		{
			MessageBox.Show(ex.Message, "Reihenfolge drehen, Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
		}
		return;
	}

	// Returns the menueitem text in the gui langueage if available.
	private string getMenuText()
	{
		MultiLangString muLangMenuText = new MultiLangString();
		muLangMenuText.SetAsString(
			"de_DE@Reihenfolge drehen;" +
			"en_US@rotate order;"
			);

		ISOCode guiLanguage = new Languages().GuiLanguage;
		return muLangMenuText.GetString((ISOCode.Language)guiLanguage.GetNumber());
	}

}

 

Von |2015-10-01T15:22:09+02:002015-10-01|EPLAN|

EplanCOMApplication 32/64bit

Ich habe ja schon beschrieben wie man die COM-Schnittstelle von EPLAN nutzen kann. Nun ist es aber wichtig zu wissen dass diese in 32bit und 64bit vorliegt.

2015-08-21_07-29-42

Die zuerst gestartete EPLAN Instanz startet auch den COM-Server in der jeweiligen Variante.

Somit ist zu beachten dass für 64bit EPLAN eure Applikation auch in 64bit kompiliert werden muss.
Ich habe mehrere EPLAN-Versionen im Einsatz somit habe ich auch verschiedene (eigene) Applikationen installiert.

 

Von |2017-11-09T11:22:19+01:002015-09-25|EPLAN, EPLAN-Scripts|

EPLAN 2.5: Scripting Neuerungen

EPLAN ist in Version 2.5 nun offiziell released.

Mit den News zur neuen Version (leider nur im Supportbereich von EPLAN erhältlich), teilt EPLAN den Anwendern schön mit, was sich alles geändert hat.

Leider wird hier das Scripting vernachlässigt. Es sind nämlich neue (offizielle Action) dazugekommen, welche in den News nicht erwähnt werden.

Bis zum Schluss habe ich gehofft dass die API-Hilfe auch online verfügbar ist, aber das ist leider nicht der Fall.

Anbei alle neuen Actions in EPLAN 2.5:

Action

Beschreibung

CreateTopologyFunctions

Erzeugt Topologie-Funktionen.

ExportSegmentsTemplate

Exportiert Segmentvorlagen in eine Datei.

ImportPrePlanningData

Importiert Vorplanungsdaten.

ImportSegmentsTemplate

Importiert Segmentvorlagen aus einer Datei in ein Projekt.

InsertModelViewAction

Fügt Modell-Ansichten in ein Projekt ein.

RouteTopology

Verlegt Verbindungen (Topologie).

SpExportSubProject

Lagert ein Projekt aus, welches im Bearbeitungsmodus “Exklusiv” geöffnet worden sein muss.

SpImportSubProject

Importiert ein Projekt, welches exklusiv geöffnet worden sein muss.

UpdateSegmentsFilling

Berechnet den Wert der Eigenschaft “Füllgrad” (ID 20332) und weist ihn allen Segmenten des Projekts zu.

XCMRemoveUnnecessaryNDPsAction

Entfernt überflüssige Netzdefinitionspunkte aus dem aktuellen Projekt. Falls erforderlich werden Verbindungsdefinitionspunkte auf die Verbindungen des Netzes platziert, so dass keine Eigenschaften verloren gehen.

XCMUniteNetDefinitionPointsAction

Vereinigt Netzdefinitionspunkte, die im gleichen Netz des aktuellen Projekts platziert sind. Ist mehr als ein Netzdefinitionspunkt im gleichen Netz platziert, werden diese Netzdefinitionspunkte (d.h. ihre Verbindungen) in einen einzelnen Netzdefinitionspunkt zusammengeführt. Nach der Ausführung dieser Aktion existiert also maximal ein Netzdefinitionspunkt pro Netz, der alle netzbasierten Verbindungen des Netzes enthält.

XMActionDCCommonExport

Startet den Export für die externe Bearbeitung.

Von |2018-12-10T13:36:26+01:002015-08-18|EPLAN, EPLAN-Scripts|

GetCurrentLoadedScripts

Ach schön, endlich ist es möglich zu erfahren, welche Scripte geladen sind…
Bin Aufgrund der Codes von GetCurrentScriptPath auf diese Lösung gekommen… Auch hier vielen Dank an den tollen EPLAN API Support!

/* Usage
    private static string GetCurrentLoadedScripts()
    {
        string value = null;
        ActionCallingContext actionCallingContext = new ActionCallingContext();
        new CommandLineInterpreter().Execute("GetCurrentLoadedScripts", actionCallingContext);
        actionCallingContext.GetParameter("value", ref value);
        return value;
    }
*/

using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

namespace EplanScriptingProjectBySuplanus.GetCurrentLoadedScripts
{
    public class GetCurrentLoadedScripts
    {
        [DeclareAction("GetCurrentLoadedScripts")]
        public void Action(out string value)
        {
            Settings settings = new Settings();
            var settingsUrlScripts = "STATION.EplanEplApiScriptGui.Scripts";
            int countOfScripts = settings.GetCountOfValues(settingsUrlScripts);
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < countOfScripts; i++)
            {
                string scriptPath = settings.GetStringSetting(settingsUrlScripts, i);
                stringBuilder.Append(scriptPath);

                // not last one
                if (i != countOfScripts - 1)
                {
                    stringBuilder.Append("|");
                }
            }

            // returns list: "\\path\script1.cs|\\path\script2.vb"
            value = stringBuilder.ToString();
        }
    }
}

Download auf GitHub

Von |2018-08-17T12:30:02+02:002015-08-05|EPLAN, EPLAN-Scripts|

GetProjectLanguages

Hatte das Script schon länger hier, aber irgendwie vergessen zu posten.

Aufgrund dieses Beitrages wurde ich daran erinnert :)

Die Funktion um Projekt-Sprachen zu erhalten war im MultiLanguageTool von EPLAN enthalten (freie API). Diese wurde aber nicht mehr entwickelt und ein Teil kam als offizielle Action… leider nicht die Projektsprachen.

/* Usage
    private static string GetProjectLanguages()
    {
        string value = null;
        ActionCallingContext actionCallingContext = new ActionCallingContext();
        new CommandLineInterpreter().Execute("GetProjectLanguages", actionCallingContext);
        actionCallingContext.GetParameter("value", ref value);
        return value;
    }
*/

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

namespace EplanScriptingProjectBySuplanus.GetProjectLanguages
{
    public class GetProjectLanguages
    {
        private readonly string TempPath = Path.Combine(
            PathMap.SubstitutePath("$(TMP)"), "GetProjectLanguages.xml");

        [DeclareAction("GetProjectLanguages")]
        public void Action(out string value)
        {
            ActionCallingContext actionCallingContext = new ActionCallingContext();
            actionCallingContext.AddParameter("prj", FullProjectPath());
            actionCallingContext.AddParameter("node", "TRANSLATEGUI");
            actionCallingContext.AddParameter("XMLFile", TempPath);
            new CommandLineInterpreter().Execute("XSettingsExport", actionCallingContext);

            if (File.Exists(TempPath))
            {
                string languagesString = GetValueSettingsXml(TempPath,
                    "/Settings/CAT/MOD/Setting[@name='TRANSLATE_LANGUAGES']/Val");

                if (languagesString != null)
                {
                    List<string> languages = languagesString.Split(';').ToList();
                    languages = languages.Where(obj => !obj.Equals("")).ToList();

                    StringBuilder stringBuilder = new StringBuilder();
                    for (int i = 0; i < languages.Count; i++)
                    {
                        var language = languages[i];
                        stringBuilder.Append(language);

                        // not last one
                        if (i != languages.Count - 1)
                        {
                            stringBuilder.Append("|");
                        }
                    }

                    // returns list: "de_DE|en_EN"
                    value = stringBuilder.ToString();
                    return;
                }
            }

            value = null;
            return;
        }

        // Returns the EPLAN Project Path
        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;
        }

        // Read EPLAN XML-ProjectInfo and returns the value
        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)
            {
                // Get Text from MultiLanguage or not :)
                string value = rankListSchemaName[0].InnerText;
                return value;
            }
            else
            {
                return null;
            }
        }
    }
}

Download auf GitHub

Von |2018-08-17T12:29:57+02:002015-08-03|EPLAN, EPLAN-Scripts|
Nach oben