iCAx开思工具箱

标题: 【求助】各位高手,请指点! [打印本页]

作者: wflying    时间: 2004-6-26 09:58
标题: 【求助】各位高手,请指点!
我在UISTYLER对话框的一个按钮中调用下边的这个子函数,但是运行了下边的这个函数的相应功能后,随后在这个子函数下边的任何语句就不在执行了,真的好奇怪,下面是我的在按钮中要调用的子函数,我怀疑是这个子函数的问题,请各位高手指点!
  
static void get_intersect(tag_t curve, tag_t face, double tol)
{
  int  type;
  UF_CALL(UF_MODL_intersect_objects(curve,face,tol,[$num_intersects,&intersect_data))]
  
  printf("\n Number of intersections = %d\n", num_intersects);
  
  for(i = 0; i < num_intersects; i++)
  {
    type = (intersect_data)->intersect_type;
    switch(type)
    {
      case UF_MODL_INTERSECT_POINT:
  
        printf("\nx,y,z coordinates are: (%f, %f, %f)\n",
               (intersect_data)->intersect.point.coords[0],
               (intersect_data)->intersect.point.coords[1],
               (intersect_data)->intersect.point.coords[2]);
  
        printf("Object 1 UV parameters are: (%f, %f)\n",
               (intersect_data)->intersect.point.object_1_u_parm,
               (intersect_data)->intersect.point.object_1_v_parm);
  
        printf("Object 2 UV parameters are: (%f, %f)\n",
               (intersect_data)->intersect.point.object_2_u_parm,
               (intersect_data)->intersect.point.object_2_v_parm);
  
        break;
   
       case UF_MODL_INTERSECT_COINCIDE:
  
        printf("\nCoincident curve tag is: %d\n",
               intersect_data->intersect.coincide.identifier);
  
        printf("Object 1 UV parameters are: (%f, %f)\n",
               intersect_data->intersect.coincide.object_1_first_parm,
               intersect_data->intersect.coincide.object_1_second_parm);
  
        printf("Object 2 UV parameters are: (%f, %f)\n",
               intersect_data->intersect.coincide.object_2_first_parm,
               intersect_data->intersect.coincide.object_2_second_parm);
        break;
        case UF_MODL_INTERSECT_CURVE:
    UF_CALL(UF_MODL_create_list([$loop_list))]
       for(i=0;i<num_intersects;i++)
     {
       UF_CALL(UF_MODL_put_list_item(loop_list, intersect_data->intersect.curve.identifier));
     }
  
       UF_CALL(UF_MODL_create_extruded(loop_list, taper_angle, limit1,
                          ref_pt, direction, create, [$features))]
       
     UF_CALL(UF_MODL_create_extruded(loop_list, taper_angle, limit1,
                          ref_pt, direction2, create, [$features2))]
  
        break;
  
        default:
  
        printf("\nSomething went wrong, we shouldn't be here!");
        break;
    
    }
  
    /* Free each element of the array. */
      UF_free(intersect_data);
  }
  
  if(num_intersects != 0)
  {
    /* Free the array. */
    UF_free(intersect_data);
  }
}
作者: zzz    时间: 2004-6-26 14:12
那就是这个函数出问题了呗。
使用UF_CALL的调用方法太老了,在新版本中会出错的,建议改成其它方法。
作者: 深夜摔键盘    时间: 2004-6-26 14:51
我改写了一个。
#include <uf_ui.h>  
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static void report( char *file, int line, char *call, int irc)
{
    if (irc)
    {
        char    funcInfo[133];
        char    ErrorMessg[133];
        char    OutMessage[133];
        sprintf(funcInfo,"%s\n代码行:[$ordm]%d\n%s\n",file,line,call);
        uc1601(funcInfo,1);
        UF_get_fail_message(irc, ErrorMessg);
        sprintf(OutMessage,"ErrCode:%d\nErrorInfo:%s",irc,ErrorMessg);
        uc1601(OutMessage,1);
     }
}
作者: wflying    时间: 2004-6-26 15:44
应该不是UF_CALL的原因,我做的其他的程序都是可以的呀!现在问题基本上解决,我把UF_free(intersect_data) 删除就OK了,不知道是怎么回事,反正是能用就行了!谢谢大家!
作者: 深夜摔键盘    时间: 2004-6-26 17:55
很可能是你释放内存有问题。对于数组,只能一次全部释放,不能一个单元一个单元的释放。在C/C++中内存释放都是这么搞的,UG是C/C ++开发的,也不例外吧。
作者: wflying    时间: 2004-6-26 20:22
我估计也是这个问题!




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