AutoSyncNavis
Mit diesem Script werden Navigatoren automatisch mit der aktuellen Selektion synchronisiert.
Vielen Dank an FrankS für das Erstellen 💖
Achtung: Je nachdem wie viele Navigatoren geöffnet sind und wie groß das Projekt ist, kann sich das Script negativ auf die Perfomance auswirken.
// AutoSyncNavis.cs // // Nachdem das Script geladen wurde kann das Synchronisieren aller Navigatoren mit dem // ausgewählten Element im GED aktiviert werden. // // Es wird ein neuer Menüpunkt "AutoSync Navigatoren" in der Gruppe "Erweiterung" im Tab "Ansicht" angelegt, // außerdem wird die aktuelle Einstellung gespeichert. // // Copyright by Frank Schöneck, 2024 // // letzte Änderung: // V1.0.0, 23.07.2024, Frank Schöneck, Projektbeginn using Eplan.EplApi.ApplicationFramework; using Eplan.EplApi.Base; using Eplan.EplApi.Gui; using Eplan.EplApi.Scripting; using System.Linq; public class AutoSyncNavis { private string sSettingName = "USER.SCRIPTS.AutoSyncNavis.AutoSyncState"; //RibbonBar Einträge definieren string m_TabName = "Ansicht"; string m_commandGroupName = "Erweiterungen"; string m_commandName = "AutoSync"; string m_SVGstringIconNavigator = @"<svg fill='#464646' height='800px' width='800px' version='1.1' id='XMLID_85_' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 24 24' enable-background='new 0 0 24 24' xml:space='preserve'> <path d='M21,24h-6v-6h6V24z M17,22h2v-2h-2V22z M15,22H6V8H3V0h8v8H8v4h7v2H8v6h7V22z M5,6h4V2H5V6z M21,16h-6v-6h6V16z M17,14h2 v-2h-2V14z'/> </svg>"; [DeclareRegister] public void registerRibbonItems() { RibbonBar ribbonBar = new RibbonBar(); var newTab = new Eplan.EplApi.Gui.RibbonBar().Tabs.FirstOrDefault(item => item.Name == m_TabName); if (newTab == null) //Tab noch nicht vorhanden, dann neu erzeugen { newTab = new Eplan.EplApi.Gui.RibbonBar().AddTab(m_TabName); } var commandGroup = newTab.CommandGroups.FirstOrDefault(item => item.Name == m_commandGroupName); if (commandGroup == null) //CommandGroup noch nicht vorhanden, dann neu erzeugen { commandGroup = newTab.AddCommandGroup(m_commandGroupName); } RibbonIcon ribbonIconNavigator = ribbonBar.AddIcon(m_SVGstringIconNavigator); //Icon festlegen commandGroup.AddCommand(m_commandName, "AutoSyncNavis", m_commandName, "AutoSync der Navigatoren ein- / ausschalten", ribbonIconNavigator); } [DeclareUnregister] public void unRegisterRibbonItems() { //Command entfernen var vTab = new Eplan.EplApi.Gui.RibbonBar().Tabs.FirstOrDefault(item => item.Name == m_TabName); if (vTab != null) { var commandGroup = vTab.CommandGroups.FirstOrDefault(item => item.Name == m_commandGroupName); if (commandGroup != null) { var command = commandGroup.Commands.Values.FirstOrDefault(item => item.Text == m_commandName); if (command != null) { command.Remove(); } //Wenn CommandGroup leer ist diese auch entfernen if (commandGroup.Commands.Count == 0) { commandGroup.Remove(); } } //Wenn Tab leer ist dieses auch entfernen if (vTab.Commands.Count == 0) { vTab.Remove(); } } //Einstellungen löschen DeleteSettings(); } [DeclareAction("AutoSyncNavis")] public void AutoSyncNavisAction() { Settings oSettings = new Settings(); string sAutoSyncState = string.Empty; if (oSettings.ExistSetting(sSettingName)) { sAutoSyncState = oSettings.GetStringSetting(sSettingName, 0); } //Prüfen ob AutoSync aktiviert ist if (sAutoSyncState == string.Empty | sAutoSyncState.ToUpper() != "ON") { //nicht aktiviert Decider eDecision = new Decider(); EnumDecisionReturn eAnswer = eDecision.Decide( EnumDecisionType.eYesNoDecision, "Soll das Auto-Synchronisieren der Navigatoren eingeschaltet werden?", "AutoSyncNavis", EnumDecisionReturn.eYES, EnumDecisionReturn.eNO, string.Empty, false, EnumDecisionIcon.eQUESTION); if (eAnswer == EnumDecisionReturn.eYES) { //Einstellung speichern SetSettings("ON"); } } else { Decider eDecision = new Decider(); EnumDecisionReturn eAnswer = eDecision.Decide( EnumDecisionType.eYesNoDecision, "Soll das Auto-Synchronisieren der Navigatoren ausgeschaltet werden?", "AutoSyncNavis", EnumDecisionReturn.eYES, EnumDecisionReturn.eNO, string.Empty, false, EnumDecisionIcon.eQUESTION); if (eAnswer == EnumDecisionReturn.eYES) { //Einstellung speichern SetSettings("OFF"); } } return; } //Einstellungen speichern private void SetSettings(string AutoSyncActive) { Settings oSettings = new Settings(); if (!oSettings.ExistSetting(sSettingName)) { oSettings.AddStringSetting(sSettingName, new string[] { }, new string[] { }, ISettings.CreationFlag.Insert); } oSettings.SetStringSetting(sSettingName, AutoSyncActive, 0); } //Einstellungen löschen public void DeleteSettings() { Settings oSettings = new Settings(); if (oSettings.ExistSetting(sSettingName)) { oSettings.DeleteSetting(sSettingName); new Decider().Decide(EnumDecisionType.eOkDecision, "Die Einstellung [" + sSettingName + "] wurde gelöscht.", "AutoSyncNavis", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK, string.Empty, false, EnumDecisionIcon.eINFORMATION); } else { new Decider().Decide(EnumDecisionType.eOkDecision, "Die Einstellungen wurden nicht gefunden!", "AutoSyncNavis", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK, string.Empty, false, EnumDecisionIcon.eFATALERROR); } } //Eine Element wurde markiert [DeclareEventHandler("onSelChanged")] public void MyEventOnSelChanged() { Settings oSettings = new Settings(); string sAutoSyncState = string.Empty; if (oSettings.ExistSetting(sSettingName)) { sAutoSyncState = oSettings.GetStringSetting(sSettingName, 0); } //Prüfen ob AutoSync aktiviert ist if (sAutoSyncState == string.Empty | sAutoSyncState.ToUpper() != "ON") { //Keine Aktion ausführen return; } else { //Setting existiert und AutoSync soll aktiviert werden new CommandLineInterpreter().Execute("XEsSyncPDDsAction"); } return; } //Prüft ob Eplan gestartet wurde [DeclareEventHandler("Eplan.EplApi.OnMainStart")] public void MyEventEplanStart() { Settings oSettings = new Settings(); string sAutoSyncState = string.Empty; //War AutoSync beim letzten mal aktiv? if (oSettings.ExistSetting(sSettingName)) { sAutoSyncState = oSettings.GetStringSetting(sSettingName, 0); //wenn ja ("ON") dann AutoSync aktivieren if (sAutoSyncState.ToUpper() == "ON") { new CommandLineInterpreter().Execute("XEsSyncPDDsAction"); } } return; } }