/* The following example opens an existing assembly part and then creates a component set and adds all the components, at all levels explicitly, to the set. */ #include #include #include #include #include #include #include static int cycle_components ( tag_t component, /* Component to cycle I/O */ tag_t cset /* Component set to be modified I/O */ ) { int inx, ifail = 0, component_count = 0; tag_t *child_components = NULL; logical level = FALSE; if (component == NULL_TAG) return 0; component_count = UF_ASSEM_ask_part_occ_children(component, &child_components); for (inx = 0; inx < component_count; inx++) { ifail = UF_ASSEM_add_to_cset(cset, child_components[inx], level); if (ifail == 0) ifail = cycle_components(child_components[inx], cset); else break; } UF_free(child_components); return ifail; } /*ARGSUSED*/ extern void ufusr(char *name, int *rtcode, int rtlen) { /* Short example of the use of creating component set in an assembly */ int status = 0; tag_t root_part_occ = NULL_TAG; tag_t displayed_part = NULL_TAG; tag_t cset = NULL_TAG; static char* cset_name = "my_cset"; status = UF_initialize(); if(!status) { strcpy(name, ""); displayed_part = UF_PART_ask_display_part(); if (displayed_part != NULL_TAG) { root_part_occ = UF_ASSEM_ask_root_part_occ(displayed_part); if (root_part_occ != NULL_TAG) { *rtcode = UF_ASSEM_create_cset(displayed_part, cset_name, &cset); if (*rtcode == 0) { *rtcode = cycle_components(root_part_occ, cset); } } } if (*rtcode == 0) { /* This assumes we have successfully executed the program */ printf("The NX Open API program has succeeded\n" " Return code is %d\n",*rtcode); } else { /* This assumes we failed */ printf("The NX Open API program has failed\n" " Return code is %d\n", *rtcode); } UF_terminate(); } }