iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24941|回复: 5
打印 上一主题 下一主题

【求助】 如何实现螺纹

[复制链接]
跳转到指定楼层
楼主
发表于 2004-5-24 09:49:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在一个圆柱体的两端生成螺纹程序如下:
//建左端螺纹
  tag_t face, s_face, c_face ,feature_eid;
      double point[3], dir[3], box[6], radius, rad;
   int i, num, type, sen;
    UF_MODL_symb_thread_data_t thread;
   // Get cylinder feature faces
  UF_MODL_ask_feat_faces(d1_id,[$list)]
UF_MODL_ask_list_count(list,[$num)]
   for (i=0;i<num;i++)
   {
     UF_CALL(UF_MODL_ask_list_item(list,i,[$face))]
  
     UF_CALL(UF_MODL_ask_face_data(face,&type,point,dir,box,
                                 [$radius,&rad,&sen))]
     if (type == 22) /* Planar face */
    s_face = face;
     if (type == 16) /* Cylindrical face */
      c_face = face;
   }
   UF_MODL_delete_list([$list)]
/*
   Create symbolic thread
*/
   thread.cyl_face = c_face;
   thread.start_face = s_face;
   thread.axis_direction[0]=0;
   thread.axis_direction[1]=0;
   thread.axis_direction[2]=1;
   thread.include_instances = UF_MODL_INCL_INSTANCES;
   thread.rotation=UF_MODL_RIGHT_HAND;
   thread.length_flag=UF_MODL_FIXED_LENGTH;
   thread.tapered = UF_MODL_NON_TAPERED;
   thread.num_starts = 1;
   thread.length="20";
   thread.form = "Metric";
   thread.method = "CUT";
   thread.callout = "M20_X_1";
   thread.major_dia = "20";
   thread.minor_dia = "18.981";
   thread.tapped_dia = "19.794";
   thread.pitch = "1";
   thread.angle = "60";
   UF_CALL(UF_MODL_create_symb_thread([$thread, &feature_eid))]
  if(!UF_CALL(UF_MODL_ask_symb_thread_parms(feature_eid, &thread)))
   {
//  Print data
     printf("Cylindrical face tag = %d\n", thread.cyl_face);
     printf("Start face tag = %d\n", thread.start_face);
     printf("Thread axis direction = (%f,%f,%f)\n",
       thread.axis_direction[0],thread.axis_direction[1],
       thread.axis_direction[2]);
     printf("Number of starts = %d\n", thread.num_starts);
     if (thread.include_instances == UF_MODL_INCL_INSTANCES)
       printf("Include instances = Yes\n");
     else
       printf("Include instances = No\n");
     if (thread.rotation == UF_MODL_RIGHT_HAND)
       printf("Rotation = Right_hand\n");
     else
       printf("Rotation = Left_hand\n");
     if (thread.length_flag == UF_MODL_FIXED_LENGTH)
       printf("Thread length flag = Fixed length\n");
     else
       printf("Thread length flag = Full thread\n");
     if (thread.tapered == UF_MODL_TAPERED)
       printf("Thread tapered = Yes\n");
     else
       printf("Thread tapered = No\n");
     printf("Length expression %s\n", thread.length);
     printf("Form = %s\n", thread.form);
     printf("Callout = %s\n", thread.callout);
     printf("Method = %s\n", thread.method);
     printf("Major diameter expression %s\n", thread.major_dia);
     printf("Minor diameter expression %s\n", thread.minor_dia);
     printf("Tapped diameter expression %s\n", thread.tapped_dia);
     printf("itch expression %s\n", thread.pitch);
     printf("Angle expression %s\n", thread.angle);
   }
  UF_free(thread.length);
   UF_free(thread.form);
   UF_free(thread.method);
   UF_free(thread.callout);
   UF_free(thread.major_dia);
   UF_free(thread.minor_dia);
   UF_free(thread.tapped_dia);
   UF_free(thread.pitch);
   UF_free(thread.angle);
}
可以实现
可是同样的在右端
//建右端螺纹  
tag_t face1, s_face1, c_face1 ,feature_eid1;
  uf_list_p_t list1;
   double point1[3], dir1[3], box1[6], radius1, rad1;
   int i1, num1, type1, sen1;
   
   UF_MODL_symb_thread_data_t thread1;
    // Get cylinder feature faces
  
