iCAx开思工具箱

标题: 【原创】动态调整特征参数的例子 [打印本页]

作者: mazhiguo    时间: 2003-7-15 10:39
标题: 【原创】动态调整特征参数的例子
      在参数化CAD系统的二次开发中,我们不可避免的需要图形随控件的值动态的变化,以增加可视化的效果。以下是一个用滑动条控件控制长方体特征其中一个参数的例子,虽然例子比较简单,但如果可以抛砖引玉,能够给各位一个小小的启发,已达到我所期望。下面是创建过程和部分源代码,请各位给予指导!
进入UG界面后,Application->User Interface Styler...进行对话框的设置。加入滑动条控件,并设置Drag一项的回调函数,进行对话框的回调函数设置!保存生成*.h,*.template.c和*.dlg三个文件。
将*.dlg放入相应的application目录下。利用VC建立工程,删除系统生成的文件,添加*.h,*.template.c两个文件,设置用户入口函数
//#ifdef DISPLAY_FROM_USER_EXIT
  extern void ufusr (char *param, int *retcode, int rlen)
然后在对话框的构造函数中生成立方体特征。
tag_t blk_obj;//全局变量
int DT_construction ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
     /* Make sure User Function is available. */  
    
     char *block_len[3]={"25","25","25"};   
   double block_orig[3]={0.0,0.0,0.0};
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
     /* ---- Enter your callback code here ----- */
     UF_MODL_create_block1(UF_NULLSIGN,block_orig,block_len,[$blk_obj)]
     UF_terminate ();
  
    /* Callback acknowledged, do not terminate dialog */
    return (UF_UI_CB_CONTINUE_DIALOG);  
    /* A return value of UF_UI_CB_EXIT_DIALOG will not be accepted    */
    /* for this callback type.  You must continue dialog construction.*/
  
}
在滑动条控件回调函数中进行动态更新
int DT_scale_real_valuechanged ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
     /* Make sure User Function is available. */  
  
/////////////////////////////////////////////////
    
////////////////////////////////////////////
//  double exp_value;
//  int number_of_exps=0,i;
//  tag_t *exps;
  double p0_value;
   char string[256];
  
  char length[256];
  UF_STYLER_item_value_type_t data;
  data.item_attr=UF_STYLER_VALUE;
  data.item_id=DT_SCALE_REAL_0;
  
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
     /* ---- Enter your callback code here ----- */
  
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
     /* ---- Enter your callback code here ----- */
  
    UF_STYLER_ask_value(dialog_id,[$data)]
  sprintf(length,"%f",data.value.real);
    p0_value=data.value.real;
  strcpy(string,"p0=");
    strcat(string,length);
  UF_MODL_edit_exp(string);
  UF_MODL_update();
  
     UF_terminate ();
  
    /* Callback acknowledged, do not terminate dialog */
    return (UF_UI_CB_CONTINUE_DIALOG);  
    
    /* or Callback acknowledged, terminate dialog.  */
    /* return ( UF_UI_CB_EXIT_DIALOG );             */
  
}
编译,连接生成*.dl文件。
进入UG界面,File—>Execute UG/OPEN—>User Function...调用*.dl文件即可!




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