iCAx开思工具箱

标题: UF_CSYS_create_matrix第一个参数传递无效?? [打印本页]

作者: sunmz_wjxy    时间: 2010-11-2 15:35
标题: UF_CSYS_create_matrix第一个参数传递无效??
base_face是为指定的一个面,下面的这个错误我怀疑是不是指定的这个面本身就有问题????
这个问题很急,希望高手帮忙!!


error = UF_MODL_ask_face_uv_minmax( base_face,uvs );   // 得到指定面的U和V
/*printf("Error from Asking uv minmax = %i\n",error);*/
      if ( error != 0 )
      {
        UF_OBJ_set_blank_status( steels[cnt],UF_OBJ_NOT_BLANKED );           /* Unblank the steel */
//UF_get_fail_message ( error,message );
        sprintf( box_message,"Error Asking UV Parameters for Steel %s - steel skipped",object_name );
        uc1601( box_message,1 );
        goto donewithsteel;
      }


      params[0] = ( uvs[0] + uvs[1] ) / 2;                    /* Set params to find face midpoint */
      params[1] = ( uvs[2] + uvs[3] ) / 2;


      error = UF_MODL_ask_face_props( base_face,params,face_point,         /* Get face properties */
                                      vec1,junk,junk,junk,vec3,junk );
//printf("Error from Asking face properties = %i\n",error);
printf("Face point = X%lf  Y%lf  Z%lf\n",face_point[0],face_point[1],face_point[2]);     // 值是:X242.970668  Y1387.556782  Z645.000000
printf("vec1 = I%lf  J%lf  K%lf\n",vec1[0],vec1[1],vec1[2]);    // 值是:  I573.576436   J819.152044  K0.000000
printf("vec3 = I%lf  J%lf  K%lf\n",vec3[0],vec3[1],vec3[2]);    // 值是:I0.000000  J0.000000  K-1.000000
      if ( error != 0 )
      {
        UF_OBJ_set_blank_status( steels[cnt],UF_OBJ_NOT_BLANKED );           /* Unblank the steel */
//UF_get_fail_message ( error,message );
        sprintf( box_message,"Error Asking Face Props for Steel %s - Steel Skipped",object_name );
        uc1601( box_message,1 );
        goto donewithsteel;
      }


      UF_VEC3_cross( vec3,vec1,vec2 );  // 看不懂这句话????如何计算的vec2 ??


      error = UF_VEC3_unitize( vec1,modl_tol,&magnitude,&matrix9[0] );   // 得到matrix9[0],matrix9[1],matrix9[2]的值
      if ( error != 0 )
      {
        UF_OBJ_set_blank_status( steels[cnt],UF_OBJ_NOT_BLANKED );           /* Unblank the steel */
//UF_get_fail_message ( error,message );
        sprintf( box_message,"Error Unitizing Vector 1 for Steel %s - Steel Skipped",object_name );
        uc1601( box_message,1 );
        goto donewithsteel;
      }


      error = UF_VEC3_unitize( vec2,modl_tol,&magnitude,&matrix9[3] );//得到matrix9[3],matrix9[4],matrix9[5]的值
      if ( error != 0 )
      {
        UF_OBJ_set_blank_status( steels[cnt],UF_OBJ_NOT_BLANKED );           /* Unblank the steel */
//UF_get_fail_message ( error,message );
        sprintf( box_message,"Error Unitizing Vector 2 for Steel %s - Steel Skipped",object_name );
        uc1601( box_message,1 );
        goto donewithsteel;
      }


      UF_VEC3_copy( vec3,&matrix9[6] );// 得到matrix9[6],matrix9[7],matrix9[8]的值
//
  matrix9[0] = 1;matrix9[1] = 0;matrix9[2] = 0;
//
  matrix9[3] = 0;matrix9[4] = 1;matrix9[5] = 0;
//
  matrix9[6] = 0;matrix9[7] = 0;matrix9[8] = 1;


printf("matrix9 = %lf  %lf  %lf\n",matrix9[0],matrix9[1],matrix9[2]);  // 0.573576    0.819152    0.000000
printf("matrix9 = %lf  %lf  %lf\n",matrix9[3],matrix9[4],matrix9[5]); //  0.819152    -0.573576   0.000000
printf("matrix9 = %lf  %lf  %lf\n",matrix9[6],matrix9[7],matrix9[8]); //  0.000000    0.000000    -1.000000


      error = UF_CSYS_create_matrix( matrix9,&mtx_tag );   //在这里出错,错误消息是:第一个参数传递无效?     /* Create matrix tag for new CSYS */
      if ( error != 0 )
      {
        UF_OBJ_set_blank_status( steels[cnt],UF_OBJ_NOT_BLANKED );           /* Unblank the steel */

UF_get_fail_message ( error,message );
        sprintf( box_message,"Error Creating CSYS Matrix for Steel %s - Steel Skipped",object_name );
        uc1601( box_message,1 );
        goto donewithsteel;
      }


      error = UF_CSYS_create_csys( face_point,mtx_tag,&csys_tag );             /* Create new CSYS */
      if ( error != 0 )
      {
        UF_OBJ_set_blank_status( steels[cnt],UF_OBJ_NOT_BLANKED );           /* Unblank the steel */
//UF_get_fail_message ( error,message );
        sprintf( box_message,"Error Creating CSYS for Steel %s - Steel Skipped",object_name );
        uc1601( box_message,1 );
        goto donewithsteel;
      }
作者: zjs    时间: 2010-11-2 22:35
Matrix values -- should be normalized and  orthogonal. Use UF_MTX3_initialize to
这个矩阵必需单位化,并且是正交矩阵
作者: sunmz_wjxy    时间: 2010-11-3 09:28
请问在上面这份代码的什么地方添加上UF_MTX3_initialize以实现矩陈的单位化???
能否帮我修改一下这个代码,我很急!!!!
作者: zjs    时间: 2010-11-3 11:28
将matrix9 改为:
1,0,0
0,1,0
0,0,1
试试,你就可以发现问题了。
工作还是需要自己动手。




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