首页 添加装配组件源码实例

添加装配组件源码实例

小白鼠 2019-03-29 12:57:53 0 2611
#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;
}
装配 ·

发表评论