找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 19962|回复: 26
打印 上一主题 下一主题

初次做的UG二次开发,请各位大哥指导

[复制链接]
跳转到指定楼层
1
发表于 2005-7-7 22:14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
      我开始接触UG二次开发有好天了。因为要做个项目,加上自己有编程的基础,所以导师叫我去做个二次开发的课题。 我虽然有程序设计的基础,但是UG 和VC之间的接口还有点搞不明白。我有几个问题想向各位大哥请教,如果能得到深夜摔键盘兄的指导,那就更好了。
       我的问题是这样的:老师叫我开发个小程序,利用参数输入,生成模型
于是我做了个垫片参数建模的小程序。在UG下做了如下的对话框:
      
内径:
外径:
厚度:
创建(按钮)
  
在输入如上参数的基础上点击创建按钮,就能生成垫圈了。我的程序如下:
首先预设置参数值。找到  construct_cb(创建函数),然后加入如下代码:
  
int CY_construct_cb ( int dialog_id,
              void * client_data,
              UF_STYLER_item_value_type_p_t callback_data)
{
      UF_STYLER_item_value_type_t data;
   /* Make sure User Function is available. */   
      if ( UF_initialize() != 0)  
           return ( UF_UI_CB_CONTINUE_DIALOG );
  
      /* ---- Enter your callback code here ----- */
   // UF_STYLER_item_value_type_t data;
     data.item_attr=UF_STYLER_VALUE;
    data.item_id=CY_RMIN;
    data.value.real=2;
    UF_STYLER_set_value(dialog_id,[$data)]
  
    data.item_id=CY_RMAX;
    data.value.real=3;
    UF_STYLER_set_value(dialog_id,[$data)]
  
    data.item_id=CY_HE;
    data.value.real=4;
   UF_STYLER_set_value(dialog_id,[$data)]
   
  
      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.*/
  
}
  
上部分的程序是给对话框预设置值的,运行上叙程序后,我预想对话框的值如下:
  
内径:2
外径:3
厚度:4
  
在创建按钮的回调函数中输入如下代码:
  
int CY_creat_cb ( int dialog_id,
              void * client_data,
              UF_STYLER_item_value_type_p_t callback_data)
{
      
  
    UF_STYLER_item_value_type_t data;
    double rx,rd,he;                    //  为什么这个定义一定要放  tag_t cy1_tag, cy2_tag;
    int ret;                            //  前面呢
    tag_t cy1_tag, cy2_tag;
    double origin[3]={0,0,0};
    double d[3]={0,0,1};
      char dmin[256],dmax[256],hig[256];
    dmin[0]='\0';
    dmax[0]='\0';
    hig[0]='\0';
    //double rx,rd,he;
   
     /* Make sure User Function is available. */   
      if ( UF_initialize() != 0)  
           return ( UF_UI_CB_CONTINUE_DIALOG );
  
      /* ---- Enter your callback code here ----- */
   data.item_attr=UF_STYLER_VALUE;
    data.item_id=CY_RMIN;
    UF_STYLER_ask_value(dialog_id,[$data)]
    rx=data.value.real;
      
    data.item_id=CY_RMAX;
    UF_STYLER_ask_value(dialog_id,[$data)]
    rd=data.value.real;
     
    data.item_id=CY_HE;
    UF_STYLER_ask_value(dialog_id,[$data)]
    he=data.value.real;
  
    sprintf(dmin,"%f",rx);
    sprintf(dmax,"%f",rd);
    sprintf(hig,"%f",he);
  
    ret=UF_MODL_create_cyl1(UF_NULLSIGN,origin,hig,dmax,d,[$cy1_tag)]
    ret=UF_MODL_create_cyl1(UF_NEGATIVE,origin,hig,dmin,d,[$cy2_tag)]
  
      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 );               */
  
}
  
程序的运行:输入参数,点击创建,然后生成垫圈:
上面的程序通过编译与连接,生成了DLL。但是我在UG中调用对话框却出现了这样的问题,都是要点击两次,才会出现对话框。此时,对话框参数的预设置值并不是我在程序中设置的,而全部是零。我的程序是没问题的啊,这是怎么回事??是不是我的UG出什么问题了啊?? 还有我输入参数后点击创建,并没有生成我要的垫圈(我是在建模模块下进行的)。这又是怎么回事啊?请各位大哥指教,小弟感激不尽!!
  
这是一个学UG开发的好例子,短小精悍,五脏俱全。--zzz
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-7-7 22:39:20 | 只看该作者
太专业了
还是给你
3
发表于 2005-7-7 22:44:42 | 只看该作者
    只不过是个小小的入门的程序啊。它虽小,但却体现了二次开发的一个重要思想:参数化设计。
4
发表于 2005-7-8 07:38:49 | 只看该作者
    我今天早上的发现: 当我从菜单加载对话框,不能实现功能之后,我今天早上试着从 :file->Execute UG/Open->user funtion . 然后打开我编译生成的DLL。你猜怎么着? 嘿嘿,成功加载对话框,并且能够实现垫圈的创建。这又怎样解释啊? 是不是我的菜单设置有问题啊????
  
   
5
发表于 2005-7-8 08:11:31 | 只看该作者
应该是菜单的问题。你从菜单调用的对话框中的各参数都是0,很可能是你的dlg和你的dll没有挂上。
6
发表于 2005-7-8 08:20:39 | 只看该作者
   问题的解决:顺着这个思路,我在刷牙的时候,突然想:是不是对话框和DLL重名,结果一看,果然是这个问题。我在论坛上也看到了,在.men文件中一定要使用DLL的名字,我也是这样做的。但错就错在我把对话框和DLL取成同一名字了,当时只是想方便。结果出现了这样的问题,我想也许我的这个问题能对象我这样的初学者提供点帮助吧。
7
发表于 2005-7-8 09:50:26 | 只看该作者
对话框和DLL重名不是实质性的原因,你得再仔细分析一下。
8
发表于 2005-7-8 12:11:46 | 只看该作者
   好象论坛上也有此类的帖子,是关于在菜单脚本中使用对话框名与DLL名的区别,对吗??
9
发表于 2005-7-8 22:34:17 | 只看该作者
太麻烦了,生成一个垫圈要写这么多.....晕倒..这样写程序键盘也要敲坏了
用GRIP写吧,10几行就搞定你要的程序!
看来C++真麻烦...
这个程序就可以生成你想要的
ENTITY/C1,C2,C3
DATA/DMAX,4,DMIN,2,H,1
GPOS/'PLS SELECT A POINT...',XC,YC,ZC,RSP
JUMP/TRM:,TRM:,,,,RSP
PARAM/'PLS ENTER PARAMS...','外径',DMAX,'内径',DMIN,'高度',H,RSP
JUMP/TRM:,TRM:,,,,RSP
C1=SOLCYL/ORIGIN,XC,YC,ZC,HEIGHT,H,DIAMTR,DMAX
C2=SOLCYL/ORIGIN,XC,YC,ZC,HEIGHT,H,DIAMTR,DMIN
C3=SUBTRA/C1,WITH,C2
TRM:
HALT
10
发表于 2005-7-8 22:51:16 | 只看该作者
把它COPY下来用GRIP编译连接就可以用了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-26 03:58 , Processed in 0.032216 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表