commit 15b7484adf05d6f9f9cf791a35335bd1879cbf21 Author: Eugen Höglinger Date: Thu Feb 27 15:08:31 2020 +0100 Projekt neu angelegt. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a5f80a --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ + +#Ignore thumbnails created by Windows +Thumbs.db +#Ignore files built by Visual Studio +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +.vs/ +#Nuget packages folder +packages/ diff --git a/Daten/Blechparameter.ico b/Daten/Blechparameter.ico new file mode 100644 index 0000000..3ea4da3 Binary files /dev/null and b/Daten/Blechparameter.ico differ diff --git a/Daten/Blechparameter.png b/Daten/Blechparameter.png new file mode 100644 index 0000000..7b5ad67 Binary files /dev/null and b/Daten/Blechparameter.png differ diff --git a/Daten/Blechstaerke_Relief.xlsx b/Daten/Blechstaerke_Relief.xlsx new file mode 100644 index 0000000..7f27d82 Binary files /dev/null and b/Daten/Blechstaerke_Relief.xlsx differ diff --git a/NX_Blech_EPPlus.sln b/NX_Blech_EPPlus.sln new file mode 100644 index 0000000..6c62c8f --- /dev/null +++ b/NX_Blech_EPPlus.sln @@ -0,0 +1,23 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.572 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NX_Blech_EPPlus", "NX_Blech_EPPlus\NX_Blech_EPPlus.csproj", "{8A8F353E-1761-446E-B11A-BDABD9A7851C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8A8F353E-1761-446E-B11A-BDABD9A7851C}.Debug|Any CPU.ActiveCfg = Debug|x64 + {8A8F353E-1761-446E-B11A-BDABD9A7851C}.Release|Any CPU.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {67E631DC-0741-4DF7-9EE9-F64BB165ADFA} + EndGlobalSection +EndGlobal diff --git a/NX_Blech_EPPlus/Blechparameter.ico b/NX_Blech_EPPlus/Blechparameter.ico new file mode 100644 index 0000000..3ea4da3 Binary files /dev/null and b/NX_Blech_EPPlus/Blechparameter.ico differ diff --git a/NX_Blech_EPPlus/EditExpressions.cs b/NX_Blech_EPPlus/EditExpressions.cs new file mode 100644 index 0000000..b5e71d4 --- /dev/null +++ b/NX_Blech_EPPlus/EditExpressions.cs @@ -0,0 +1,341 @@ +using System; +using System.IO; +using System.Windows.Forms; +using NXOpen; +using NXOpen.UF; +using OfficeOpenXml; + +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() + { + //Werte aus Excel tabelle holen + string excel = String.Concat(theSession.GetEnvironmentVariableValue("NX_SERVER_DIR"), "\\global\\06_ENGEL_NX_CUSTOMIZING\\Blech\\Blechstaerke_Relief_Eugen.xlsx"); + string[] sheetMetalValues = new string[5]; + sheetMetalValues = ReadRow(excel, ReadThickness()); + string exprUnit = "MilliMeter"; + + //Korrektur wenn das Blech vor NX12 konstruiert wurde + //TODO: Abfrage ob notwendig + PreNX12Created(exprUnit, sheetMetalValues); + + //Werte setzen/aktualisieren + UpdateExpressions(exprUnit, sheetMetalValues); + } + + private void PreNX12Created(string exprUnit, string[] sheetMetalValues) + { + //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(exprUnit, sheetMetalValues[2]); //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(exprUnit, sheetMetalValues[1]); //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(string exprUnit, string[] sheetMetalValues) + { + //Expression Werte setzen + SetExpressionValues(exprUnit, sheetMetalValues); + + //Den Wert Sheet_Metal_Relief_Width setzen + SetReliefWidth(exprUnit, sheetMetalValues[1]); + + //Den Wert Sheet_Metal_Relief_Depth setzen + SetReliefDepth(exprUnit, sheetMetalValues[2]); + + //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 SetExpressionValues(string exprUnit, string[] sheetMetalValues) + { + //Wert 's' setzen + SetUnitlessExpressionValue("s", exprUnit, "format( \"%#2.1f\", Sheet_Metal_Material_Thickness, \"units\", \"unitless\" )"); + + //Wert 'db' setzen + SetExpressionValue("db", exprUnit, sheetMetalValues[3]); + + //Wert 'o' setzen + SetExpressionValue("o", exprUnit, sheetMetalValues[4]); + } + + private string[] ReadRow(string excel, string sheetMetalThickness) + { + string[] sheetMetalValues = new string[5]; + + try + { + var fi = new FileInfo(excel); + + using (var p = new ExcelPackage(fi)) + { + //Get the Worksheet created in the previous codesample. + var ws = p.Workbook.Worksheets["Werte"]; + + for (int i = 1; i <= ws.Dimension.End.Row; i++) + { + if (ws.Cells[i, 1].Value != null) + { + if (ws.Cells[i, 1].Value.ToString() == sheetMetalThickness) + { + sheetMetalValues[0] = ws.Cells[i, 1].Value.ToString(); + sheetMetalValues[1] = ws.Cells[i, 2].Value.ToString(); + sheetMetalValues[2] = ws.Cells[i, 3].Value.ToString(); + sheetMetalValues[3] = ws.Cells[i, 4].Value.ToString(); + sheetMetalValues[4] = ws.Cells[i, 5].Value.ToString(); + } + } + } + } + } + catch (Exception) + { + MessageBox.Show("Fehler"); + } + return sheetMetalValues; + } + + private string ReadThickness() + { + Expression thickness = theSession.Parts.Work.Expressions.FindObject("Sheet_Metal_Material_Thickness"); + + return thickness.Value.ToString(); //Gibt die Materialstärke zurück + } + + private void SetUnitlessExpressionValue(string exprName, string exprUnit, string exprValue) + { + bool found = false; + + foreach (Expression name in theSession.Parts.Work.Expressions) + { + if (name.Name == exprName) + { + //Einen Expression Wert setzen + Expression expression = theSession.Parts.Work.Expressions.FindObject(name.Name); + Unit unit = theSession.Parts.Work.UnitCollection.FindObject(exprUnit); + + theSession.Parts.Work.Expressions.Edit(expression, exprValue); + + found = true; + } + } + + //Wenn die Expression noch nicht existiert, dann erzeugen + if (!found) + { + CreateUnitlessExpressionValue(exprName, exprUnit, exprValue); + } + } + + private void SetExpressionValue(string exprName, string exprUnit, string exprValue) + { + bool found = false; + + foreach (Expression name in theSession.Parts.Work.Expressions) + { + if (name.Name == exprName) + { + //Einen Expression Wert setzen + Expression expression = theSession.Parts.Work.Expressions.FindObject(name.Name); + Unit unit = theSession.Parts.Work.UnitCollection.FindObject(exprUnit); + Unit nullNXOpen_Unit = null; + theSession.Parts.Work.Expressions.EditWithUnits(expression, nullNXOpen_Unit, SetCommaToDot(exprValue)); + + found = true; + } + } + + //Wenn die Expression noch nicht existiert, dann erzeugen + if (!found) + { + CreateExpressionValue(exprName, exprUnit, exprValue); + } + } + + private void CreateUnitlessExpressionValue(string exprName, string exprUnit, string exprValue) + { + //Einen Expression Wert erzeugen + Unit unit = theSession.Parts.Work.UnitCollection.FindObject(exprUnit); + Expression expression; + string expr = String.Concat(exprName, "=", exprValue); + expression = theSession.Parts.Work.Expressions.CreateExpression("String", expr); + } + + private void CreateExpressionValue(string exprName, string exprUnit, string exprValue) + { + //Einen Expression Wert erzeugen + Unit unit = theSession.Parts.Work.UnitCollection.FindObject(exprUnit); + Expression expression; + string expr = String.Concat(exprName, "=", SetCommaToDot(exprValue)); + expression = theSession.Parts.Work.Expressions.CreateWithUnits(expr, unit); + } + + private string SetCommaToDot(string exprValue) + { + //Sicherstellen, dass das Komma ein Punkt ist + try + { + double result = 0.0; + if (Double.TryParse(exprValue, out result)) + { + exprValue = Convert.ToDouble(exprValue).ToString(System.Globalization.CultureInfo.CreateSpecificCulture("en-us")); ; + } + } + catch (Exception) + { } + + return exprValue; + } + + private void SetReliefDepth(string exprUnit, string sheetMetalValues) + { + //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(exprUnit); + + theSession.Parts.Work.Expressions.EditWithUnits(expression, unit, sheetMetalValues); + } + + private void SetReliefWidth(string exprUnit, string sheetMetalValues) + { + //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(exprUnit); + + theSession.Parts.Work.Expressions.EditWithUnits(expression, unit, sheetMetalValues); + } + + 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 + } +} diff --git a/NX_Blech_EPPlus/NX_Blech_EPPlus.csproj b/NX_Blech_EPPlus/NX_Blech_EPPlus.csproj new file mode 100644 index 0000000..2d61664 --- /dev/null +++ b/NX_Blech_EPPlus/NX_Blech_EPPlus.csproj @@ -0,0 +1,87 @@ + + + + Debug + x64 + Library + Properties + NX_Blech_EPPlus + $(PROJECT_NAME) + v4.6 + {8A8F353E-1761-446E-B11A-BDABD9A7851C} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + Blechparameter.ico + + + + ..\packages\EPPlus.4.5.3.1\lib\net40\EPPlus.dll + + + False + $(UGII_BASE_DIR)\nxbin\managed\NXOpen.dll + False + + + False + $(UGII_BASE_DIR)\nxbin\managed\NXOpen.UF.dll + False + + + False + $(UGII_BASE_DIR)\nxbin\managed\NXOpen.Utilities.dll + False + + + False + $(UGII_BASE_DIR)\nxbin\managed\NXOpenUI.dll + False + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NX_Blech_EPPlus/Program.cs b/NX_Blech_EPPlus/Program.cs new file mode 100644 index 0000000..9cca30b --- /dev/null +++ b/NX_Blech_EPPlus/Program.cs @@ -0,0 +1,164 @@ +using System; +using System.IO; +using NXOpen; +using NXOpen.UF; +using NX_Blech; + +public class Program +{ + #region Version und Copyright + // Version und Copyright + string programName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); //Den Programmnamen auslesen + string programVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); + string copyright = "Copyright © 2018 by Eugen Höglinger"; + //Assembly Datum und Zeit + static DateTime value = AssemblyDateTime(); + string date = value.ToShortDateString(); + string time = value.ToLongTimeString(); + private static DateTime AssemblyDateTime() + { + var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; + var buildDateTime = new DateTime(2000, 1, 1).Add(new TimeSpan(TimeSpan.TicksPerDay * version.Build + TimeSpan.TicksPerSecond * 2 * version.Revision)); + //Tage seit dem 1. Januar 2000 und Sekunden seit Mitternacht, (multiplizier mit 2 ergibt das Original) + return buildDateTime; + } + #endregion + + #region Programm-Info + /// + /// Contains the name of the program file + /// + public static string ProgramName { set; get; } + + /// + /// Contains the version of the program file + /// + public static string ProgramVersion { set; get; } + + /// + /// Contains the copyright notice + /// + public static string Copyright { set; get; } + + private void SetProgramInfo() + { + //Name, Version und Copyright setzen + ProgramName = programName; + ProgramVersion = programVersion; + Copyright = copyright; + } + #endregion + + // class members + private static Session theSession; + private static UI theUI; + private static UFSession theUfSession; + public static Program theProgram; + public static bool isDisposeCalled; + + //------------------------------------------------------------------------------ + // Constructor + //------------------------------------------------------------------------------ + public Program() + { + SetProgramInfo(); //Stellt die Programm Info bereit + + try + { + theSession = Session.GetSession(); + theUI = UI.GetUI(); + theUfSession = UFSession.GetUFSession(); + isDisposeCalled = false; + } + catch (NXOpen.NXException ex) + { + // ---- Enter your exception handling code here ----- + // UI.GetUI().NXMessageBox.Show("Message", NXMessageBox.DialogType.Error, ex.Message); + } + } + + public static bool FirstLoop { set; get; } + + //------------------------------------------------------------------------------ + // Explicit Activation + // This entry point is used to activate the application explicitly + //------------------------------------------------------------------------------ + public static int Main(string[] args) + { + FirstLoop = true; + + int retValue = 0; + try + { + theProgram = new Program(); + + //TODO: Add your application code here + var editExpression = new EditExpressions(); + + theProgram.Dispose(); + } + catch (NXOpen.NXException ex) + { + // ---- Enter your exception handling code here ----- + + //Manche Parts erzeugen aus unerklärlichen Gründen beim ersten Durchlauf einen Fehler, in so einem Fall wird ein zweiter Durchlauf versucht. + //Verursacht auch der zweite Durchlauf einen Fehler, dann ist die Aufgabe tatsächlich zu komplex und es wird eine Fehlermeldung ausgegeben. + if (FirstLoop) + { + FirstLoop = false; //Wenn schon einmal durchgelaufen, dann setzen + var editExpression = new EditExpressions(); + } + else + { + ShowComplexTaskMessage(); //Meldung ausgeben wenn die Aufgabe zu komplex ist. + } + } + return retValue; + } + + //------------------------------------------------------------------------------ + // Following method disposes all the class members + //------------------------------------------------------------------------------ + public void Dispose() + { + try + { + if (isDisposeCalled == false) + { + //TODO: Add your application code here + } + isDisposeCalled = true; + } + catch (NXOpen.NXException ex) + { + // ---- Enter your exception handling code here ----- + } + } + + public static int GetUnloadOption(string arg) + { + //Unloads the image explicitly, via an unload dialog + //return System.Convert.ToInt32(Session.LibraryUnloadOption.Explicitly); + + //Unloads the image immediately after execution within NX + // return System.Convert.ToInt32(Session.LibraryUnloadOption.Immediately); + + //Unloads the image when the NX session terminates + return System.Convert.ToInt32(Session.LibraryUnloadOption.AtTermination); + } + + private static void ShowComplexTaskMessage() + { + if (theSession.GetEnvironmentVariableValue("UGII_LANG") == "german") + { + //deutsch + NXOpen.UI.GetUI().NXMessageBox.Show("Warnung!", NXMessageBox.DialogType.Warning, "Die geforderte Aufgabe ist zu komplex.\nBitte lösen Sie die Aufgabe manuell.\nUnterstütztung erhalten Sie von ihrem Keyuser."); + } + else + { + //englisch + NXOpen.UI.GetUI().NXMessageBox.Show("Warning!", NXMessageBox.DialogType.Warning, "The required task is too complex.\nPlease solve the task manually.\nYou will receive support from your keyuser."); + } + } +} + diff --git a/NX_Blech_EPPlus/ReadMe.txt b/NX_Blech_EPPlus/ReadMe.txt new file mode 100644 index 0000000..4ea71e6 --- /dev/null +++ b/NX_Blech_EPPlus/ReadMe.txt @@ -0,0 +1,103 @@ +======================================================================== + NX_OPEN : NX_Blech Project Overview +======================================================================== + +NX12 Open C# Wizard has created this NX_Blech project for you as a starting point. + +This file contains a summary of what you will find in each of the files that make up your project. + +NX_Blech.vbproj + This is the main project file for projects generated using an Application Wizard. + It contains information about the version of the product that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + + Executing User Exit Functions + ----------------------------- + + For execution of each user exit, corresponding Environment Variable need to be set with the full path + of the dll. + + The following environment variables are used to point to user exit executables. + Alternatively a single Environment Variable USER_DEFAULT can be set for all the Entry point. + +User Exit Environment Variable Entry Point + +Open Part USER_RETRIEVE ufget + +New Part USER_CREATE ufcre + +Save Part USER_FILE ufput + +Save Part As USER_SAVEAS ufsvas + +Import Part USER_MERGE ufmrg + +Execute GRIP Program USER_GRIP ufgrp + +Add Existing Part USER_RCOMP ufrcp + +Export Part USER_FCOMP uffcp + +Component Where-used USER_WHERE_USED ufusd + +Plot File USER_PLOT ufplt + +2D Analysis Using +Curves USER_AREAPROPCRV uf2da + +User Defined Symbols USER_UDSYMBOL ufuds + +Open CLSF USER_CLS_OPEN ufclso + +Save CLSF USER_CLS_SAVE ufclss + +Rename CLSF USER_CLS_RENAME ufclsr + +Generate CLF USER_CL_GEN ufclg + +Postprocess CLSF USER_POST ufpost + +Create Component USER_CCOMP ufccp + +Change Displayed Part USER_CDISP ufcdp + +Change Work Part USER_CWORK ufcwp + +Remove Component USER_DCOMP ufdcp + +Reposition Component USER_MCOMP ufmcp + +Substitute Component +Out USER_SCOMP1 ufscpo + +Substitute Component In USER_SCOMP2 ufscpi + +Open Spreadsheet USER_SPRD_OPN ufspop + +Close Spreadsheet USER_SPRD_CLO ufspcl + +Update Spreadsheet USER_SPRD_UPD ufspup + +Finish Updating +Spreadsheet USER_SPRD_UPF ufspuf + +Replace Reference Set USER_RRSET ufrrs + +Rename Component USER_NCOMP ufncp + +NX Startup USER_STARTUP ufsta + +Access Genius Library +Management System USER_GENIUS ufgen + +Execute Debug GRIP USER_GRIPDEBUG ufgrpd + +Execute User Function USER_UFUN ufufun + +Initialize new operation +Re-initialize an +existing operation USER_CREATE_OPER ufnopr + +CAM Startup USER_CAM_STARTUP ufcams + diff --git a/NX_Blech_EPPlus/packages.config b/NX_Blech_EPPlus/packages.config new file mode 100644 index 0000000..969227f --- /dev/null +++ b/NX_Blech_EPPlus/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file