iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 40052|回复: 28
打印 上一主题 下一主题

分享———UG自动装配的例子

[复制链接]
跳转到指定楼层
楼主
发表于 2005-11-18 18:59:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

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

x
一个自动装配的例子

首先声明,我是一个UG二次开发新手。大概两年前做过一个简单的二次开发例子,算是入门。这个程序是实验室一个课题的一部分,看到这里对装配二次开发的呼声很热烈,就把这个程序发上来了。主要阅读对象是像我一样的新手,大虾见了莫笑。当然也欢迎在这方面的有识之士共同探讨。

思        路:从XML文件里读出装配信息(装配树及装配约束),在UG里面实现自动装配
关键技术:MS XMLDOM ,UG OPEN API
架        构:MFC DLL (Regular Dll,MFC静态链接。这种方式在没装VC的情况下可以运行,就是生成的Dll文件大些)
运行方式:Internal

设置:
如果仅运行
        新建文件夹(包含路径)E:\UG\application\
        拷贝压缩包里面 \Files下所有文件至上面的目录(不包含File目录)
        打开UG,选择目录下的AutoASM.dll运行(快捷键 Ctrl+U)
调试
        设置VC二次开发环境,不说了吧。
        在菜单Project Settings下Link标签下的Ouput file name:改为E:\UG\application\AutoASM.dll(项目里已经更改,特此说明,所以请找不到输出文件的不要怪我哦)

运行界面


类说明:
CAsmXMLCtrl()
主要功能实现类,完成XML解析,读取节点数据,加载零件,添加约束
CXMLFile
解析XML的主要代码,经过处理,只用到里面的一个函数,不想了解这方面的可以完全置之不理。
MyAsmDlg
对话框类,调用CAsmXMLCtrl中的函数实现各种功能

主要函数:
bool CAsmXMLCtrl:oad(const char* filename, const char* tree_name, bool bImage)
入口函数,打开XML文件,新建一个装配文件,做一些初始化工作,然后调用下面的函数

void CAsmXMLCtrl::GetAllAssems(MSXML2::IXMLDOMNodePtr& pNode,tag_t part)
解析XML文件,遍历所有节点(递归),读取零件名称,加入到装配空间中

void CAsmXMLCtrl::SaveToArry(tag_t part)
遍历装配空间,获取所有零件Occurrence
定义了两个STL全局变量(数组)
std::vector<tag_t> occ_arry;
std::vector<CString> name_arry;
name_arry保存零件名,occ_arry保存对应的Occurrence

void CAsmXMLCtrl::MakeAssembly(MSXML2::IXMLDOMNodePtr& pNode)
解析XML文件,遍历所有零件节点(递归),读取装配约束,然后求解、施加约束。

tag_t CAsmXMLCtrl::GetOccByName(const char * occ_name)
遍历全局数组,获取零件名对应的零件Occurrence

tag_t CAsmXMLCtrl::GetInstByName(const char * prt_name)
遍历全局数组,获取零件名对应的零件Instance

tag_t CAsmXMLCtrl::GetPrtoByName(char * feature_name)
遍历UG数据库,获取特征名对应的Prototype

void MyAsmDlg::AddToTree(tag_t child_tag,HTREEITEM faItem)
把零件信息加入树形控件

XML文件说明


要实现自动约束,实际上就是填充上图最大方框内的内容,在UG里就是UF_ASSEM_mating_condition_t 结构体。所以对上图里内容不是很明白的朋友可以参考UG API手册。

04x
因为这是第一次做装配,错误难免,欢迎大家批评指正
遗留以下几个问题,大家一起交流一下:                        QQ:31384881  Email:  obana@163.com


1)        这个程序目前只加入了处理贴合Mate和对齐Align两种约束的代码。约束特征只包含平面和圆柱面两种
2)        我是在添加零件完毕后再遍历装配空间,获取零件Occurrence,有没有在添加零件同时获取Occ的方法
3)        为了获取装配特征对应的Occ,我是先在部件里面给所有装配里用到的面(点,线。。。也是如此)取一个名字放到XML里面(<feature name="XXX" type="XXX"/>节点)装配的时候遍历UG数据库,获取名称对应的装配特征Prototype。如果有两个同样的零件加进来,而且均要用到同一个特征,这就没法处理了。
4)        目前还只做到从XML里读数据(最基本的数据),往里面写是下一步的内容,这里就要考虑获取更多装配信息及如何存储的问题(如工艺信息,装配序列。。。)

下面是源代码


window.JPG (21.77 KB, 下载次数: 46)

界面

界面

AutoASM.rar

96.9 KB, 下载次数: 423, 下载积分: 贡献 -2

源文件

Files.rar

453.54 KB, 下载次数: 440, 下载积分: 贡献 -2

Files(测试用)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
沙发
 楼主| 发表于 2005-11-18 19:38:56 | 只看该作者

Files目录下文件说明

马上注册登录,享用更多网站功能!

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

x
板凳
发表于 2005-11-18 20:09:12 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
地板
发表于 2005-11-21 22:24:32 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
5
发表于 2005-11-22 14:45:35 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
6
 楼主| 发表于 2005-11-22 16:09:03 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
7
发表于 2007-4-21 21:55:45 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
8
发表于 2007-6-20 02:33:12 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
9
发表于 2007-11-24 23:01:58 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
10
发表于 2007-11-25 02:43:48 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-11-21 20:51 , Processed in 0.042890 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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