iCAx开思工具箱

标题: 【原创】UG18的UF_ASSEM_ask_mc_data_of_compnt(...) [打印本页]

作者: septdragons    时间: 2003-8-6 17:00
标题: 【原创】UG18的UF_ASSEM_ask_mc_data_of_compnt(...)
我想用UG18.0中的UF_ASSEM_ask_mc_data_of_compnt(...)函数,导出组件的配合约束信息,在VC++6.0中用外部模式应用程序调用此函数时,编译时无错误,调试时出现“libufun.dll access violation" 错误,请问是什么原因?  
在UG的帮助文档中为什么也找不到此函数?  
  
=====以下是部分源程序==
     UF_ASSEM_ask_component_data(child_part_occs, part_name, refset_name,instance_name, origin, csys_matrix, transform);
    
     cout << "art Name is ";
     cout << part_name << endl;
     cout << "-------------instance_name is  ";
     cout << instance_name << endl;  
  
      logical * mated=NULL;
      UF_ASSEM_mating_condition_p_t  mc_data;
      int nResult=0;
     
      nResult=UF_ASSEM_ask_mc_data_of_compnt(child_part_occs,       mated, mc_data);       
              
       tag_t * mated_component=NULL;
      int * n_mated_components=NULL;
     
  nResult=UF_ASSEM_ask_comps_mated_to_me(child_part_occs, [$mated_component, n_mated_components)]
作者: zzz    时间: 2003-8-6 21:54
是不是要初始化?我记得有个初始化函数。
作者: septdragons    时间: 2003-8-7 09:13
非常感谢版主,但我当时已经初始化了,我想不是这个原因。下面是完整的main(...)函数
===============
extern void main( char argc, char *argv[] )
{
    /* Initialize the API environment */
    int errorCode = UF_initialize();
  
    if ( 0 == errorCode )
    {
           UF_PART_load_status_t  error_status;
  
           char  part_name1[133]    ="d:\\WorkDir\\UgWorks\\jaw\\Jaw_03assmembly.prt";
          tag_t part1;
          UF_PART_open(part_name1, [$part1, &error_status)]  
          //获得装配根 root_part_occ
       tag_t  root_part_occ=UF_ASSEM_ask_root_part_occ(part1);
       tag_t *child_part_occs; //数组
  
      char part_name[132+1];
      char refset_name[30+1];
     char instance_name[30+1];
  
     double origin[3];
     double csys_matrix[9];
     double transform[4][4];
  
    //查询装配根root_part_occ下面的子组件
  
     int partNum=UF_ASSEM_ask_part_occ_children(root_part_occ,  [$child_part_occs)]
  
   for(int i=0; i<partNum; i++)
   {
    //获得组件的属性数据
  
   UF_ASSEM_ask_component_data(child_part_occs, part_name, refset_name,instance_name, origin, csys_matrix, transform);
      
    cout << "art Name is ";
    cout << part_name << endl;
  
    cout << "-------------instance_name is  ";
    cout << instance_name << endl;  
  
    //重要的装配信息获取函数,  
    logical * mated=NULL;
    UF_ASSEM_mating_condition_p_t  mc_data;
    int nResult=0;
    
    nResult=UF_ASSEM_ask_mc_data_of_compnt(child_part_occs, mated, mc_data);
    nResult=UF_ASSEM_ask_comps_mated_to_me(child_part_occs, [$mated_component, n_mated_components)]
  
      //递归调用,遍历装配中组件
     CycleAllParts(child_part_occs);
      }
     
     UF_PART_close_all();
     errorCode = UF_terminate();
   }
  
    /* Print out any error messages */
   &nbsprintErrorMessage( errorCode );
}
作者: zzz    时间: 2003-8-7 16:39
问题在这,看其中的红色部分。
  
septdragons wrote:
非常感谢版主,但我当时已经初始化了,我想不是这个原因。下面是完整的main(...)函数  
  ===============  
  extern void main( char argc, char *argv[] )  
  {  
      /* Initialize the API environment */  
      int errorCode = UF_initialize();  
  
      if ( 0 == errorCode )  
      {  
             UF_PART_load_status_t  error_status;  
  
             char  part_name1[133]    ="d:\\WorkDir\\UgWorks\\jaw\\Jaw_03assmembly.prt";  
            tag_t part1;  
            UF_PART_open(part_name1, [$part1, &error_status)]   
            //获得装配根 root_part_occ  
         tag_t  root_part_occ=UF_ASSEM_ask_root_part_occ(part1);  
         tag_t *child_part_occs; //数组  
  
        char part_name[132+1];  
        char refset_name[30+1];  
       char instance_name[30+1];  
  
       double origin[3];  
       double csys_matrix[9];  
       double transform[4][4];  
  
      //查询装配根root_part_occ下面的子组件  
  
       int partNum=UF_ASSEM_ask_part_occ_children(root_part_occ,  [$child_part_occs)]  
      
     for(int i=0; i<partNum; i++)  
     {  
      //获得组件的属性数据  
  
     UF_ASSEM_ask_component_data(child_part_occs, part_name, refset_name,instance_name, origin, csys_matrix, transform);  
         
      cout << "art Name is ";  
      cout << part_name << endl;  
      
      cout << "-------------instance_name is  ";  
      cout << instance_name << endl;   
  
      //重要的装配信息获取函数,   
      logical * mated=NULL;  
      UF_ASSEM_mating_condition_p_t  mc_data; -> 该为:UF_ASSEM_mating_condition_t mc_data;
      int nResult=0;  
        
      nResult=UF_ASSEM_ask_mc_data_of_compnt(child_part_occs, mated, [$mc_data)]  
      nResult=UF_ASSEM_ask_comps_mated_to_me(child_part_occs, [$mated_component, n_mated_components)]  
  
        //递归调用,遍历装配中组件  
       CycleAllParts(child_part_occs);  
        }  
         
       UF_PART_close_all();  
       errorCode = UF_terminate();  
     }  
  
      /* Print out any error messages */  
      PrintErrorMessage( errorCode );  
  }

作者: septdragons    时间: 2003-8-8 09:34
感谢版主,问题已解决了。  
该函数的参数我传递错了。应为:
      logical mated=0;  
      UF_ASSEM_mating_condition_t  mc_data;
      int nResult=0;
      nResult=UF_ASSEM_ask_mc_data_of_compnt(child_part_occs,  [$mated, &mc_data)]




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