iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24683|回复: 6
打印 上一主题 下一主题

【讨论】贴一下小弟正在写的OPEN api源程序

[复制链接]
跳转到指定楼层
楼主
发表于 2004-8-23 06:46:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

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, 好大的数。。。请问各位有什么办法吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
沙发
 楼主| 发表于 2004-8-23 06:56:55 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
板凳
发表于 2004-8-23 08:18:17 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
地板
发表于 2004-8-23 20:17:14 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
5
发表于 2004-8-27 20:04:21 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
6
发表于 2004-8-31 22:39:27 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
7
 楼主| 发表于 2004-9-2 07:17:48 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-11-15 20:57 , Processed in 0.017377 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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