| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: frage zu Refresh values from external spreadsheet (2748 mal gelesen)
|
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004
|
erstellt am: 30. Apr. 2009 10:41 <-- editieren / zitieren --> Unities abgeben:
hallo zusammen nachfolgend ein c-code-schnipsel von siemens-nxopen: ich möchte den befehl "Tools-> Expression-> Refresh values from external spreadsheet" in ein best, vb.net-prog einbauen. mit c-codes kenne ich mich aber nicht aus. kann mir jemand auf die sprünge helfen? ist mit dem etwas anzufangen? ------------------------------------------------------------------- Tools-> Update-> Update for External Change Tools-> Expression-> Refresh values from external spreadsheet Tools-> Spreadsheet-> Edit-> Update NX part This program demonstrates a method which worked to update the model in a test case after changing values in an external spreadsheet. */ static logical evaluate_all_expressions(tag_t part, logical verbose) { logical something_changed = FALSE; int ii, n_exp; tag_t *exps; double new_value, old_value; char *full_string; UF_CALL(UF_MODL_ask_exps_of_part(part, &n_exp, &exps)); if (n_exp > 0) { for (ii = 0; ii < n_exp; ii++) { UF_CALL(UF_MODL_ask_exp_tag_string(exps[ii], &full_string)); if (verbose) WRITE(full_string); if (verbose) WRITE("\n"); UF_CALL(UF_MODL_ask_exp_tag_value(exps[ii], &old_value)); if (verbose) WRITE_F(old_value);
UF_CALL(UF_MODL_edit_exp(full_string)); UF_free(full_string); UF_CALL(UF_MODL_ask_exp_tag_value(exps[ii], &new_value)); if (verbose) WRITE_F(new_value); if (new_value != old_value) something_changed = TRUE; } if (verbose) WRITE_L(something_changed); UF_free(exps); } return something_changed; } -------------------------------------------------------------------------- ------------------ gruss urs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Siassei Mitglied MB - Student
Beiträge: 490 Registriert: 08.07.2007 SWX NX 3 und höher ;) Windows and UNIX<P>C, C++, Java, Phyton,...</P>
|
erstellt am: 05. Mai. 2009 18:29 <-- editieren / zitieren --> Unities abgeben: Nur für Sirus
Servus, ich hab das mal für dich umgeschrieben. Das solltest du auch selbst hinbekommen. Einfach nur hinzu stehen und zu sagen "Das verstehe ich nicht" zeugt von keiner all zu großen Begeisterung. Der Code ist in C# und sollte ohne Probleme in VB überführt werden können. Wenn du noch ein paar Fragen hast, dann melde dich einfach mal. Ich gebe keine Garantie auf Richtigkeit, da ich es frei geschrieben und keinen Test durchgeführt habe. Alle Rechte vorbehalten
Code: using System; using System.Collections.Generic; using System.Text;using NXOpen; using NXOpen.UF; namespace Generall { namespace Util {
/// <summary> /// /// </summary> sealed class SpreadsheetHelper { /// <summary> /// Logger /// </summary> private static Logger logger = logger.get("Spreadsheet_Helper"); /// <summary> /// /// </summary> /// <param name="part">Part to evaluate</param> /// <returns>Changed values</returns> static bool evaluateAllExpressions(Tag part) { logger.log("Call: evaluateAllExpressions ; Part=" + part.ToString, Priority.Debug);
UFSession sesUf = UFSession.GetUFSession(); bool changed = false; int n; Tag[] exps; double old_v, new_v; string s; sesUf.Modl.AskExpsOfPart(part, n, exps); if (n > 0) { logger.log("n (" + n.ToString() + ") > 0", Priority.Info); for (int i = 0; i < n; i++) { sesUf.Modl.AskExpTagString(exps[i], s); logger.log(s, Priority.Info); sesUf.Modl.AskExpTagValue(exps[i], old_v); logger.log(old_v, Priority.Info); sesUf.Modl.EditExp(s); sesUf.Modl.AskExpTagValue(exps[i], new_v); logger.log(new_v, Priority.Info); if (!changed) if (!new_v.Equals(old_v)) changed = true; } } else { logger.log("n == 0 -> Do nothing", Priority.Info); } logger.log("End of: evaluateAllExpressions ; Part=" + part.ToString, Priority.Debug); return changed; } } } }
Kontakt: question@enzinger-th.de ------------------ Hopfen und Mals Gott erhalts Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004
|
erstellt am: 06. Mai. 2009 07:51 <-- editieren / zitieren --> Unities abgeben:
|
Siassei Mitglied MB - Student
Beiträge: 490 Registriert: 08.07.2007 SWX NX 3 und höher ;) Windows and UNIX<P>C, C++, Java, Phyton,...</P>
|
erstellt am: 09. Mai. 2009 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für Sirus
|
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004
|
erstellt am: 12. Mai. 2009 07:52 <-- editieren / zitieren --> Unities abgeben:
|
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004 SolidWorks2022
|
erstellt am: 19. Mai. 2009 13:13 <-- editieren / zitieren --> Unities abgeben:
|
| Bauteilverantwortlicher (m/w/d) Automotive | Menschen und Technologien verbinden. Den Perfect Match für unsere Kunden gestalten. Immer die richtigen Experten für die jeweilige Herausforderung finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir Sie: als ambitionierten Kollegen, der wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte OEMs und Zulieferer der Automobilindustrie und übernehmen Verantwortung für komplexe Entwicklungsprojekte.... | Anzeige ansehen | Fahrzeugtechnik |
|
Siassei Mitglied MB - Student
Beiträge: 490 Registriert: 08.07.2007 SWX NX 3 und höher ;) Windows and UNIX<P>C, C++, Java, Phyton,...</P>
|
erstellt am: 25. Mai. 2009 18:38 <-- editieren / zitieren --> Unities abgeben: Nur für Sirus
Servus, nichts, denke ich Ich kann zurzeit nicht auf die NXOpen NX 4 Version zurückgreifen, weswegen ich dir nicht sagen, in wie weit sich die NXOpen-Lib verändert hat. Ein Auszug aus der NXOpenUF.dll von NX 6 zeigt mir Code: [DllImport("libufun.dll", EntryPoint="UF_MODL_ask_exp_tag_string", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] internal static extern unsafe int _AskExpTagString(Tag expression_tag, out sbyte* _string);.... public unsafe void AskExpTagString(Tag expression_tag, out string _string) { sbyte* numPtr; JAM.StartUFCall(); int errorCode = _AskExpTagString(expression_tag, out numPtr); JAM.EndUFCall(); if (errorCode != 0) { throw Util.CreateException(errorCode); } _string = Util.ArrayFromSM(numPtr); }
Daher sehe cih hier keinen Fehler. Die UF_CALL-Aufrufe erledigt ja die NXOpen-Lib bereits und ich muss sie nicht einführen. Folgendes funktioniert, aber ich weiß nicht, ob es mit NX4 geht. Vielleicht kennt jemand eine elegantere Art. Da die Brechstange hier nicht weit weg ist. Naja, mit dem Hammer geht alles :)
Code: public static void updateExpressionListWithExternSpreadsheet(Part p) { bool modif; // Gibt an, ob etwas modifiziert worden ist bool errorM; // Fehlermeldung, falls vorhanden p.Expressions.ImportFromFile("", ExpressionCollection.ImportMode.Replace, out modif, out errorM); //... }
------------------ Hopfen und Mals Gott erhalts Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|