Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX
  UDF laden via UgOpen

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
  
On-Demand-Webinare zu RuleDesigner (RuleDesigner,EDM,PDM)
Autor Thema:  UDF laden via UgOpen (1653 mal gelesen)
msch
Mitglied
Entwicklungsingenieur

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

Beiträge: 8
Registriert: 03.12.2002

erstellt am: 21. Mai. 2003 15:23    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 Zusammen,

ich habe die Aufgabe via UIStyler ein UDF zu importieren.
Die zur Verfügung stehende UG-Version ist V17.
Aus den C Beispielen konnte ich einiges zusammen suchen, nur die
Anwendung von UDF's fehlen.

Weiter unten ist ein Versuch (Ausschnitt) aus dem modifizierten Stylercode. Die Kompilierung erfolgte ohne Probleme. Nur die Ausführung war etwas ernüchternd. (Nach dem Button-Druck passierte nichts, auch keine Fehlermeldung)

Das UDF habe ich via "Export UDF" erstellt es funktioniert einwandfrei. Die Dateiendung ist aber ".prt" und nicht wie in der Funktion beschrieben ".udf".

Hat irgend wer eine Idee wo der Fehler liegt?
Oder kann mir Jemand ein Beispielcode übermitteln? (muss nicht im Styler sein, aber am liebsten mit der Parameterübergabe zb. Länge Durchmesser)

Besten Dank im Voraus.

Gruss M. Schmid


Code:

int MAINMENU_action_button_act_cb ( int dialog_id,
            void * client_data,
            UF_STYLER_item_value_type_p_t callback_data)
{
    /* Make sure User Function is available. */ 
    if ( UF_initialize() != 0)
          return ( UF_UI_CB_CONTINUE_DIALOG );

    /* ---- Enter your callback code here ----- */

char *filename="S:\\V170\\usertools\\UDF\\TestTeile\\mschF987000m.prt";

double dest_point[3]= {0.0,0.0,0.0};
double dest_csys[9]= {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};

tag_t body = NULL_TAG;

if (!UF_CALL(UF_initialize()))
{
  UF_CALL(UF_MODL_import_udf(filename, dest_csys,dest_point,&body ));
  UF_CALL(UF_terminate());
}

file://UF_MODL_import_udf(filename, dest_csys,dest_point,&body);

    UF_terminate ();

    /* Callback acknowledged, do not terminate dialog */
    return (UF_UI_CB_CONTINUE_DIALOG);
   
    /* or Callback acknowledged, terminate dialog.    */
    /* return ( UF_UI_CB_EXIT_DIALOG );              */

}

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

Zopo1
Mitglied
Techniker


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

Beiträge: 96
Registriert: 03.03.2003

UG V18.0.5

erstellt am: 22. Mai. 2003 09:55    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 msch 10 Unities + Antwort hilfreich

mit UIStyler kenn ich mich gar nicht aus.... allerdings würde ich das Augenmerk mal auf das UDF legen, denn die Extension ist dort auf jeden Fall *.udf....vieleicht hängts hiermit zusammen.... Vieleicht wird im Moment bei Dir der Part importiert und hat keine Elemente als Inhalt....das würde auch erklären warum keine Fehlermeldung kommt und aus Deiner Sicht nichts passiert.

Gruß
Knut

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

little_ug
Mitglied
CAX/PDM Admin / PM


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

Beiträge: 389
Registriert: 20.03.2003

erstellt am: 22. Mai. 2003 21:30    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 msch 10 Unities + Antwort hilfreich

Hi,

ebenfalls kenn ich mich mit dem UIStyler gar nicht aus....

aber wichtig ist beim UDF das cgm File!

Probier mal das aufzurufen!

ich hoffe es klappt!

mfg Little Ug

------------------

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

msch
Mitglied
Entwicklungsingenieur

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

Beiträge: 8
Registriert: 03.12.2002

erstellt am: 22. Mai. 2003 21:59    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

Besten Dank für Eure Infos,
aber es ist schon so, erstelle ich ein Zylinder mit dem Parameter D für Durchmesser und L für Länge und ich exportiere das Ding als "User Defined Feature..." erscheint das UDF-Menü. In diesem Menü gib ich die Library (zB. TestTeil) an, erstelle ein CGM und definiere sämtliche Elemente als relevant. Beim Zylinder definiere ich D und L als Eingabegrösse und speichere das Ganze.

Nun erhalte ich ein Eintrag in der Text-Datei welche im UDF-Verzeichnis ist "Zyl;S:\V170\usertools\UDF\TestTeile\mschCB7E0010.prt;S:\V170\usertools\UDF\TestTeile\mschCB7E0010.cgm;"

Die Files sind alle vorhanden. Manuell klappt das Einfügen des UDF's.
Nur die Endung lautet auf ".prt" und nicht ".udf" (Umbenennen hat nichts geholfen)

Die Funktion "UF_MODL_import_udf" verlangt laut "...\UGDOC\HTML_FILES\ugopen_doc\uf_modl_general\index.html"
der Name ".udf".

