- 积分
- 10
- 注册时间
- 2007-10-5
- 仿真币
-
- 最后登录
- 1970-1-1
|
#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
查看全部评分
-
|