找回密码
 注册
Simdroid-非首页
查看: 116|回复: 4

[二次开发] export selected geometry to iges(open c)

[复制链接]
发表于 2010-1-15 19:01:49 | 显示全部楼层 |阅读模式 来自 河北廊坊
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_part.h>
#include <uf_disp.h>
#include <uf_cfi.h>
#include <uf_ugmgr.h>

#define ECHO(X) { UF_UI_open_listing_window(); \
    UF_UI_write_listing_window(X); \
    UF_print_syslog(X, FALSE); }

#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[UF_UI_MAX_STRING_LEN];

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

        ECHO(msg);
        ECHO(err);
        ECHO("\n");
        ECHO(call);
        ECHO(";\n");
    }

    return(irc);
}

static int select_objects(char *prompt, tag_t **objects)
{
    int
        cnt,
        ii,
        resp;
    tag_t
        *objs;

    UF_CALL(UF_UI_select_with_class_dialog( prompt, "",
        UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY, NULL, NULL, &resp, &cnt, objects));

    objs = *objects;

    for (ii = 0; ii < cnt; ii++)
        UF_CALL(UF_DISP_set_highlight(objs[ii], 0));

    return cnt;

}

static void build_similar_temp_filespec(char *fspec, int ftype, char *new_spec)
{
    char
        dspec[UF_CFI_MAX_PATH_NAME_SIZE],
        temp_name[UF_CFI_MAX_FILE_NAME_SIZE],
        *tmp_dir;

    UF_CALL(UF_translate_variable("UGII_TMP_DIR", &tmp_dir));
    UF_CALL(uc4576(fspec, 0, dspec, temp_name));
    if (strrchr(temp_name, '.')) strcpy(strrchr(temp_name, '.'), "");
    UF_CALL(uc4575(tmp_dir, ftype, temp_name, new_spec));
}

static void do_it(void)
{
    logical
        nxman;
    int
        n,
        resp;
    tag_t
        *objects,
        part = UF_PART_ask_display_part();
    char
        cpn[MAX_FSPEC_SIZE+1],
        cmd[UF_UI_MAX_STRING_LEN+1],
        *cli_name,
        *dfn,
        filter[MAX_FSPEC_SIZE+1] = { "*.igs" },
        ifn[MAX_FSPEC_SIZE+1],
        lfn[MAX_FSPEC_SIZE+1],
        ofn[MAX_FSPEC_SIZE+1],
        *prog,
        *shell,
        pfn[MAX_FSPEC_SIZE+1];

#if defined(_WIN32)
    prog = "%UGII_BASE_DIR%\\IGES\\iges.cmd";
    dfn = "%UGII_BASE_DIR%\\IGES\\igesexport.def";
    shell = "cmd.exe /c";
#else
    prog = "$UGII_BASE_DIR/iges/iges";
    dfn = "$UGII_BASE_DIR/iges/igesexport.def";
    shell = "/bin/ksh -c";
#endif

/*  This does the whole part first - just to show how that works */

/*  the translator reads the last saved part not the active one */
    if (UF_PART_is_modified(part)) UF_CALL(UF_PART_save());

    UF_CALL(UF_PART_ask_part_name(part, cpn));
    build_similar_temp_filespec(cpn, 37, ifn);
    build_similar_temp_filespec(cpn, 47, lfn);
    UF_CALL(UF_is_ugmanager_active(&nxman));
    if (nxman)
    {
        UF_CALL(UF_UGMGR_convert_file_name_to_cli(cpn, &cli_name));
        sprintf(cmd, "%s \"\"%s\" -pim:yes o=\"%s\" d=\"%s\" l=\"%s\" \"%s\"\"",
            shell, prog, ifn, dfn, lfn, cli_name);
        UF_free(cli_name);
    }
    else
    {
        sprintf(cmd, "%s \"\"%s\" -pim:yes o=\"%s\" d=\"%s\" l=\"%s\" \"%s\"\"",
            shell, prog, ifn, dfn, lfn, cpn);
    }
    ECHO(cmd)
    ECHO("\n");
    system(cmd);

/*  Done the entire part, now do just selected geometry */

    while (((n = select_objects("Select objects to export", &objects)) > 0) &&
        !UF_CALL(UF_UI_create_filebox("Specify IGES file to export into",
            "IGES file", filter, "", ofn, &resp)) && (resp != UF_UI_CANCEL))
    {
        build_similar_temp_filespec(ofn, 47, lfn);
        build_similar_temp_filespec(ofn, 2, pfn);
        sprintf(cmd, "%s \"\"%s\" o=\"%s\" d=\"%s\" l=\"%s\" \"%s\"\"",
            shell, prog, ofn, dfn, lfn, pfn);

        if (!UF_CALL(UF_PART_export(pfn, n, objects)))
        {
            ECHO(cmd)
            ECHO("\n");
            system(cmd);
            uc4561(pfn, 0);
        }
        UF_free(objects);
    }
}

/*ARGSUSED*/
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);
}

评分

1

查看全部评分

发表于 2010-1-23 17:28:07 | 显示全部楼层 来自 北京海淀
Simdroid开发平台
问一下版主,import的函数怎么用啊?就是IGES转换成UG的part文件
回复 不支持

使用道具 举报

 楼主| 发表于 2010-1-23 18:18:58 | 显示全部楼层 来自 河北廊坊
The mechanics behind IGES import

在阐述这个机制过程中,UGS加注了
ALL RIGHTS RESERVED.  No distribution except provided under contract

import用到了command script
回复 不支持

使用道具 举报

发表于 2010-1-23 18:34:37 | 显示全部楼层 来自 北京海淀
The mechanics behind IGES import

在阐述这个机制过程中,UGS加注了
ALL RIGHTS RESERVED.  No distribution except provided under contract

import用到了command script
lirui0726 发表于 2010-1-23 18:18

你这个是在哪里看到的啊?是UG的help吗?
回复 不支持

使用道具 举报

发表于 2010-3-24 09:48:10 | 显示全部楼层 来自 河北保定
我做出了PS的导入导出
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-22 17:50 , Processed in 0.042116 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表