Und da ist der Haken.

(Sucht mal nach *.udf findet Ihr was?)

Wenn Jemand ein Beispiel-Source für den Import eines UDF in das Forum legen könnte, würde es mir extrem weiter helfen. Ein C oder Cpp Beispiel würde schon reichen.

Danke nochmals für Euer Bemühen.

Gruss
msch 

 

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

ts
Mitglied
 


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

Beiträge: 161
Registriert: 25.09.2001

erstellt am: 23. Mai. 2003 08:41    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 msch 10 Unities + Antwort hilfreich

Moin,

guck mal in deiner ug_metric.def wie dieser eintrag steht
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>
!
! The following toggle controls whether a UDF gets a complete name or a
! simple name when it is imported through UFUNC. If it is on, the UDF will
! get the full path name including the suffix .udf. If it is off, the directory
! path and suffix are removed from the name.
!
! Valid options [on, off]
!
Solids_Udf_Full_Path_Name: off

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<+


Kann sein das dir das schon weiter hilft

Gruss Thorsten

------------------

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

berberic
Mitglied
Software-Developer


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

Beiträge: 113
Registriert: 04.02.2003

Don't worry be happy.
Michael

erstellt am: 02. Jun. 2003 23:27    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 msch 10 Unities + Antwort hilfreich

Hallo msch,

Ich habe, alledings in in einem anderen Zusammenhang, die Erfahrung
machen müssen, daß innerhalb des APIs ein Unterschied zwischen der
alten und der neuen UDF-Methode gemacht wird. Für die neue Methode
würde ich an Deiner Stelle einmal dieses Beispiel austesten.
Ich habe es zwar noch nicht getestet, wünsche Dir aber viel Glück.

Gruß Michael

Date:  14-NOV-2002
Subject:  Sample APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) program to create instantiated udf
Source: UG/Answer

/*HEAD CREATE_INSTANTIATED_UDF CCC UFUN */
#include <stdio.h>
#include <string.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_object_types.h>
#include <uf_part.h>
#include <uf_modl.h>
#include <uf_disp.h>
#include <uf_obj.h>
#include <uf_assem.h>
#include <uf_cfi.h>

#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))

static int report_error( char *file, int line, char *call, int irc)
{
    if (irc)
    {
        char err[133],
            msg[133];

        sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ",
            irc, line, file);
        UF_get_fail_message(irc, err);

    /*  NOTE:  UF_print_syslog is new in V18 */

        UF_print_syslog(msg, FALSE);
        UF_print_syslog(err, FALSE);
        UF_print_syslog("\n", FALSE);
        UF_print_syslog(call, FALSE);
        UF_print_syslog(";\n", FALSE);

        if (!UF_UI_open_listing_window())
        {
            UF_UI_write_listing_window(msg);
            UF_UI_write_listing_window(err);
            UF_UI_write_listing_window("\n");
            UF_UI_write_listing_window(call);
            UF_UI_write_listing_window(";\n");
        }
    }

    return(irc);
}

static tag_t ask_next_feature_of_type(tag_t part, char *type, tag_t feat)
{
    char
        *this_type;

    while (!UF_CALL(UF_OBJ_cycle_objs_in_part(part, UF_feature_type, &feat))
        && (feat != NULL_TAG))
    {
        if (UF_OBJ_ask_status(feat) == UF_OBJ_ALIVE)
        {
            UF_CALL(UF_MODL_ask_feat_type(feat, &this_type));
            if (!strcmp(this_type, type))
            {
                UF_free(this_type);
                return feat;
            }
            UF_free(this_type);
        }
    }

    return NULL_TAG;
}

static void report_load_status(UF_PART_load_status_t *status)
{
    char
        msg[133];
    int
        ii;

    for (ii=0; ii<status->n_parts; ii++)
    {
        UF_get_fail_message(status->statuses[ii], msg);
        printf("    %s - %s\n", status->file_names[ii], msg);
    }

    if (status->n_parts > 0)
    {
        UF_free(status->statuses);
        UF_free_string_array(status->n_parts, status->file_names);
    }
}

static void combine_directory_and_wildcard(char *dir, char *fltr, char *spec)
{
    if (!strcmp(dir, ""))
        strcpy(spec, fltr);
    else
    {
        UF_CALL(uc4575(dir, 0, "junk.xxx", spec));
        strcpy(strstr(spec, "junk.xxx"), fltr);
    }
}

static logical prompt_for_part_name(char *prompt, char *fspec)
{
    int
        resp;
    char
        filter[MAX_FSPEC_SIZE+1],
        *p_dir,
        *p_ext;

    UF_CALL(UF_UI_ask_dialog_directory(UF_UI_PART_DIR, &p_dir));
    UF_CALL(UF_UI_ask_dialog_filter(UF_UI_PART_OPEN_FLTR, &p_ext));

    combine_directory_and_wildcard(p_dir, p_ext, filter);

    UF_free(p_dir);
    UF_free(p_ext);

    if (!UF_CALL(UF_UI_create_filebox(prompt, "Part Name", filter, "", fspec,
        &resp)) && (resp != UF_UI_CANCEL)) return TRUE;
    else return FALSE;
}

