添加装配组件源码实例
#include <stdio.h> #include <string.h> #include <uf.h> #include <uf_ui.h> #include <uf_cfi.h> #include <uf_part.h> #include <uf_assem.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]; UF_UI_open_listing_window(); UF_get_fail_message(irc, err); UF_UI_write_listing_window(err); UF_UI_write_listing_window("\n"); sprintf(err, "error %d at line %d in %s\n", irc, line, file); UF_UI_write_listing_window(err); UF_UI_write_listing_window(call); UF_UI_write_listing_window(";\n\n"); } return(irc); } static void report_load_status(UF_PART_load_status_p_t status) { char msg[133]; int ii; if (status->n_parts > 0) { UF_UI_open_listing_window(); UF_UI_write_listing_window("Load notes:\n"); for (ii = 0; ii < status->n_parts; ii++) { UF_UI_write_listing_window(" "); UF_UI_write_listing_window(status->file_names[ii]); UF_UI_write_listing_window(" - "); UF_get_fail_message(status->statuses[ii], msg); UF_UI_write_listing_window(msg); UF_UI_write_listing_window("\n"); } UF_UI_write_listing_window("\n"); UF_free(status->statuses); UF_free_string_array(status->n_parts, status->file_names); } } static void do_it(void) { tag_t instance, part = UF_PART_ask_display_part(); double origin[3] = { 0, 0, 0 }, matrix[6] = { 1,0,0, 0,1,0 }; UF_PART_load_status_t error_status; UF_CALL(UF_ASSEM_add_part_to_assembly(part, "parts/a.prt", NULL, NULL, origin, matrix, 0, &instance, &error_status)); report_load_status(&error_status); } 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); } static void build_copy_partname(char *copy_fspec) { char dspec[MAX_FSPEC_SIZE+1], part_name[MAX_ENTITY_NAME_SIZE+1], part_fspec[MAX_FSPEC_SIZE+1]; tag_t part = UF_PART_ask_display_part(); UF_PART_ask_part_name(part, part_fspec); UF_CALL(uc4576(part_fspec, 2, dspec, part_name)); UF_CALL(uc4578(part_name, 2, part_name)); strcat(part_name, "-new"); UF_CALL(uc4575(dspec, 2, part_name, copy_fspec)); } int main( int argc, char *argv[] ) { int cnt = 0; tag_t part; char new_fspec[MAX_FSPEC_SIZE+1], part_name[MAX_FSPEC_SIZE+1]; UF_PART_load_status_t status; if (!UF_CALL(UF_initialize())) { UF_CALL(uc4624(0, argc, argv)); while (uc4621(part_name) == 1) { printf("%d. %s\n", ++cnt, part_name); UF_CALL(UF_PART_open(part_name, &part, &status)); report_load_status(&status); if (!status.failed) { do_it(); build_copy_partname(new_fspec); if (!UF_CALL(UF_PART_save_as(new_fspec))) printf("\tsaved as %s\n", new_fspec); UF_CALL(UF_PART_close_all()); } } printf("\nProcessed %d parts.\n", cnt); UF_CALL(UF_terminate()); } return 0; }
转载请注明出处: 芝麻开花
本文的链接地址: http://www.vmould.cn/?post=63
上一篇
发表评论 取消回复