ConnectionPointDesignationReverse
Frank Schöneck hat wieder ein super Script geschrieben um Anschlussbezeichnungen zu drehen.
Das Script ist im Kontextmenü ausführbar. Vielen Dank!
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());
}
}

