iCAx开思工具箱

标题: ug下拉伸求助? [打印本页]

作者: 小米粒儿    时间: 2006-10-29 19:27
标题: ug下拉伸求助?
我要实现下图所示的功能,将曲线拉伸到院柱的内表面,是不是应该遍历那个POCKET的各个面,得到它的圆柱面即可啊,可是为什么实现不了了,线已经可以画出来了,可是却没有办法拉伸我用的是函数(UF_MODL_create_extrusion(generator, 4, &extrusion_trim_object,extrusion_taper_angle,extrusion_limits,extrusion_offsets,extrusion_pt1, false, true,extrusion_dir,extrusion_mode_sign,&extrusion_objects,&extrusion_obj_cnt)
我的参数设置如下:
UF_MODL_SWEEP_TRIM_object_t extrusion_trim_object;
char *extrusion_limits[2]={ "0", "0" };
char *extrusion_offsets[2]={ "0", "0" };
char extrusion_taper_angle[12];
double extrusion_pt1[3];
double extrusion_dir[3];
UF_FEATURE_SIGN extrusion_mode_sign = UF_POSITIVE;
tag_t *extrusion_objects;
int extrusion_obj_cnt;
tag_t extrusion_tag[1];
tag_t generator[4];

generator[0]=line1_tag;
generator[1]=line2_tag;
generator[2]=line3_tag;
generator[3]=line4_tag;
UF_CALL(UF_MODL_ask_feat_faces(qiangti_tag[0],&qiangti_face_list));   
    UF_CALL(UF_MODL_ask_list_count(qiangti_face_list, &list_count));       
               for(i=0;i<list_count;i++)
         {
         UF_CALL(UF_MODL_ask_list_item(qiangti_face_list,i,&qiangti_face_tag));
                 UF_CALL(UF_MODL_ask_face_type(qiangti_face_tag,&face_type));
                   if (face_type==UF_MODL_CYLINDRICAL_FACE)                   
                           qiangti_oface_tag=qiangti_face_tag;
                   break;
                  
        }
UF_MODL_delete_list(&qiangti_face_list);
//创建拉身体
extrusion_pt1[0]=0.0;
extrusion_pt1[1]=0.0;
extrusion_pt1[2]=0.0;
extrusion_dir[0]=0.0;
extrusion_dir[1]=-1.0;
extrusion_dir[2]=0.0;
sprintf(extrusion_taper_angle,"%f",0.0);
extrusion_tag[0]=qiangti_oface_tag;
extrusion_trim_object.trim_objects=extrusion_tag;
extrusion_trim_object.trim_count=4;
extrusion_trim_object.sign=UF_MODL_SWEEP_TRIM_TO_FACE;
请高手帮我看看啊,滴水之恩会涌泉相报的,
作者: 小米粒儿    时间: 2006-10-29 19:48
图在这里
作者: 小米粒儿    时间: 2006-10-29 19:49
图2
作者: 小米粒儿    时间: 2006-10-29 19:51
高手帮帮我啊,不会狠心见死不救吧,希望尽快得到你们的答复哦
作者: Afang    时间: 2006-10-30 09:49
你只有一个trim_objects,为什么trim_count=4?
作者: 小米粒儿    时间: 2006-10-30 11:56
谢谢Afang,这个参数是我理解错了吧 ,我一直以为它是要拉伸的曲线的数量, 不过,把它改成1还是实现不了,是不是还有别的错误啊,麻烦你再帮我看看,好么?真的很感谢你的回答
作者: Afang    时间: 2006-10-30 15:14
看代码好像没什么问题,你加UF_CALL看看报什么错,或者先用UF_NULLSIGN,看看能不能拉伸出来

另外看你的图片,你的拉伸方向好像跟圆柱面的轴向是平行的,能拉伸到圆柱面么?
作者: 小米粒儿    时间: 2006-10-31 10:15
谢谢Afang,
我调试了一下,代码是630035,错误信息是"null tag not allowed"那个要拉伸到的面的tag好象是0,根本没有赋值,要得到那个面,遍历POCKET得不到么?我觉得应该是这里出错了,可是它应该怎么得到啊?
作者: 小米粒儿    时间: 2006-10-31 21:05
再问Afang,现在那个面可以得到了,不过,又有了新的错误"section curves are not connected each other",可由调试结果看到四个线的起始和终止点分别为4起点(-19,-20,50)终点(21,-20,50),1起点(-19,-20,85)终点(-19,-20,50),2起点(21,-20,85)终点(-19,-20,85),3起点(21,-20,50)终点(21,-20,85),这四根曲线明显是首尾相连,而且在交互环境下这四根曲线可以拉伸到院柱的内表面,没有问题,可在这里却实现不了,我要疯了,到底是什么原因阿,希望知道的前辈多多指教阿,
作者: Afang    时间: 2006-11-1 10:05
一般来说应该是你的线出的问题,把你做出来的PART发上来看看吧
作者: 小米粒儿    时间: 2006-11-1 10:25
//定义圆弧坐标系及相关东西
double matrix_values[9]={1,0,0,0,0,1,0,-1,0};
tag_t matrix_tag;
UF_CURVE_arc_t line4;
//定义直线
UF_CURVE_line_t line1,line2,line3;          
tag_t line1_tag,line2_tag,line3_tag,line4_tag;
tag_t generator[4];
          


//画半圆弧,圆心为(e,h4,b/2),半径为r,
  line4.start_angle = 180.0*DEGRA;
  line4.end_angle = 360.0 * DEGRA;
  line4.arc_center[0] =e;
  line4.arc_center[1] =h4;
  line4.arc_center[2] =b/2;
  line4.radius = r;  
  UF_CALL(UF_CSYS_create_matrix(matrix_values, &matrix_tag));
  line4.matrix_tag=matrix_tag;
  UF_CALL(UF_CURVE_create_arc(&line4,&line4_tag));
//画直线,起点为(r+e,-b/2,h4),终点为(r+e,-b/2,h4+r+15)  
    line1.start_point[0] =r+e;
    line1.start_point[1] =-b/2;
    line1.start_point[2] =h4;
    line1.end_point[0] =r+e;
    line1.end_point[1] =-b/2;
    line1.end_point[2] =h4+r+15;
    UF_CALL(UF_CURVE_create_line(&line1, &line1_tag));
//画直线,起点为(r+e,-b/2,h4+r+15),终点为(e-r,-b/2,h4+r+15)
    line2.start_point[0] =r+e;
    line2.start_point[1] =-b/2;
    line2.start_point[2] =h4+r+15;
    line2.end_point[0] =e-r;
    line2.end_point[1] =-b/2;
    line2.end_point[2] =h4+r+15;
        UF_CALL(UF_CURVE_create_line(&line2, &line2_tag));
//画直线,起点为(e-r,-b/2,h4+r+15),终点为(e-r,-b/2,h4)
    line3.start_point[0] =e-r;
    line3.start_point[1] =-b/2;
    line3.start_point[2] =h4+r+15;
    line3.end_point[0] =e-r;
    line3.end_point[1] =-b/2;
    line3.end_point[2] =h4;
    UF_CALL(UF_CURVE_create_line(&line3, &line3_tag));
        generator[0]=line1_tag;
    generator[1]=line2_tag;
        generator[2]=line3_tag;
        generator[3]=line4_tag;

其中e,h4,b,r那些变量都是从对话框控件中所获得的值,
作者: Afang    时间: 2006-11-1 10:38
。。我是说把你做到拉伸前的那个PART(包括你的POCKET和线)发上来看看,可能之前做出来的结果就已经有问题了
作者: 小米粒儿    时间: 2006-11-1 11:02
这个是全部的代码
作者: 小米粒儿    时间: 2006-11-1 11:07
我定义的UF_CALL宏好象不起作用,麻烦Afang也帮我看一下,怎么回事,不过这样子太麻烦你了,不知道你是哪里的,真的很感谢你,这么热心,
作者: Afang    时间: 2006-11-1 12:16
汗一个。。。你的对话框怎么初始值都是0啊,起码设个能直接做出来的值啊
作者: Afang    时间: 2006-11-1 12:16
汗一个。。。你的对话框怎么初始值都是0啊,起码设个能直接做出来的值啊
作者: Afang    时间: 2006-11-1 12:33
...好像看到哪里错了
        generator1[0]=line21_tag;
        generator1[1]=line22_tag;
        generator1[2]=line23_tag;
        generator1[4]=line24_tag;/这里应该是generate[3]吧
作者: 小米粒儿    时间: 2006-11-1 18:44
谢谢Afang ,我这个代码编的很烦琐,也不可以实现undo,现在就想赶紧把功能都实现了,有时间再慢慢完善的。不过应该还有别的错误吧,其实就第一个对话框缸径需输入(我一般都输100),第二个对话框各个控件参数都有提示的,按回车会显示提示,等我设了对话框初始值,再给你发一份也行,现在在寝室,电脑里没装那些东西,呵呵,辛苦了,我是哈尔滨的,你了?如果有幸在同一个城市的话,哪天请你吃饭啊,自己看自己编的破东西都觉得费劲,所以麻烦你一定要耐着性子看哦,
作者: 小米粒儿    时间: 2006-11-2 10:32
Afang这个是赋完初始值的代码,
作者: 小米粒儿    时间: 2006-11-2 11:16
还有单位一定要是公制,不然画出来的图会特别大
作者: Afang    时间: 2006-11-2 11:58
按照你的程序用来裁剪的面是那个黄色的面,当然没法裁剪了。。。。
不能拉伸的问题就是因为
        generator1[0]=line21_tag;
        generator1[1]=line22_tag;
        generator1[2]=line23_tag;
        generator1[4]=line24_tag;/这里应该是generate[3]吧
作者: 小米粒儿    时间: 2006-11-6 09:14
我想再问一下AFANG,为什么没有办法裁减啊,想要实现我想要的功能,是不是只能拉伸完了以后,再裁减啊。我遍历POCKET的时候,得到三个面:环面、圆柱面和平面,裁减面选环面不对么,
作者: Afang    时间: 2006-11-6 09:21
选圆柱面好像就可以了。。。
作者: 小米粒儿    时间: 2006-11-6 10:32
谢谢AFANG,终于可以显示出来了,好高兴啊,




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3