MacroNavi
Wie schon beschrieben ist Daniel Papp fleißig auf GitHub und hat einen Macro-Navigator gebaut. Vielen Dank!
Wie schon beschrieben ist Daniel Papp fleißig auf GitHub und hat einen Macro-Navigator gebaut. Vielen Dank!
Es macht keinen Spaß Scripte zu testen… Immer wieder entladen, laden… die Fehlersuche wird somit noch schwieriger.
Ich habe lange überlegt, wie hier der Workflow optimiert werden kann.
Natürlich mit einem Script :)
Mit diesem Script, welches in EPLAN geladen werden muss, können verschiedene andere Scripte automatisch aus Visual Studio heraus in EPLAN getestet werden.
Der Ablauf ist wie folgt:
In Visual Studio sehen die Startoptionen wie folgt aus:
C:\Program Files (x86)\EPLAN\Platform\2.4.4\Bin\EPLAN.exe
/Variant:"Electric P8" ScriptTest /parameter:'' /execute:"true" /scriptPath:"C:\Test\Script\Test.cs"
Leere Parameter müssen auch mit angegeben werden.
Hinweis für Nutzer von Visual Studio Express: Dort gibt es den Einstellungsdialog für Startoptionen nicht. Ein Workaround ist hier beschrieben.
Freu mich sehr über die Arbeitserleichterung… und darüber dass ich ein Einhorn bzw. Drache sein kann!
using System; using System.Windows.Forms; using Eplan.EplApi.ApplicationFramework; using Eplan.EplApi.Scripting; using System.IO; namespace ibKastl.Scripts.Test { class ScriptTest { /// <summary> /// Start Visual Studio with the given Script /// </summary> /// <param name="scriptPath">Full Path to .cs or .vb File</param> /// <param name="parameter">Parameters for the Action</param> /// <param name="execute">Excute after EPLAN started</param> [DeclareAction("ScriptTest")] public void Action(string scriptPath, string parameter, string execute) { // Check file if (!File.Exists(scriptPath)) { MessageBox.Show("Scriptdatei wurde nicht gefunden:" + Environment.NewLine + scriptPath + Environment.NewLine + "Das Script wurde nicht geladen.", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { string actionName = Path.GetFileNameWithoutExtension(scriptPath); CommandLineInterpreter commandLineInterpreter = new CommandLineInterpreter(); // Unload if Action exists ActionCallingContext actionCallingContextUnregister = new ActionCallingContext(); actionCallingContextUnregister.AddParameter("DontShowErrorMessage", "1"); actionCallingContextUnregister.AddParameter("ScriptFile", scriptPath); commandLineInterpreter.Execute("UnregisterScript", actionCallingContextUnregister); // Load Script ActionCallingContext actionCallingContextRegister = new ActionCallingContext(); actionCallingContextRegister.AddParameter("ScriptFile", scriptPath); commandLineInterpreter.Execute("RegisterScript", actionCallingContextRegister); // Execute if (execute.ToLower().Equals("true")) { if (!string.IsNullOrEmpty(parameter)) { commandLineInterpreter.Execute(actionName + " " + parameter); } else { commandLineInterpreter.Execute(actionName); } } } } } }
Aufgrund eines aktuellen Projektes muss ich viel von meinem eigenen (alten) Code analysieren und Doku schreiben…
Sitze hier mit hochrotem Kopf und schäme mich… aber es geht wohl nicht nur mir so, sondern jeden Programmierer.
Im Urlaub habe ich angefangen das Buch “Weniger schlecht programmieren” angefangen zu lesen und es beschreibt die täglichen Probleme sehr gut / lustig / schön.
Es ist auch hilfreich bei der Programmierung …
Mit viel Humor aber auch menschlichen Aspekten wird beschrieben wie man ein nicht ganz so schlechter Programmierer wird.
Aufgrund eines Kommentars habe ich mir mal den Dienst Pushbullet angesehen.
Vorteil ist hier dass es eine Vorschau für Dateien (wie in unserem Fall Bilder) gibt.
Leider gab es genau bei meinem Test ein Problem mit Pushnotifications unter iOS 8 … der Bug scheint behoben zu sein, dennoch pusht der Dienst nicht so zuverlässig wie Pushover. Ich teste nun ein bisschen mit beiden Diensten gleichzeitig. Aber eine Vorschau der Bilder ist natürlich schon ein Vorteil.
# Pushbullet
print("--> Pushbullet")
logger.info("--> Pushbullet")
pb = PushBullet("API-Token")
with open('/home/pi/Desktop/doorbell/web/photos/' + filename, "rb") as pic:
success, file_data = pb.upload_file(pic, filename + '.jpg')
success, push = pb.push_file(**file_data)
Unsere russischen Freunde von Eplan For All haben ein schönes Script geschrieben um die Raster-Größe anzupassen.
Download auf eplan4all.info
Vielen Dank!
// Ersteller (разработчик): madwolf_by aka Виталий
// Datum: 2014-08-18
// www.eplan4all.info - Eplan For All
using Eplan.EplApi.Base;
using System.Windows.Forms;
using Eplan.EplApi.Scripting;
using Eplan.EplApi.ApplicationFramework;
using System;
public class SetGrid
{
Settings oSettings = new Settings();
string sPath = "USER.Control.UserGridSize";
string sPath1 = "USER.Control.UserGridSizeMode";
[DeclareRegister]
public void Register()
{
if (!oSettings.ExistSetting(sPath))
{
if (!oSettings.ExistSetting(sPath))
oSettings.AddStringSetting(sPath, new string[] { }, new string[] { }, "Current Gridsize", new string[] { @"4" }, ISettings.CreationFlag.Insert);
// MessageBox.Show("Setting " + sPath + " registered");
}
if (!oSettings.ExistSetting(sPath1))
oSettings.AddBoolSetting(sPath1, new bool[1], "UserGridSizeMode", new bool[1], ISettings.CreationFlag.Insert);
return;
}
[DeclareUnregister]
public void UnRegister()
{
if (oSettings.ExistSetting(sPath))
{
oSettings.DeleteSetting(sPath);
// MessageBox.Show("Setting " + sPath + " unregistered");
}
}
[DeclareAction("SetUserGridSize")]
public void SetUserGrid(string GridSize)
{
if (oSettings.GetBoolSetting(sPath1, 0))
{
oSettings.SetStringSetting(sPath, GridSize, 0);
//MessageBox.Show("Incoming param " + oSettings.GetDoubleSetting(sPath, 0));
SetGridSizeToPage(GridSize);
}
else MessageBox.Show("Function is OFF", "SetGrid mode");
}
[DeclareAction("SetUserGridMode")]
public void SetUserGridMode()
{
oSettings.SetBoolSetting(sPath1, !oSettings.GetBoolSetting(sPath1, 0), 0);
if (oSettings.GetBoolSetting(sPath1, 0))
{
MessageBox.Show("Function is ON", "SetGrid mode");
}
else MessageBox.Show("Function is OFF", "SetGrid mode");
}
[DeclareEventHandler("onActionEnd.String.XGedNextPageAction")]
public bool MyEventHandlerFunction1(IEventParameter iEventParameter)
{
SetGridSizeToPage(oSettings.GetStringSetting(sPath, 0));
return true;
}
[DeclareEventHandler("onActionEnd.String.XGedPrevPageAction")]
public bool MyEventHandlerFunction2(IEventParameter iEventParameter)
{
SetGridSizeToPage(oSettings.GetStringSetting(sPath, 0));
return true;
}
[DeclareEventHandler("onActionStart.String.XPmPageOpenOnePage")]
public bool MyEventHandlerFunction3(IEventParameter iEventParameter)
{
SetGridSizeToPage(oSettings.GetStringSetting(sPath, 0));
return true;
}
public void SetGridSizeToPage(string paramValue)
{
if (oSettings.GetBoolSetting(sPath1, 0))
{
CommandLineInterpreter oCLI = new CommandLineInterpreter();
ActionCallingContext oACC = new ActionCallingContext();
string nameAction = "XEsSetPagePropertyAction";
oACC.AddParameter("PropertyId", "11051");
oACC.AddParameter("PropertyIndex", "0");
// MessageBox.Show("param from setting " + Convert.ToString(oSettings.GetDoubleSetting(sPath, 0)));
oACC.AddParameter("PropertyValue", paramValue);
oCLI.Execute(nameAction, oACC);
}
}
}