UF_MODL_ask_feat_faces(dd_id,[$list1)]
  UF_MODL_ask_list_count(list1,[$num1)]
   for (i1=0;i1<num1;i1++)
   {
     UF_CALL(UF_MODL_ask_list_item(list1,i1,[$face1))]
  
     UF_CALL(UF_MODL_ask_face_data(face1,&type1,point1,dir1,box1,
                                 [$radius1,&rad1,&sen1))]
     if (type1 == 22) /* Planar face */
   s_face1 = face1;
    if (type1 == 16) /* Cylindrical face */
   c_face1 = face1;
  }
   UF_MODL_delete_list([$list1)]*/
  
/*  Create symbolic thread*/
  
thread1.cyl_face = c_face1;
   thread1.start_face = s_face1;
   thread1.axis_direction[0]=0;
   thread1.axis_direction[1]=0;
   thread1.axis_direction[2]=-1;
   thread1.include_instances = UF_MODL_INCL_INSTANCES;
   thread1.rotation=UF_MODL_RIGHT_HAND;
   thread1.length_flag=UF_MODL_FIXED_LENGTH;
   thread1.tapered = UF_MODL_NON_TAPERED;
   thread1.num_starts = 1;
   thread1.length="20";
   thread1.form = "Metric";
   thread1.method = "CUT";
   thread1.callout = "M20_X_1";
   thread1.major_dia = "20";
   thread1.minor_dia = "18.981";
   thread1.tapped_dia = "19.794";
   thread1.pitch = "1";
   thread1.angle = "60";
   UF_CALL(UF_MODL_create_symb_thread([$thread1, &feature_eid1))]*/
  // Retrieve datahao le ,hao
  if(!UF_CALL(UF_MODL_ask_symb_thread_parms(feature_eid1, &thread1)))
   {
//  Print data
     printf("Cylindrical face tag = %d\n", thread1.cyl_face);
     printf("Start face tag = %d\n", thread1.start_face);
     printf("Thread axis direction = (%f,%f,%f)\n",
       thread1.axis_direction[0],thread1.axis_direction[1],
       thread1.axis_direction[2]);
     printf("Number of starts = %d\n", thread1.num_starts);
     if (thread1.include_instances == UF_MODL_INCL_INSTANCES)
       printf("Include instances = Yes\n");
     else
       printf("Include instances = No\n");
     if (thread1.rotation == UF_MODL_RIGHT_HAND)
       printf("Rotation = Right_hand\n");
     else
       printf("Rotation = Left_hand\n");
     if (thread1.length_flag == UF_MODL_FIXED_LENGTH)
       printf("Thread length flag = Fixed length\n");
     else
       printf("Thread length flag = Full thread\n");
     if (thread1.tapered == UF_MODL_TAPERED)
       printf("Thread tapered = Yes\n");
     else
       printf("Thread tapered = No\n");
     printf("Length expression %s\n", thread1.length);
     printf("Form = %s\n", thread1.form);
     printf("Callout = %s\n", thread1.callout);
     printf("Method = %s\n", thread1.method);
     printf("Major diameter expression %s\n", thread1.major_dia);
     printf("Minor diameter expression %s\n", thread1.minor_dia);
     printf("Tapped diameter expression %s\n", thread1.tapped_dia);
     printf("itch expression %s\n", thread1.pitch);
     printf("Angle expression %s\n", thread1.angle);
   }
   UF_free(thread1.length);
   UF_free(thread1.form);
   UF_free(thread1.method);
   UF_free(thread1.callout);
   UF_free(thread1.major_dia);
   UF_free(thread1.minor_dia);
   UF_free(thread1.tapped_dia);
   UF_free(thread1.pitch);
   UF_free(thread1.angle);
}
却实现不了
两端的程序是一样的!只是改了个变量而已!为什么不行呢?
请版主和各位高手指教!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
沙发
发表于 2004-5-24 12:18:24 | 只看该作者

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

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

x
板凳
 楼主| 发表于 2004-5-24 15:29:41 | 只看该作者

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

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

x
地板
发表于 2004-5-24 17:18:08 | 只看该作者

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

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

x
5
 楼主| 发表于 2004-5-24 19:35:22 | 只看该作者

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

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

x
6
发表于 2008-2-26 13:12:22 | 只看该作者

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

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

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

本版积分规则

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

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

GMT+8, 2024-11-28 08:54 , Processed in 0.026881 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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