找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: zhangweilst

[原创] Proe Wildfire 5.0二次开发之第一个拉伸特征的创建

[复制链接]

4

主题

86

回帖

3

威望

助工

积分
115
 楼主| 发表于 2013-4-14 23:12 | 显示全部楼层
你也许会问,就一个小小的基准面,需要多少代码?那我可以告诉你,需要不太少的代码。这涉及到Proe特征创建的结构。Toolkit给每一种特征(基准面,拉伸,旋转,孔等等)都建立了一个元素树(ElementTree),创建特征需要填写这个元素树必要的元素。这些元素少则几个,多则十几个几十个,并且有一定的层次结构。而每一个元素的至少需要两行代码,更一般的情况是需要5-7行代码。这就会让一个特征的建立变得比较复杂。
当然讨论这个显得有点过于斤斤计较,我只是想让这个教程变得简单一点。
回复

使用道具 举报

4

主题

86

回帖

3

威望

助工

积分
115
 楼主| 发表于 2013-4-14 23:15 | 显示全部楼层
直接用模板默认的基准面创建拉伸特征的话,需要两次访问。一个是访问这几个基准面特征,然后是访问特征的几何项。这比自己创建基准面特征要来得简单一些。
不早了,今天先写这么多。
回复

使用道具 举报

1

主题

23

回帖

0

威望

实习生

积分
26
发表于 2013-4-17 13:31 | 显示全部楼层
大神啊!求助!源代码的编写!
回复

使用道具 举报

4

主题

86

回帖

3

威望

助工

积分
115
 楼主| 发表于 2013-4-18 19:06 | 显示全部楼层
模板弄得太多,写好的代码误删了。
今晚更新。
回复

使用道具 举报

4

主题

86

回帖

3

威望

助工

积分
115
 楼主| 发表于 2013-4-18 22:21 | 显示全部楼层
下面最重要的部分来了。在编写拉伸特征代码的过程中碰到了不少困难,李世国的书《Pro/Toolkit程序设计》让我获益良多,不过讲的是2001的toolkit开发。在toolkit中,2001版本的proe叫R20,野火的叫R21+,这两个版本在特征元素树上有了明显的变化。

[ 本帖最后由 zhangweilst 于 2013-4-18 22:25 编辑 ]
回复

使用道具 举报

4

主题

86

回帖

3

威望

助工

积分
115
 楼主| 发表于 2013-4-18 22:28 | 显示全部楼层
之前提过特征的元素树了,也简单说过对他们进行填写。填写的过程很麻烦,每一个元素都要进行重复的步骤,所以利用了自定义添加元素到元素树的函数。代码如下。
// 设置特征元素的值,并将特征元素添加到特征元素树中
void UsrElemtreeElementAdd(ProElemId id,
                                                   ProElement parent,
                                                   void* value,
                                                   ProValueDataType type,
                                                   ProElement* element)
{
        ProValueData value_data;
        ProValue pvalue;
        value_data.type = type;
        //特征元素值类型转换
        switch(type)
        {
        case PRO_VALUE_TYPE_INT:
                        value_data.v.i = *(int*)value;
                        break;
        case PRO_VALUE_TYPE_DOUBLE:
                        value_data.v.d = *(double*)value;
                        break;
        case PRO_VALUE_TYPE_POINTER:
                        value_data.v.p = *(void**)value;
                        break;
        case PRO_VALUE_TYPE_STRING:
                        value_data.v.s = *(char**)value;
                        break;
        case PRO_VALUE_TYPE_WSTRING:
                        value_data.v.w = *(wchar_t**)value;
                        break;
        case PRO_VALUE_TYPE_SELECTION:
                        value_data.v.r = *(ProSelection*)value;
                        break;
        case PRO_VALUE_TYPE_TRANSFORM:
                        value_data.v.t = *(double***)value;
                        break;
        case PRO_VALUE_TYPE_BOOLEAN:
                        value_data.v.i = *(int*)value;
                        break;
        }

        //设置特征元素的值
        ProElementAlloc(id,element);
        ProValueAlloc(&pvalue);
        ProValueDataSet(pvalue,&value_data);
        ProElementValueSet(*element,pvalue);

        ProElemtreeElementAdd(parent,NULL,*element);
}
回复

使用道具 举报

4

主题

86

回帖

3

威望

助工

积分
115
 楼主| 发表于 2013-4-18 22:41 | 显示全部楼层
下面说这个函数做了什么。对元素进行赋值,需要用到ProValue数据类型。这个数据类型在toolkit中被声明为非透明指针,用户无法对其进行访问和赋值,因此要用到ProValueData类型,这个类型的定义大家可以自行查看头文件定义,它是一个对用户透明的结构体的typedef定义。要对元素进行赋值,先要声明ProValueData类型并赋值,然后再将这个值通过toolkit的函数赋给ProValue类型,最后再用ProValue类型赋值特征元素树的元素。最后要将元素添加到元素树中。这就是为什么给一个元素赋值会这么费劲了。
回到这个函数上来。函数的第一个参数为ProElemId类型的id,这是一个枚举类型,定义了所有proe特征的元素树的元素id,元素树就是由这些id的树形结构构成的。换句话说,这个就是元素树元素的名字。
前面提到过元素树有层次结构,下一个参数就是体现。它是元素的父项,也就是一个元素层次结构的上一层。顶层当然是元素树,其id为PRO_E_FEATURE_TREE,大家很容易明白,toolkit中所有特征的元素树的顶层都是这个名字——PRO_E_FEATURE_TREE。
讲到这里,这个函数就很简单了。大家搞清楚ProValueData结构体类型的定义之后,就会很清楚这个函数在做什么。这个函数就讲这么多。以后添加元素到元素树都用这个函数。

[ 本帖最后由 zhangweilst 于 2013-4-18 22:44 编辑 ]
回复

使用道具 举报

4

主题

86

回帖

3

威望

助工

积分
115
 楼主| 发表于 2013-4-27 22:28 | 显示全部楼层
写了也不少了,需要的人很少。等有人需要再写吧。
回复

使用道具 举报

0

主题

71

回帖

0

威望

助工

积分
81
发表于 2013-4-29 00:57 | 显示全部楼层
大神,膜拜啊,
回复

使用道具 举报

9

主题

41

回帖

0

威望

助工

积分
56
发表于 2013-5-6 20:40 | 显示全部楼层
问下楼主,5.0的配置环境和2.0的一样吗
回复

使用道具 举报

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

本版积分规则

本站为非营利性站点,部分资源为网友搜集或发布,仅供学习和研究使用,如用于商业用途,请购买正版。站内所发布的资源,如有侵犯你的权益,请发邮件联系我们,本站将立即改正或删除。

手机版|小黑屋|野火论坛(©2007~2024) ( 苏ICP备11036728号-2 )苏公网安备 32039102000103号|站长QQ28016688

GMT+8, 2024-11-22 10:42 , Processed in 0.149499 second(s), 19 queries .

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