Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Back und Cancel mit Ufunc

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX
Autor Thema:  Back und Cancel mit Ufunc (840 mal gelesen)
totti2305
Mitglied
Dipl Ing Maschinenbau


Sehen Sie sich das Profil von totti2305 an!   Senden Sie eine Private Message an totti2305  Schreiben Sie einen Gästebucheintrag für totti2305

Beiträge: 183
Registriert: 10.03.2005

Windows 7 x64 SP1
NX 7.5.5.4 MP12
Teamcenter 8.3.3.8

erstellt am: 06. Mai. 2008 19:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!

in dem Programm an dem ich gerade am arbeiten bin benutze ich UF_UI_select_with_single_dialog um verschiedene Componenten in einer Baugruppe auszusuchen. In UG Help steht drin das als response natürlich auch UF_UI_BACK und UF_UI_CANCEL ausgegeben werden können. Nur wie beende ich denn dass ganze Programm nachdem resp == UF_UI_CANCEL ist. habs mal mit UF_terminate und abort() versucht, hat aber nicht geklappt. Will eigetnlich nur dem Benutzer die möglichkeit geben überall das Programm zu beenden.
Genauso ist das mit UF_UI_Back, gibt es da vielleicht auch nen schlauen befehl für; will da auch nur einen schritt im Programm zurück, mit undo springt die Nixe gleich wieder an die Ausgangsposition.
Danke im Voraus

Torsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

älg
Mitglied
CADmin


Sehen Sie sich das Profil von älg an!   Senden Sie eine Private Message an älg  Schreiben Sie einen Gästebucheintrag für älg

Beiträge: 403
Registriert: 17.06.2003

erstellt am: 07. Mai. 2008 07:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für totti2305 10 Unities + Antwort hilfreich

Die sauberste Lösung ist wohl ein return zur Startroutine, wo das 'UF_terminate()' schon lauert. Alternativ gleich selbigen Befehl an die Stelle, wo Schluß sein soll - nur Vorsicht, was Rückgabe von Speicher angeht.
Folgender Code sollte - alternativ zu '(response == UF_UI_OBJECT_SELECTED)'- kein Problem sein:
Code:

if (response == UF_UI_CANCEL | | response == UF_UI_BACK) UF_CALL(UF_terminate());

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

totti2305
Mitglied
Dipl Ing Maschinenbau


Sehen Sie sich das Profil von totti2305 an!   Senden Sie eine Private Message an totti2305  Schreiben Sie einen Gästebucheintrag für totti2305

Beiträge: 183
Registriert: 10.03.2005

Windows 7 x64 SP1
NX 7.5.5.4 MP12
Teamcenter 8.3.3.8

erstellt am: 07. Mai. 2008 08:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo aelg!

Jou, so hatte ich das auch schon, hier mal der code

static int mask_for_components(UF_UI_selection_p_t select, void *type)
{
    UF_UI_mask_t
        mask = { UF_component_type, 0, 0 };

    if (!UF_CALL(UF_UI_set_sel_mask(select,
            UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, 1, &mask)))
        return (UF_UI_SEL_SUCCESS);
    else
        return (UF_UI_SEL_FAILURE);
}

