Update V2
Nairolf hat sich die Mühe gemacht und paar Änderungen am Script gemacht:
- Anpassung zum Einfügen von wahlweise Schrankbauteil / Artikelplatzierung, normales Bauteil
- Eingabemöglichkeit einer Bauteilbeschreibung
- Quellmakros angepasst (Flag “Bauteil benötigt Bohrung auf Montagefläche” = FALSE)
- Korrektur bei “Stückzahl / Menge”, wenn Artikelnummer leer
- Verhalten bei fehlender Eingabe B / H / T
Ich hab kurz die Prüfung der Textboxen auf Zahlen geändert (gab Probleme mit benutzerdefinierten Steuerelementen in *.cs-Dateien).
Mit diesem Script kann ähnlich wie in EPLAN Cabinet ein Universalbauteil eingefügt werden.
Leider ist es in Pro Panel nicht möglich freie Geräte mit konfigurierbaren Abmaßen einzufügen. Es wird ein temporäres Makro erzeugt und als Artikelplatzierung normales Bauteil eingefügt.
Zusätzlich kann eine Artikelnummer vergeben werden.
Der Makropfad für die Vorlage muss im Script hinterlegt werden:
public string strMacroFileName1 = @"$(MD_MACROS)\InsertUniversalPart3D_Schrankbauteil.ema";
public string strMacroFileName2 = @"$(MD_MACROS)\InsertUniversalPart3D_Artikelplatzierung.ema";
Das Script laden und es erscheint ein neuer Menüpunkt unter Einfügen:
InsertUniversalPart3D_V2 (1517 Downloads )
InsertUniversalPart3D_Macros (1441 Downloads )
//Speicherort der Macro-Templates ggf hier anpassen:
public string strMacroFileName1 = @"$(MD_MACROS)\InsertUniversalPart3D_Schrankbauteil.ema";
public string strMacroFileName2 = @"$(MD_MACROS)\InsertUniversalPart3D_Artikelplatzierung.ema";
#region EPLAN menu
[DeclareMenu]
public void MenuFunction()
{
Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
oMenu.AddMenuItem(
"Freies Gerät...",
"InsertUniversalPart3D",
"Freies Gerät in den Bauraum einfügen...",
37181,
1,
false,
false
);
}
#endregion
#region EPLAN action
[DeclareAction("InsertUniversalPart3D")]
public void InsertUniversalPart3DVoid()
{
frmInsertUniversalPart3D_V2 frm = new frmInsertUniversalPart3D_V2();
frm.ShowDialog();
}
#endregion
private void btnCancel_Click(object sender, System.EventArgs e)
{
Close();
}
private void btnOk_Click(object sender, System.EventArgs e)
{
#region check_macro_to_use
string sMacroFileName;
switch (cbFunctionDef.Text)
{
case "Artikelplatzierung, normales Bauteil":
sMacroFileName = strMacroFileName2;
break;
case "Schrankbauteil, allgemein":
sMacroFileName = strMacroFileName1;
break;
default:
sMacroFileName = strMacroFileName1;
break;
}
#endregion
#region check_user_entries
if (txtWidth.Text == string.Empty || txtHeight.Text == string.Empty || txtDepth.Text == string.Empty)
{
MessageBox.Show("Die folgenden Eingaben müssen gefüllt sein:\n\n'Breite'\n'Höhe'\n'Tiefe'", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
#endregion
#region insert_eplan_macro
if (File.Exists(PathMap.SubstitutePath(sMacroFileName)))
{
// Read Template
string NewMacro = File.ReadAllText(PathMap.SubstitutePath(sMacroFileName));
// Replace
NewMacro = NewMacro.Replace("$(Width)", txtWidth.Text.Replace(",","."));
NewMacro = NewMacro.Replace("$(Hight)", txtHeight.Text.Replace(",", "."));
NewMacro = NewMacro.Replace("$(Depth)", txtDepth.Text.Replace(",", "."));
NewMacro = NewMacro.Replace("$(Partnumber)", txtPartnumber.Text);
if (txtPartnumber.Text != string.Empty)
{
NewMacro = NewMacro.Replace("$(PartnumberCnt)", "1");
}
else
{
NewMacro = NewMacro.Replace("$(PartnumberCnt)", "0");
}
NewMacro = NewMacro.Replace("$(Description)", txtDescription.Text);
// Macro
string strMacroPathTemp = PathMap.SubstitutePath("$(TMP)") + @"\" + "InsertUniversalPart3D_TEMP.ema";
File.WriteAllText(strMacroPathTemp, NewMacro);
ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("Name", "XMIaInsertMacro");
acc.AddParameter("filename", strMacroPathTemp);
acc.AddParameter("variant", "0");
new CommandLineInterpreter().Execute("XGedStartInteractionAction", acc);
}
else
{
MessageBox.Show("Vorlage nicht gefunden:\n" + sMacroFileName, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
#endregion
Close();
}
#region NumTextbox
private static void NumTextbox(KeyPressEventArgs e)
{
if (",.1234567890\b".IndexOf(e.KeyChar.ToString()) < 0)
{
e.Handled = true;
}
}
private void txtWidth_KeyPress(object sender, KeyPressEventArgs e)
{
NumTextbox(e);
}
private void txtHeight_KeyPress(object sender, KeyPressEventArgs e)
{
NumTextbox(e);
}
private void txtDepth_KeyPress(object sender, KeyPressEventArgs e)
{
NumTextbox(e);
}
#endregion
private void frmInsertUniversalPart3D_Load(object sender, System.EventArgs e)
{
// Standard Werte setzen
cbFunctionDef.Text = "Artikelplatzierung, normales Bauteil";
}
private void lilblVersion_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start(@"https://www.suplanus.de");
}
:cool:
Feine Sache…
BTW: wie handelst Du die Meldung
“Bauteil ohne Darstellung im Schaltplan” ?
LG
Dankschööön,
wir haben es als Warnung deklariert. Es gibt ja mechanische Bauteile welche nicht im Schaltplan vorhanden sind.
An sich ist das Handling mit der Meldung aber noch unklar :sideways:
Hallo Johann,
wo sind den die Quellmakros, ich bräuchte die :?:
Sorry für die späte Antwort…
Puh die sind irgendwie verschwunden. Ich hab sie am Beitrag angehängt.
Danke, kann ich nun direkt mal ausprobieren.