麻烦大家帮我看下这个程序
////////////////////////////////////////////////////////////////////////////////
// ugsam.cpp
//
// Description:
// Main file for the application.
//
//////////////////////////////////////////////////////////////////////////////
// Include files
#include <uf.h>
//#include <uf_defs.h>
//#include <uf_dirpath.h>
//#include <uf_exit.h>
//#include <uf_obj_types.h>
//#include <uf_obj_errors.h>
#include <uf_object_types.h>
#include <uf_modl.h>
#include <uf_ps.h>
#include <uf_ui.h>
#include <uf_modl_utilities.h>
//#include <uf_cfi.h>
//#include <uf_curve.h>
#include <uf_obj.h>
#include <uf_part.h>
//#include <uf_assem.h>
//#include <uf_std.h>
//#include <ufd_obj_cycle_objs_in_part.c>
#include <ufd_modl_ask_features_of_exp.c>
static void PrintErrorMessage()
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
# include <strstream>
using std::ostrstream;
using std::endl;
using std::ends;
#else
# include <strstream.h>
#endif
#include <iostream.h>
// Main routine
extern void main( char argc, char *argv[] )
{
/* Initialize the API environment */
int errorCode = UF_initialize();
if ( 0 == errorCode )
{
/* TODO: Add your application code here */
UF_PART_load_status_t error_status;
char sample_part_name1[133]="RD3\\sample3_0.prt";
char sample_part_name2[133]="RD3\\sample3_5.prt";
char sample_part_name3[133]="RD3\\sample3_10.prt";
char sample_part_name4[133]="RD3\\sample3_15.prt";
char sample_part_name5[133]="RD3\\sample3_20.prt";
char newpart_name[133]="newmodel.prt";
//读入UG建模参数
FILE *in;
char in_data_name[133]="UGModelData_3.dat";
int run_flag[2]={1,1};
if((in=fopen(in_data_name,"r"))==NULL)
{
printf("UG建模数据文件不存在或文件名有误,请检查!");
run_flag[0]=0;
printf("\nPress any key to continue");
getchar();
}
if(run_flag[0])
{
double seta; //拉削角
double upflankangle; //上侧角
double p71; //拉伸起点值
double p72; //拉伸终点值
double downflankangle; //下侧角
double p74; //拉伸起点值
double p75; //拉伸终点值
double pitch1; //齿距
double grvbottomheight; //槽底高
double contactlength; //接触长度
double fillet; //倒角
double wedgeangle; //楔形角
double wholeangle; //轴心角
double tooththickness1; //榫头齿厚
double downarc; //过渡下圆弧
double rootwidth; //伸根宽
double diskradius; //轮盘基准面半径
double grvtooththickness1; //榫槽齿厚
double uparc; //过渡上圆弧
double shoulderwidth; //榫头肩宽
double groovetoothheight; //榫槽齿高
double tenonheight; //榫头高
double toothheight; //榫头齿高
double grvbottomarc; //榫槽底部过渡圆弧
double tenontoparc; //榫头顶部过渡圆弧
double grvtoptooththickness; //榫槽顶齿厚
fscanf(in,"%lf",&seta);
fscanf(in,"%lf",&upflankangle);
fscanf(in,"%lf",&p71);
fscanf(in,"%lf",&p72);
fscanf(in,"%lf",&downflankangle);
fscanf(in,"%lf",&p74);
fscanf(in,"%lf",&p75);
fscanf(in,"%lf",&pitch1);
fscanf(in,"%lf",&grvbottomheight);
fscanf(in,"%lf",&contactlength);
fscanf(in,"%lf",&fillet);
fscanf(in,"%lf",&wedgeangle);
fscanf(in,"%lf",&wholeangle);
fscanf(in,"%lf",&tooththickness1);
fscanf(in,"%lf",&downarc);
fscanf(in,"%lf",&rootwidth);
fscanf(in,"%lf",&diskradius);
fscanf(in,"%lf",&grvtooththickness1);
fscanf(in,"%lf",&uparc);
fscanf(in,"%lf",&shoulderwidth);
fscanf(in,"%lf",&groovetoothheight);
fscanf(in,"%lf",&tenonheight);
fscanf(in,"%lf",&toothheight);
fscanf(in,"%lf",&grvbottomarc);
fscanf(in,"%lf",&tenontoparc);
fscanf(in,"%lf",&grvtoptooththickness);
tag_t part;
if(seta==0)
{ UF_PART_open(sample_part_name1,&part,&error_status);
printf("Sample Part Name : %s\n",sample_part_name1);
}
else if(seta==5)
{ UF_PART_open(sample_part_name2,&part,&error_status);
printf("Sample Part Name : %s\n",sample_part_name2);
}
else if(seta==10)
{ UF_PART_open(sample_part_name3,&part,&error_status);
printf("Sample Part Name : %s\n",sample_part_name3);
}
else if(seta==15)
{ UF_PART_open(sample_part_name4,&part,&error_status);
printf("Sample Part Name : %s\n",sample_part_name4);
}
else if(seta==20)
{ UF_PART_open(sample_part_name5,&part,&error_status);
printf("Sample Part Name : %s\n",sample_part_name5);
}
else run_flag[1]=0;
//
if(run_flag[1])
{
int i, num_exps = 0;
tag_t *oexps;
// int num_feats;
// tag_t *feats;
char *string;
// char *feat_type;
// char *feat_name;
static char ugexp[50][100]={"p17_y=","p17_z=","rootheight=","p75=20.00",
"groovetoothheight=0.90","tenonheight=13.4","uparc=0.500","downflankangle=59.0",
"upflankangle=68.0","pitch1=5.30","grvbottomheight=6.0","contactlength=1.8",
"toothheight=0.83", "grvbottomarc=2.7","pitch2=pitch1","fillet=0.2","wedgeangle=15.5",
"wholeangle=2.65","tooththickness1=2.50","tooththickness2=","diskradius=250.0","p70=0",
"p71=-20.00","p72=20.00","p73=0","tenontoparc=2.16","grvtoptooththickness=3.75",
"p14_x=","p14_y=","p14_z=","shoulderwidth=7.5","grvtooththickness1=2.50",
"grvtooththickness2=","rootwidth=5.5", "p74=-20.00","downarc=1.400","p17_x="};
printf("New model's parameters:\n");
//compute parameters and set update flag
int flag[50]={0};
//更新建模参数
//p75=20.50;
ugexp[3][4]=(int)p75/10;
ugexp[3][5]=(int)p75%10;
ugexp[3][7]=(int)(p75*10)%10;
ugexp[3][8]=(int)(p75*100)%10;
ugexp[3][4]=ugexp[3][4]+48;
ugexp[3][5]=ugexp[3][5]+48;
ugexp[3][7]=ugexp[3][7]+48;
ugexp[3][8]=ugexp[3][8]+48;
flag[3]=1;
printf("%s\n",ugexp[3]);
//"groovetoothheight=0.90";
ugexp[4][18]=(int)groovetoothheight;
ugexp[4][20]=(int)(groovetoothheight*10)%10;
ugexp[4][21]=(int)(groovetoothheight*100)%10;
ugexp[4][18]=ugexp[4][18]+48;
ugexp[4][20]=ugexp[4][20]+48;
ugexp[4][21]=ugexp[4][21]+48;
flag[4]=1;
printf("%s\n",ugexp[4]);
//tenonheight=13.4;
ugexp[5][12]=(int)tenonheight/10;
ugexp[5][13]=(int)tenonheight%10;
ugexp[5][15]=(int)(tenonheight*10)%10;
ugexp[5][12]=ugexp[5][12]+48;
ugexp[5][13]=ugexp[5][13]+48;
ugexp[5][15]=ugexp[5][15]+48;
flag[5]=1;
printf("%s\n",ugexp[5]);
//uparc=0.500;
ugexp[6][6]=(int)uparc;
ugexp[6][8]=int(uparc*10)%10;
ugexp[6][9]=int(uparc*100)%10;
ugexp[6][10]=int(uparc*1000)%10;
ugexp[6][6]=ugexp[6][6]+48;
ugexp[6][8]=ugexp[6][8]+48;
ugexp[6][9]=ugexp[6][9]+48;
ugexp[6][10]=ugexp[6][10]+48;
flag[6]=1;
printf("%s\n",ugexp[6]);
//downflankangle=59.5;
ugexp[7][15]=(int)downflankangle/10;
ugexp[7][16]=(int)downflankangle%10;
ugexp[7][18]=(int)(downflankangle*10)%10;
ugexp[7][15]=ugexp[7][15]+48;
ugexp[7][16]=ugexp[7][16]+48;
ugexp[7][18]=ugexp[7][18]+48;
flag[7]=1;
printf("%s\n",ugexp[7]);
//upflankangle=68.5;
ugexp[8][13]=(int)upflankangle/10;
ugexp[8][14]=(int)upflankangle%10;
ugexp[8][16]=(int)(upflankangle*10)%10;
ugexp[8][13]=ugexp[8][13]+48;
ugexp[8][14]=ugexp[8][14]+48;
ugexp[8][16]=ugexp[8][16]+48;
flag[8]=1;
printf("%s\n",ugexp[8]);
//pitch1=5.50;
ugexp[9][7]=(int)pitch1%10;
ugexp[9][9]=(int)(pitch1*10)%10;
ugexp[9][10]=(int)(pitch1*100)%10;
ugexp[9][7]=ugexp[9][7]+48;
ugexp[9][9]=ugexp[9][9]+48;
ugexp[9][10]=ugexp[9][10]+48;
flag[9]=1;
printf("%s\n",ugexp[9]);
//grvbottomheight=6.0;
ugexp[10][16]=(int)grvbottomheight;
ugexp[10][18]=int(grvbottomheight*10)%10;
ugexp[10][16]=ugexp[10][16]+48;
ugexp[10][18]=ugexp[10][18]+48;
flag[10]=1;
printf("%s\n",ugexp[10]);
//contactlength=1.8;
ugexp[11][14]=(int)contactlength;
ugexp[11][16]=int(contactlength*10)%10;
ugexp[11][14]=ugexp[11][14]+48;
ugexp[11][16]=ugexp[11][16]+48;
flag[11]=1;
printf("%s\n",ugexp[11]);
//toothheight=0.83;
ugexp[12][12]=(int)toothheight;
ugexp[12][14]=(int)(toothheight*10)%10;
ugexp[12][15]=(int)(toothheight*100)%10;
ugexp[12][12]=ugexp[12][12]+48;
ugexp[12][14]=ugexp[12][14]+48;
ugexp[12][15]=ugexp[12][15]+48;
flag[12]=1;
printf("%s\n",ugexp[12]);
//grvbottomarc=2.7;
ugexp[13][13]=(int)grvbottomarc;
ugexp[13][15]=(int)(grvbottomarc*10)%10;
ugexp[13][13]=ugexp[13][13]+48;
ugexp[13][15]=ugexp[13][15]+48;
flag[13]=1;
printf("%s\n",ugexp[13]);
//fillet=0.2;
ugexp[15][7]=(int)fillet;
ugexp[15][9]=int(fillet*10)%10;
ugexp[15][7]=ugexp[15][7]+48;
ugexp[15][9]=ugexp[15][9]+48;
flag[15]=1;
printf("%s\n",ugexp[15]);
//wedgeangle=15.5;
ugexp[16][11]=(int)wedgeangle/10;
ugexp[16][12]=(int)wedgeangle%10;
ugexp[16][14]=(int)(wedgeangle*10)%10;
ugexp[16][11]=ugexp[16][11]+48;
ugexp[16][12]=ugexp[16][12]+48;
ugexp[16][14]=ugexp[16][14]+48;
flag[16]=1;
printf("%s\n",ugexp[16]);
//wholeangle=2.65;
ugexp[17][11]=(int)wholeangle%10;
ugexp[17][13]=(int)(wholeangle*10)%10;
ugexp[17][14]=(int)(wholeangle*100)%10;
ugexp[17][11]=ugexp[17][11]+48;
ugexp[17][13]=ugexp[17][13]+48;
ugexp[17][14]=ugexp[17][14]+48;
flag[17]=1;
printf("%s\n",ugexp[17]);
//tooththickness1=2.50;
ugexp[18][16]=(int)tooththickness1;
ugexp[18][18]=int(tooththickness1*10)%10;
ugexp[18][19]=(int)(tooththickness1*100)%10;
ugexp[18][16]=ugexp[18][16]+48;
ugexp[18][18]=ugexp[18][18]+48;
ugexp[18][19]=ugexp[18][19]+48;
flag[18]=1;
printf("%s\n",ugexp[18]);
//diskradius=250.0;
ugexp[20][11]=(int)diskradius/100;
ugexp[20][12]=(int)diskradius%100/10;
ugexp[20][13]=(int)diskradius%10;
ugexp[20][15]=(int)(diskradius*10)%10;
ugexp[20][11]=ugexp[20][11]+48;
ugexp[20][12]=ugexp[20][12]+48;
ugexp[20][13]=ugexp[20][13]+48;
ugexp[20][15]=ugexp[20][15]+48;
flag[20]=1;
printf("%s\n",ugexp[20]);
//p71=-20.00;
ugexp[22][5]=(int)(-p71)/10;
ugexp[22][6]=(int)(-p71)%10;
ugexp[22][8]=(int)(-p71*10)%10;
ugexp[22][9]=(int)(-p71*100)%10;
ugexp[22][5]=ugexp[22][5]+48;
ugexp[22][6]=ugexp[22][6]+48;
ugexp[22][8]=ugexp[22][8]+48;
ugexp[22][9]=ugexp[22][9]+48;
flag[22]=1;
printf("%s\n",ugexp[22]);
//p72=20.50;
ugexp[23][4]=(int)p72/10;
ugexp[23][5]=(int)p72%10;
ugexp[23][7]=(int)(p72*10)%10;
ugexp[23][8]=(int)(p72*100)%10;
ugexp[23][4]=ugexp[23][4]+48;
ugexp[23][5]=ugexp[23][5]+48;
ugexp[23][7]=ugexp[23][7]+48;
ugexp[23][8]=ugexp[23][8]+48;
flag[23]=1;
printf("%s\n",ugexp[23]);
//tenontoparc=2.16;
ugexp[25][12]=(int)tenontoparc;
ugexp[25][14]=int(tenontoparc*10)%10;
ugexp[25][15]=(int)(tenontoparc*100)%10;
ugexp[25][12]=ugexp[25][12]+48;
ugexp[25][14]=ugexp[25][14]+48;
ugexp[25][15]=ugexp[25][15]+48;
flag[25]=1;
printf("%s\n",ugexp[25]);
//grvtoptooththickness=3.75;
ugexp[26][21]=(int)grvtoptooththickness;
ugexp[26][23]=int(grvtoptooththickness*10)%10;
ugexp[26][24]=(int)(grvtoptooththickness*100)%10;
ugexp[26][21]=ugexp[26][21]+48;
ugexp[26][23]=ugexp[26][23]+48;
ugexp[26][24]=ugexp[26][24]+48;
flag[26]=1;
printf("%s\n",ugexp[26]);
//shoulderwidth=7.5;
ugexp[30][14]=(int)shoulderwidth;
ugexp[30][16]=int(shoulderwidth*10)%10;
ugexp[30][14]=ugexp[30][14]+48;
ugexp[30][16]=ugexp[30][16]+48;
flag[30]=1;
printf("%s\n",ugexp[30]);
//grvtooththickness1=2.50;
ugexp[31][19]=(int)grvtooththickness1;
ugexp[31][21]=int(grvtooththickness1*10)%10;
ugexp[31][22]=(int)(grvtooththickness1*100)%10;
ugexp[31][19]=ugexp[31][19]+48;
ugexp[31][21]=ugexp[31][21]+48;
ugexp[31][22]=ugexp[31][22]+48;
flag[31]=1;
printf("%s\n",ugexp[31]);
//rootwidth=5.3;
ugexp[33][10]=(int)rootwidth;
ugexp[33][12]=int(rootwidth*10)%10;
ugexp[33][10]=ugexp[33][10]+48;
ugexp[33][12]=ugexp[33][12]+48;
flag[33]=1;
printf("%s\n",ugexp[33]);
//p74=-20.50;
ugexp[34][5]=(int)(-p74)/10;
ugexp[34][6]=(int)(-p74)%10;
ugexp[34][8]=(int)(-p74*10)%10;
ugexp[34][9]=(int)(-p74*100)%10;
ugexp[34][5]=ugexp[34][5]+48;
ugexp[34][6]=ugexp[34][6]+48;
ugexp[34][8]=ugexp[34][8]+48;
ugexp[34][9]=ugexp[34][9]+48;
flag[34]=1;
printf("%s\n",ugexp[34]);
//downarc=1.400;
ugexp[35][8]=(int)downarc;
ugexp[35][10]=int(downarc*10)%10;
ugexp[35][11]=int(downarc*100)%10;
ugexp[35][12]=int(downarc*1000)%10;
ugexp[35][8]=ugexp[35][8]+48;
ugexp[35][10]=ugexp[35][10]+48;
ugexp[35][11]=ugexp[35][11]+48;
ugexp[35][12]=ugexp[35][12]+48;
flag[35]=1;
printf("%s\n",ugexp[35]);
// 更新模型
if( NULL_TAG != (part = UF_ASSEM_ask_work_part()))
{
FILE *out;
char out_exp_name[133]="exps_newmodel_3.dat";
out=fopen(out_exp_name,"w");
UF_CALL(UF_MODL_ask_exps_of_part(part, &num_exps, &oexps));
printf ("\nTotal number of expressions in part = %d\n", num_exps);
fprintf(out,"模型更新前后信息:\n");
fprintf (out,"拉削角=%-5.0f\n",seta);
fprintf (out,"Total number of expressions in part = %d\n", num_exps);
for (i=0; i<num_exps; i++)
{
UF_CALL(UF_MODL_ask_exp_tag_string(oexps[i], &string));
printf("\nExpression #%d: %s\n",i, string);
fprintf(out,"\nExpression #%d: %s\n",i, string);
if(flag[i])
{
string = ugexp[i];
UF_MODL_edit_exp(string);
}
printf("\nNew Expression #%d: %s\n",i, string);
fprintf(out,"\nNew Expression #%d: %s\n",i, string);
}
fclose(out);
if(num_exps > 0)
{
UF_free(oexps);
}
UF_MODL_update();
UF_PART_save_as(newpart_name);
//transmit prt to parasolid
tag_t part_tag;
//tag_p_t tags;
tag_t tag[10000];
tag_t solid;
int tag_num=0;
int type;
char newmodel_name[133]="d:\\newmodel.x_t";
int version = 80;
UF_PS_link_f_p_t link_fnc = NULL;
int *n_unexported = NULL;
UF_PS_unexported_t **unexported_tags = NULL;
if(NULL_TAG != UF_PART_open(newpart_name,&part_tag,&error_status))
{
//part_tag=UF_PART_ask_part_tag(newpart_name);
type=UF_solid_type;
solid = NULL_TAG;
/*printf("\nThe newmodel.prt has been opened!\nPress any key to continue!");
getchar();*/
if( NULL_TAG != (part_tag = UF_ASSEM_ask_work_part()))
{
/*printf("\nOBJ_CYCLE START!\nPress any key to continue!");
getchar();*/
UF_OBJ_cycle_objs_in_part(part_tag,type,&solid);
while(solid!=NULL_TAG)
{
tag[tag_num]=solid;
tag_num++;
UF_OBJ_cycle_objs_in_part(part_tag,type,&solid);
}
/*printf("\nOBJ_CYCLE FINISHED!\nPress any key to continue!");
getchar();*/
printf("\ntag_num=%d\n",tag_num);
//search for the tag of the root and groove
/*for(i=0;i<tag_num;i++)
{
tag[0]=tag[i];
UF_PS_export_linked_data(tag,1,newmodel_name,version,link_fnc,n_unexported,unexported_tags);
printf("\ntag0=%d tagi=%d\n i=%d",tag[0],tag[i],i);
printf("\nPress any key to continue");
getchar();
}*/
//Search result : tag[0] is the tag of root, and tag[171] is the tag of groove
//export the root and groove (parasolid format)
tag[1]=tag[171];
UF_PS_export_linked_data(tag,2,newmodel_name,version,link_fnc,n_unexported,unexported_tags);
//printf("\nNewmodel.x_t has been exported!\nPress any key to continue!");
//getchar();
}
}
/* Terminate the API environment */
errorCode = UF_terminate();
/* printf("\nPress any key to continue");
getchar();*/
}
}
else
{
printf("拉削角输入有误,请检查!");
printf("\nPress any key to continue");
getchar();
}
}
}
/* Print out any error messages */
PrintErrorMessage( errorCode );
}
/* PrintErrorMessage
**
** Prints error messages to standard error. */
static void PrintErrorMessage( int errorCode )
{
if ( 0 != errorCode )
{
/* Retrieve the associated error message */
char message[133];
UF_get_fail_message( errorCode, message );
/* Print out the message */
// Construct a buffer to hold the text.
ostrstream error_message;
// Initialize the buffer with the required text.
error_message << endl
<< "Error:" << endl
<< message
<< endl << endl << ends;
// Write the message to standard error
cerr << error_message.str();
}
}
编译时出现这些错误....
--------------------Configuration: ugsam - Win32 Debug--------------------
Compiling...
ugsam.cpp
f:\program files\microsoft visual studio\vc98\include\errno.h(29) : warning C4518: 'extern ' : storage-class or type specifier(s) unexpected here; ignored
f:\program files\microsoft visual studio\vc98\include\errno.h(29) : error C2143: syntax error : missing ';' before 'string'
f:\program files\microsoft visual studio\vc98\include\errno.h(29) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.
ugsam.obj - 1 error(s), 0 warning(s)