static tag_t select_a_component(char *prompt)
{
    int
        resp;
    double
        cp[3];
    tag_t
        object,
        view;

    UF_CALL(UF_UI_select_with_single_dialog("Select a component", prompt,
        UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY, mask_for_components, NULL, &resp,
        &object, cp, &view));

    if (resp == UF_UI_CANCEL)
        {
        UF_CALL(UF_terminate());
        }
   
    if (resp == UF_UI_OBJECT_SELECTED | | resp == UF_UI_OBJECT_SELECTED_BY_NAME)
    {
        UF_CALL(UF_DISP_set_highlight(object, 0));
        return object;
    }
    else return NULL_TAG;

Die Funktion select_a_component steckt in ner while schleife drin, und wenn ich cancel druecke, bricht das program nur die while schleife ab und setzt das programm danach fort. Genau das selbe ist auch schon vorher passiert. irgendwie scheint es dass UF_terminate gar nichts macht. Hab mir auch mal die Variable resp ausdrucken lassen und die if-schleife mit dem zahlenwert probiert, auch nichts.
Uf-terminate scheint eh nicht so ganz zu funktionieren, oder? Denn immer wenn ich das programm laufen lasse, was im code veraendere und dann wieder compilen will, kommt der error code LNK1201, nicht genuegend speicherplatz vorhanden. keine ahnung, hab schon alles moegliche versucht zu "freen".

Torsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

älg
Mitglied
CADmin


Sehen Sie sich das Profil von älg an!   Senden Sie eine Private Message an älg  Schreiben Sie einen Gästebucheintrag für älg

Beiträge: 403
Registriert: 17.06.2003

erstellt am: 07. Mai. 2008 08:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für totti2305 10 Unities + Antwort hilfreich

  
Zitat:
Folgender Code sollte - alternativ zu '(response == UF_UI_OBJECT_SELECTED)'- kein Problem sein
...

Geht wohl doch nicht so einfach? Muß ich bei Gelegenheit mal testen.
Also dann: teste in der while-Schleife den return-Wert und beende die Schleife ggf. mit 'break;'. Durchhangeln bis zum Ende ... Wie schon beschrieben:  

Zitat:
sauberste Lösung ist wohl ein return zur Startroutine

Nach dem Terminieren (sauber oder unsauber) sollte eigentlich nichts mehr gehen können, da die Lizenz zurückgegeben wurde und die API-Umgebung schließt.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

totti2305
Mitglied
Dipl Ing Maschinenbau


Sehen Sie sich das Profil von totti2305 an!   Senden Sie eine Private Message an totti2305  Schreiben Sie einen Gästebucheintrag für totti2305

Beiträge: 183
Registriert: 10.03.2005

Windows 7 x64 SP1
NX 7.5.5.4 MP12
Teamcenter 8.3.3.8

erstellt am: 07. Mai. 2008 10:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!

hab das auch mal mit exit() versucht, aber dann schliesst die ganze session. egal ob exit_success oder exit_failure. Hab gerade mal auf der ugs answer seite gelesen dass das sich bei nx5 wieder geaendert hat. Benutz aber noch nx4.

Ok, das mit dem return zur Startroutine versteh ich nicht so ganz. meinst du die main-funktion oder das hier:

void ufusr(char *param, int *retcode, int paramLen)
{
    if (UF_CALL(UF_initialize())) return;
    do_it();
    UF_terminate();
}

int ufusr_ask_unload(void)
{
    return (UF_UNLOAD_IMMEDIATELY);   
}

hab das auch schon versucht aufzurufen, waere ja dann

return ufusr

, oder? das klappt auch nicht, kann auch nicht meiner meinung nach. und die main aufzurufen macht ja gar keinen sinn, finde ich.

Torsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

älg
Mitglied
CADmin


Sehen Sie sich das Profil von älg an!   Senden Sie eine Private Message an älg  Schreiben Sie einen Gästebucheintrag für älg

Beiträge: 403
Registriert: 17.06.2003

erstellt am: 07. Mai. 2008 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für totti2305 10 Unities + Antwort hilfreich

Die fragliche Routine ist über 'do_it();' gerufen worden. Ich meine also, Du solltest im Fall von CANCEL als saubere Lösung Dein 'do_it' beenden, z.B: per Test auf NULL_TAG. Dann landest Du wieder in 'ufusr(...)', zu dem das unload definiert ist.
Das 'UF_terminate();' sollte wohl allgemein nur in den userexit-Funktionen selbst auftauchen, interpretiere ich.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

totti2305
Mitglied
Dipl Ing Maschinenbau


Sehen Sie sich das Profil von totti2305 an!   Senden Sie eine Private Message an totti2305  Schreiben Sie einen Gästebucheintrag für totti2305

Beiträge: 183
Registriert: 10.03.2005

Windows 7 x64 SP1
NX 7.5.5.4 MP12
Teamcenter 8.3.3.8

erstellt am: 07. Mai. 2008 13:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ok, aber die frage is wie mach ich das. hab jetzt mal mit den verschiedesten sachen rumprobiert (break, exit...). hat nichts geholfen. goto soll man ja nicht so benutzen, aber auch wenn, funktioniert das nicht so einfach. haste vielleicht noch ne wuink mit dem zaunpfahl auf lager?

Torsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Fertigungsplaner*

Wir sind ein langjährig etablierter und erfahrener Global Player mit einem ambitionierten Team. Mit unserem Hauptsitz in Deutschland sind wir einer der wichtigsten Produzenten von Industrieventilatoren und Seitenkanalverdichtern. Unser Produkt-Portfolio beinhaltet ein weites Spektrum an kundenspezifischen Lösungen mit einem weltweit einzigartigen Qualitätsstandard. Ergreifen Sie Ihre Chance ...

Anzeige ansehenFertigung, Produktion
totti2305
Mitglied
Dipl Ing Maschinenbau


Sehen Sie sich das Profil von totti2305 an!   Senden Sie eine Private Message an totti2305  Schreiben Sie einen Gästebucheintrag für totti2305

Beiträge: 183
Registriert: 10.03.2005

erstellt am: 07. Mai. 2008 13:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

ok, habs doch hinbekommen, hab einfach einen wert aus der klasse zurueckgeben lassen, und diesen wert dann in der main-funktion abgefragt und einfach mal return gemacht. funktioniert!

torsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz