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()); } }
[…] des Scriptes ConnectionPointDesignationReverse habe ich mal die Actions im Kontextmenü getestet. Anbei meine gefunden Actions mit […]
Hallo,
das Script hat bei mir so nicht funktioniert, da sich die Reihenfolge der Anschlussbezeichnung nicht geändert hat.
Damit es funktioniert habe ich in Zeile 40 die Variable als Char deklariert (char EplanCRLF = (char)182;) und die Zeile 55 wie folgt geändert. (string[] sAnschlussbezeichnungen = sSourceText.Split(new char[] { EplanCRLF }, StringSplitOptions.None);)