static logical prompt_for_text(char *prompt, char *text)
{
    int
        n,
        resp;

    resp = uc1600(prompt, text, &n);
    if (resp == 3 | | resp == 5) return TRUE;
    return FALSE;
}

static int allocate_string_array(int n_elements, int n_chars, void ***where)
{
    int
        ii,
        resp;

    *where = UF_allocate_memory(n_elements * sizeof(char *), &resp);

    for (ii = 0; ii < n_elements; ii++)
    {
        (*where)[ii] = UF_allocate_memory(n_chars * sizeof(char), &resp);
        if (resp) return resp;
    }

    return 0;
}

/*ARGSUSED*/
static int mask_add_faces_and_edges(UF_UI_selection_p_t select, void *type)
{
    UF_UI_mask_t
        mask[2] = { { UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE },
                    { UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_EDGE } };

    if (!UF_CALL(UF_UI_set_sel_mask(select,
            UF_UI_SEL_MASK_ENABLE_SPECIFIC, 2, mask)))
        return (UF_UI_SEL_SUCCESS);
    else
        return (UF_UI_SEL_FAILURE);
}

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

    UF_CALL(UF_UI_set_cursor_view(0));
    UF_CALL(UF_UI_select_with_single_dialog( "Select an object", prompt,
        UF_UI_SEL_SCOPE_WORK_PART, mask_add_faces_and_edges, NULL, &resp,
        &object, cp, &view));
    UF_CALL(UF_UI_set_cursor_view(1));

    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;

}

static void do_it(void)
{
    int
        error,
        ii,
        num_parents,
        num_expression;
    tag_t
        *expression = NULL,
        exp,
        feature = NULL_TAG,
        *new_parents = NULL,
        new_udf_feature,
        *parents = NULL,
        part,
        prev_work_part;
    char
        **exp_rhs,
        **expression_prompt = NULL,
        *lhs,
        **parents_prompt = NULL,
        *rhs,
        *string,
        udf_part[MAX_FSPEC_SIZE+1] = { "" },
        udf_cgm[MAX_FSPEC_SIZE+1];
    UF_PART_load_status_t
        error_status;

    if (!prompt_for_part_name("UDF part", udf_part)) return;

    strcpy(udf_cgm, udf_part);
    strcpy(strstr(udf_cgm, ".prt"), ".cgm");

    UF_CALL(UF_PART_open_quiet(udf_part, &part, &error_status));
    if (error_status.n_parts > 0) report_load_status(&error_status);

    UF_CALL(UF_ASSEM_set_work_part_quietly(part, &prev_work_part));

    feature = ask_next_feature_of_type(part, "UDF_DEF", feature);

    UF_CALL(UF_MODL_ask_udf_definition(feature, &parents, &parents_prompt,
        &num_parents, &expression, &expression_prompt, &num_expression));

    UF_CALL(UF_ASSEM_set_work_part_quietly(prev_work_part, &part));

    new_parents = (tag_t *)UF_allocate_memory(sizeof(tag_t)*num_parents,
        &error);
    for (ii = 0; ii < num_parents; ii++)
        new_parents[ii] =  select_anything(parents_prompt[ii]);

    UF_CALL(allocate_string_array(num_expression, UF_MAX_EXP_LENGTH,
        (void ***)&exp_rhs));

    for (ii = 0; ii < num_expression; ii++)
    {
        UF_CALL(UF_MODL_ask_exp_tag_string(expression[ii], &string));
        UF_CALL(UF_MODL_dissect_exp_string(string, &lhs, &rhs, &exp));
        strcpy(exp_rhs[ii], rhs);
        UF_free(lhs);
        UF_free(rhs);
        UF_free(string);
        prompt_for_text(expression_prompt[ii], exp_rhs[ii]);
    }

    UF_CALL(UF_MODL_register_rpo_routine(UF_MODL_udf_rpo_menu));

    UF_CALL(UF_MODL_create_instantiated_udf(feature, udf_cgm, parents,
        new_parents, num_parents, expression, exp_rhs, num_expression,
        &new_udf_feature));

    UF_CALL(UF_MODL_unregister_rpo_routine());

    UF_free(parents);
    UF_free(new_parents);
    UF_free_string_array(num_parents, parents_prompt) ;
    UF_free(expression);
    UF_free_string_array(num_expression, expression_prompt);
    UF_free_string_array(num_expression, exp_rhs);

    UF_CALL(UF_PART_close(part, 0, 1));

}

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

int ufusr_ask_unload(void)
{
/*  Note:  can NOT be unloaded - calls UF_MODL_register_rpo_routine. */
    return (UF_UNLOAD_UG_TERMINATE);
}



------------------

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)2024 CAD.de | Impressum | Datenschutz