马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
经常来这里,但是很少发帖,open api对我来说不是很好学,我连C++学的都不好,唉。。。不过还是很喜欢自己探索,经常来这里看大家的帖子,帮助很大,我正在写一个简单的程序,就是让用户定义数据自动生成一个阶梯轴,然后可以操作实现放大,缩小,平移,质量查询等功能。都是些很简单的函数,不过有时候却让一个简单的C++循环搞糊涂老半天。。。唉,都怪当时没学好c阿。希望能和各位在open API道路上奋战的朋友们共同交流:msn vcreat@hotmail.com
这是原程序,还差得很远,正好有几个问题问问大家
#include <stdio.h>
#include <uf.h>
#include <uf_modl.h>
#include <uf_ui.h>
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report( char *file, int line, char *call, int irc)
{
if (irc)
{
char messg[133];
printf("%s, line %d: %s\n", file, line, call);
(UF_get_fail_message(irc, messg)) ?
printf(" returned a %d\n", irc) :
printf(" returned error %d: %s\n", irc, messg);
}
return(irc);
}
static void get_data(void)
{
/*char *cp1_choose_step="Choose step";
int ip2_choose_step=5;
char cp3_choose_step[3][38]={"3 Steps", "4 Steps", "5 Steps"};
int return_choose_step;
int ip4=3;
return_choose_step=uc1603(cp1_choose_step, ip2_choose_step, cp3_choose_step,ip4);*/
char *cp1_get_data="Input data, 0 for end";
char cp2[][16]={"Basic Radius", "Length 1", "Radius 2", "Length 2", "Radius 3", "Length 3", "Radius 4", "Length 4"};
int ip3=8;
double data[8];
int ip5[8]={50,50,100,50,400,50,80,50};
int ir6;
ir6=uc1609(cp1_get_data,cp2,ip3,data,ip5);
/*if (data[0]==0)
{int ip2=1;
char *cp1="Data input error";
char cp3[][38]={"back"};
int ip4=1;
int ir66;
ir66=uc1603(cp1, ip2, cp3, ip4);
if (ir6=1) get_data();
}*/
UF_CURVE_line_t sline[10];
UF_CURVE_line_t end_line;
tag_t line[10];
tag_t line_end;
sline[0].start_point[0]=0.0;
sline[0].start_point[1]=0.0;
sline[0].start_point[2]=0.0;
sline[0].end_point[0]=0.0;
sline[0].end_point[1]=data[0];
sline[0].end_point[2]=0.0;
UF_CURVE_create_line([$sline[0],&line[0])]
sline[1].start_point[0]=sline[0].end_point[0];
sline[1].start_point[1]=sline[0].end_point[1];
sline[1].start_point[2]=sline[0].end_point[2];
sline[1].end_point[0]=data[1];
sline[1].end_point[1]=data[0];
sline[1].end_point[2]=0.0;
UF_CURVE_create_line([$sline[1],&line[1])]
sline[2].start_point[0]=sline[1].end_point[0];
sline[2].start_point[1]=sline[1].end_point[1];
sline[2].start_point[2]=sline[1].end_point[2];
sline[2].end_point[0]=data[1];
sline[2].end_point[1]=data[2];
sline[2].end_point[2]=0.0;
UF_CURVE_create_line([$sline[2],&line[2])]
int line_number;
double sum_line;
for (line_number=3, sum_line=data[1]; line_number<8, data[line_number]!=0;line_number++)
{
sline[line_number].start_point[0]=sline[line_number-1].end_point[0];
sline[line_number].start_point[1]=sline[line_number-1].end_point[1];
sline[line_number].start_point[2]=sline[line_number-1].end_point[2];
if ((line_number%2)==0)
{
sline[line_number].end_point[0]=sum_line;
sline[line_number].end_point[1]=data[line_number];
}
else
{
sum_line=sum_line+data[line_number];
sline[line_number].end_point[0]=sum_line;
sline[line_number].end_point[1]=data[line_number-1];
}
sline[line_number].end_point[2]=0.0;
UF_CURVE_create_line([$sline[line_number],&line[line_number])]
};
end_line.start_point[0]=sline[line_number-1].end_point[0];
end_line.start_point[1]=sline[line_number-1].end_point[1];
end_line.start_point[2]=sline[line_number-1].end_point[2];
end_line.end_point[0]=sum_line;
end_line.end_point[1]=0.0;
end_line.end_point[2]=0.0;
UF_CURVE_create_line([$end_line,&line_end)]
}
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int paramLen)
{
if (!UF_CALL(UF_initialize()))
{
get_data();
UF_CALL(UF_terminate());
}
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}
程序还差得很远。。。呵呵,见笑。。
请问大家,我在获取用户输入阶梯轴半径长度等参数的时候用了uc1609,
他的标准用法是ir6=uc1609(cp1_get_data,cp2,ip3,data,ip5);ug文档上说ip5是一个已经不用的参数,但是清华的书上说ip5可以设为输入的预设值,我把预设值都设好了,但是在调试程序的时候用户输入的地方每个栏都初始显示为-9.546e16, 好大的数。。。请问各位有什么办法吗? |