nx_blech_projects_visualstudio/NX_Blech/EditExpressions.cs

210 lines
7.9 KiB
C#

using System;
using NXOpen;
using NXOpen.UF;
namespace NX_Blech
{
class EditExpressions
{
Session theSession = NXOpen.Session.GetSession();
public EditExpressions()
{
Session.UndoMarkId markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Edit_Expressions");
theSession.SetUndoMarkName(markId1, "Edit_Expression");
if (Edit())
{
theSession.DeleteUndoMark(markId1, "Edit_Expressions");
}
}
#region OwnMethodes
private bool Edit()
{
if (ThicknessValueExist())
{
//Aktualisieren
CorrectExpressions();
return false; //Kein Abbruch
}
else
{
//Wenn 'Sheet_Metal_Material_Thickness' nicht existiert, dann eine Meldung ausgeben, dass zuerst die Funktion
//'Material Blechbearbeitung' ausgeführt werden muss, damit die notwendigen Expression Werte angelegt werden
NoThicknessMessage();
return true; //Abbruch
}
}
private bool ThicknessValueExist()
{
bool thicknessValueExist = false;
foreach (Expression name in theSession.Parts.Work.Expressions)
{
if (name.Name == "Sheet_Metal_Material_Thickness")
{
thicknessValueExist = true;
}
}
return thicknessValueExist;
}
private void CorrectExpressions()
{
//Korrektur wenn das Blech vor NX12 konstruiert wurde
//TODO: Abfrage ob notwendig
PreNX12Created();
//Werte setzen/aktualisieren
UpdateExpressions();
}
private void PreNX12Created()
{
//Korrektur wenn das Blech vor NX12 konstruiert wurde
foreach (Expression name in theSession.Parts.Work.Expressions)
{
//Existiert der Wert 't', dann den Wert 'Sheet_Metal_Relief_Depth' auf '0' setzen und den Wert 't' löschen
if (name.Name == "t")
{
SetReliefDepth(); //Den Wert Sheet_Metal_Relief_Depth auf 0 setzen
ChangeValue("t", "Sheet_Metal_Relief_Depth"); //Alle Expressions die den Wert 't' enthalten gegen den Wert 'Sheet_Metal_Relief_Depth' tauschen
DeleteExpression("t"); //Expression 't' löschen
}
//Existiert der Wert 'b', dann den Wert 'Sheet_Metal_Relief_Width' abhängig vom Wert 'Sheet_Metal_Material_Thickness' auf '1' oder '2' setzen und den Wert 'b' löschen
if (name.Name == "b")
{
SetReliefWidth(); //Den Wert 'Sheet_Metal_Relief_Width' abhängig von der Materialstärke auf '1' oder '2' setzen
ChangeValue("b", "Sheet_Metal_Relief_Width"); //Alle Expressions die den Wert 'b' enthalten gegen den Wert 'Sheet_Metal_Relief_Width' tauschen
DeleteExpression("b"); //Expression 'b' löschen
}
}
}
private void UpdateExpressions()
{
//Expression Werte importieren
ImportExpressionValues();
//Den Wert Sheet_Metal_Relief_Width setzen
SetReliefWidth();
//Den Wert Sheet_Metal_Relief_Depth setzen
SetReliefDepth();
//k-Faktor bei 10mm Blech von 0.28 auf 0.42 ändern
CorrectKFactor();
}
private void ImportExpressionValues()
{
//Dateiname der Blech-Expression-Tabelle
string sheetMetalExpressionValues = String.Concat(theSession.GetEnvironmentVariableValue("NX_SERVER_DIR"), "\\global\\06_ENGEL_NX_CUSTOMIZING\\Blech\\blech.exp");
//Expression Werte importieren
bool expModified;
string[] errorMessages = new string[50];
theSession.Parts.Work.Expressions.ImportFromFile(sheetMetalExpressionValues, ExpressionCollection.ImportMode.Replace, out expModified, out errorMessages);
}
private void SetReliefDepth()
{
//Den Wert Sheet_Metal_Relief_Depth auf 0 setzen
Expression expression = theSession.Parts.Work.Expressions.FindObject("Sheet_Metal_Relief_Depth");
Unit unit = theSession.Parts.Work.UnitCollection.FindObject("MilliMeter");
theSession.Parts.Work.Expressions.EditWithUnits(expression, unit, "0");
}
private void SetReliefWidth()
{
//Den Wert Sheet_Metal_Relief_Width abhängig von der Materialstärke auf 1 oder 2 setzen
Expression expression = theSession.Parts.Work.Expressions.FindObject("Sheet_Metal_Relief_Width");
Unit unit = theSession.Parts.Work.UnitCollection.FindObject("MilliMeter");
theSession.Parts.Work.Expressions.EditWithUnits(expression, unit, ReliefWidth());
}
private string ReliefWidth()
{
Expression thickness = theSession.Parts.Work.Expressions.FindObject("Sheet_Metal_Material_Thickness");
//Der Wert 'reliefWidth' ist abhängig von der Materialstärke
if (thickness.Value >= 6)
{
return "2";
}
else
{
return "1";
}
}
private void CorrectKFactor()
{
foreach (Expression name in theSession.Parts.Work.Expressions)
{
if (name.Name == "Sheet_Metal_Material_Thickness")
{
Expression thickness = theSession.Parts.Work.Expressions.FindObject("Sheet_Metal_Material_Thickness");
if (thickness.Value == 10)
{
//Wenn die Blechdicke 10mm ist, dann den Wert 'Sheet_Metal_Neutral_Factor' von '0.28' auf '0.42' setzen
Expression expression = theSession.Parts.Work.Expressions.FindObject("Sheet_Metal_Neutral_Factor");
Unit unit = theSession.Parts.Work.UnitCollection.FindObject("MilliMeter");
string kFactor = "0.42";
theSession.Parts.Work.Expressions.EditWithUnits(expression, unit, kFactor);
}
}
}
}
private void ChangeValue(string value, string newValue)
{
//Alle Expressions die den Wert 'value' enthalten gegen den Wert 'newValue' tauschen
foreach (Expression name in theSession.Parts.Work.Expressions)
{
if (name.RightHandSide == value)
{
Expression expression = theSession.Parts.Work.Expressions.FindObject(name.Name);
Unit unit = theSession.Parts.Work.UnitCollection.FindObject("MilliMeter");
theSession.Parts.Work.Expressions.EditWithUnits(expression, unit, newValue);
}
}
}
private void DeleteExpression(string value)
{
//Expression löschen
Expression expression = theSession.Parts.Work.Expressions.FindObject(value);
theSession.Parts.Work.Expressions.Delete(expression);
}
private void NoThicknessMessage()
{
if (theSession.GetEnvironmentVariableValue("UGII_LANG") == "german")
{
//deutsch
NXOpen.UI.GetUI().NXMessageBox.Show("Warnung!", NXMessageBox.DialogType.Warning, "Bitte zuerst die Funktion \"Material Blechbearbeitung\"\nund dann noch einmal \"ENGEL_Blechparameter\" ausführen!");
}
else
{
//englisch
NXOpen.UI.GetUI().NXMessageBox.Show("Warning!", NXMessageBox.DialogType.Warning, "Please execute the function \"Material Blechbearbeitung\"\nfirst and then \"ENGEL_Blechparameter\" again!");
}
}
#endregion
}
}