/****************************************************************************** Copyright (c) 1999 Unigraphics Solutions, Inc. Unpublished - All Rights Reserved *******************************************************************************/ #include #include #include #include #include #include #include #define METRIC 1 #define ENGLISH 2 #define CHECK( func_ ) \ { int ifail_ = 0; \ char message[133]; \ ifail_ = (func_); \ if ( ifail_ != 0 ) { \ UF_get_fail_message( ifail_, message ); \ printf("ERROR: %s returned from %s\n", message, # func_); \ return ifail_; } } static int create_new_part_auto( void ); static int create_new_part_semi_auto( void ); static int create_new_part_manual( void ); static int print_work_part_info( void ); int main(int argc, char *argv[]) { int ifail = 0; ifail = UF_UGMGR_initialize(argc,(const char**)argv); if (ifail != 0) { printf("ERROR: Failed to initialize with error code %d\n", ifail); exit(1); } printf("\n"); printf("Auto assignment of part number\n"); printf("==============================\n\n"); create_new_part_auto(); print_work_part_info(); printf("Semi-auto assignment of part number\n"); printf("===================================\n\n"); create_new_part_semi_auto(); print_work_part_info(); printf("Manual assignment of part number\n"); printf("================================\n\n"); create_new_part_manual(); print_work_part_info(); UF_PART_close_all(); UF_UGMGR_terminate(); return 0; } static int create_new_part_auto( void ) { char part_num[UF_UGMGR_PARTNO_SIZE+1]; char part_rev[UF_UGMGR_PARTREV_SIZE+1]; char* part_file_type = "master"; char* part_file_name = ""; char encoded_name[MAX_FSPEC_SIZE + 1]; char* part_type = "Item"; tag_t part_tag; logical modifiable; /* Get an authorized new part number and revision from the system. */ CHECK(UF_UGMGR_assign_part_number( "", part_type, part_num, &modifiable)); CHECK(UF_UGMGR_assign_part_rev( "", part_type, part_rev, &modifiable)); printf("System has assigned part identifiers:\n"); printf(" Number: %s\n", part_num ); printf(" Revision: %s\n", part_rev ); printf("\n"); /* Encode the number and revision into a UG/Manager part filename. */ CHECK(UF_UGMGR_encode_part_filename( part_num, part_rev, part_file_type, part_file_name, encoded_name)); printf("Encoded UG/Manager part filename...\n"); CHECK(UF_PART_new( encoded_name, METRIC, &part_tag)); CHECK(UF_PART_save()); printf("Saved part...\n"); return 0; } static int create_new_part_semi_auto( void ) { char basis_part_num[UF_UGMGR_PARTNO_SIZE+1]; char part_num[UF_UGMGR_PARTNO_SIZE+1]; char part_rev[UF_UGMGR_PARTREV_SIZE+1]; char* part_file_type = "master"; char* part_file_name = ""; char encoded_name[MAX_FSPEC_SIZE + 1]; char* part_type = "Item"; tag_t part_tag; logical modifiable; /* Get a basis new part number from the user */ printf( "Enter a part number to base the new number on: "); scanf( "%s", basis_part_num ); /* Get a new part number based on user's input. * Actual number returned depends on the implementation of the * IMAN user exit USER_new_item_id(). The default routine ignores * basis_part_num if no part exists in the database with this * number. Otherwise a numerical suffix is appended if * basis_part_num ends in a non-numeric character, or the * numerical suffix is incremented until the part number does not * clash with any number already in use in the database. */ CHECK(UF_UGMGR_assign_part_number( basis_part_num, part_type, part_num, &modifiable)); CHECK(UF_UGMGR_assign_part_rev( "", part_type, part_rev, &modifiable)); printf("System has assigned part identifiers:\n"); printf(" Number: %s\n", part_num ); printf(" Revision: %s\n", part_rev ); /* Encode the number and revision into a UG/Manager part filename. */ CHECK(UF_UGMGR_encode_part_filename( part_num, part_rev, part_file_type, part_file_name, encoded_name)); printf("Encoded UG/Manager part filename...\n"); CHECK(UF_PART_new( encoded_name, METRIC, &part_tag)); CHECK(UF_PART_save()); printf("Saved part...\n"); return 0; } static int create_new_part_manual( void ) { char part_num[UF_UGMGR_PARTNO_SIZE+1]; char part_rev[UF_UGMGR_PARTREV_SIZE+1]; char amended_part_num[UF_UGMGR_PARTNO_SIZE+1]; char amended_part_rev[UF_UGMGR_PARTREV_SIZE+1]; char* part_file_type = "master"; char* part_file_name = ""; char encoded_name[MAX_FSPEC_SIZE + 1]; tag_t part_tag; logical modifiable; int retcode = 0; UF_UGMGR_partno_status_t validity; /* Get new part number and revision from the user */ printf( "Enter part number: "); scanf( "%s", part_num ); printf( "Enter revision id: "); scanf( "%s", part_rev ); printf("User selected part identifiers:\n"); printf(" Number: %s\n", part_num ); printf(" Revision: %s\n", part_rev ); /* Check that the user input does not violate in-house standards. * Do this by calling the validate function which in turn calls the * IMAN user exit USER_validate_part_rev. */ CHECK(UF_UGMGR_validate_part_rev( part_num, part_rev, "", amended_part_num, amended_part_rev, &validity )); switch (validity) { case UF_UGMGR_partno_valid: printf( "User selected number OK.\n"); break; case UF_UGMGR_partno_invalid: printf( "User selected number not OK.\n"); retcode = 1; break; case UF_UGMGR_partno_modified: printf( "Chosen part identifier modified. Use that instead.\n"); strcpy( part_num, amended_part_num ); strcpy( part_rev, amended_part_rev ); printf( "Modified part identifiers:\n"); printf( " Number: %s\n", part_num ); printf( " Revision: %s\n", part_rev ); break; default: printf( "Unexpected return code while validating part numbers.\n"); printf( "WARNING: The chosen values will be used but they may\n"); printf( " not be valid.\n"); break; } if (retcode == 0) { /* Encode the number and revision into a UG/Manager part filename. */ CHECK(UF_UGMGR_encode_part_filename( part_num, part_rev, part_file_type, part_file_name, encoded_name )); printf("Encoded UG/Manager part filename...\n"); CHECK(UF_PART_new( encoded_name, METRIC, &part_tag)); CHECK(UF_PART_save()); printf("Saved part...\n"); } return retcode; } static int print_work_part_info( void ) { char work_part_name[MAX_FSPEC_SIZE+1]; tag_t work_part_tag; char part_number[UF_UGMGR_PARTNO_SIZE+1]; char part_revision[UF_UGMGR_PARTREV_SIZE+1]; char part_file_type[UF_UGMGR_FTYPE_SIZE+1]; char part_file_name[UF_UGMGR_FNAME_SIZE+1]; UF_UGMGR_tag_t db_tag; char part_name[UF_UGMGR_NAME_SIZE+1]; char part_desc[UF_UGMGR_DESC_SIZE+1]; work_part_tag = UF_ASSEM_ask_work_part(); UF_PART_ask_part_name( work_part_tag, work_part_name ); CHECK(UF_UGMGR_decode_part_filename( work_part_name, part_number, part_revision, part_file_type, part_file_name )); printf( "For the current Work Part\n\n" ); printf( " Part Number : %s\n", part_number ); printf( " Part Revision : %s\n", part_revision ); printf( " Part File Type : %s\n", part_file_type ); printf( " Part File Name : %s\n", part_file_name ); CHECK(UF_UGMGR_ask_part_tag( part_number, &db_tag )); CHECK(UF_UGMGR_ask_part_name_desc( db_tag, part_name, part_desc)); printf( " Part Name : %s\n", part_name ); printf( " Part Description : %s\n", part_desc ); printf("\n"); return 0; }