QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

 
搜索
查看: 5248|回复: 10
打印 上一主题 下一主题

[分享] 生成不了拉伸特征

  [复制链接]

列兵

Rank: 1

15

主题

78

帖子

0

积分
跳转到指定楼层
楼主
发表于 2010-11-24 16:37:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我做的一个拉伸特征的函数,在Pro/e里运行后,Pro/E自动关闭,物品的版本是Pro/E4.0,用的是VS2005的编程软件,高手给看看,呵呵。是不是我用的特征树不完整,或是什么原因,最好能把错误的地方标出来,说明应该怎么改,呵呵。谢谢。
void UsrCreateExtrudeFeat(double depth_value,ProGeomitem SketchPln,
                                                 ProGeomitem RefPln1,ProGeomitem RefPln2,
                                                 int ProtrusionOrCut,int index,double *dimValue)
{
        ProSolid solid;
        ProSection section;
        ProElement elem_tree,element,stdsec_elem,setup_elem,
                depth_elem,depthfrom_elem,depthto_elem,secpln_elem;
        ProFeatureCreateOptions opts[1];
        ProModelitem modelitem;
        ProSelection sel;
        ProFeature feature;
        ProErrorlist errors;
        ProError status;
        int ivalue;

        ProMdlCurrentGet((ProMdl*)&solid);

        //为特征树顶层元素elem_tree分配内存
        ProElementAlloc(PRO_E_FEATURE_TREE,&elem_tree);

        //向特征树添加特征类型元素element
        UsrElemtreeElementAdd(PRO_E_FEATURE_TYPE,elem_tree,&ProtrusionOrCut,PRO_VALUE_TYPE_INT,&element);

        //向特征树添加特征形式元素
        UsrElemtreeElementAdd(PRO_E_FEATURE_FORM,elem_tree,&ivalue,PRO_VALUE_TYPE_INT,&element);

        //向特征树添加标准截面元素
        ProElementAlloc(PRO_E_STD_SECTION,&stdsec_elem);
        ProElemtreeElementAdd(elem_tree,NULL,stdsec_elem);

        //向特征树添加标准截面设置元素
        ProElementAlloc(PRO_E_STD_SEC_SETUP,&setup_elem);
        ProElemtreeElementAdd(stdsec_elem,NULL,setup_elem);

        //向特征树添加标准截面元素(待草绘截面)
        status = ProElementAlloc(PRO_E_STD_SEC_PLANE,&secpln_elem);
        status = ProElemtreeElementAdd(setup_elem,NULL,secpln_elem);

        //向特征树添加草绘平面设置元素
        status = ProSelectionAlloc(NULL,&SketchPln,&sel);
        UsrElemtreeElementAdd(PRO_E_STD_SEC_PLANE,secpln_elem,&sel,PRO_VALUE_TYPE_SELECTION,&element);
        ProSelectionFree(&sel);

        //向特征树添加草绘平面方向设置元素
        ivalue=PRO_SEC_VIEW_DIR_SIDE_ONE;
        UsrElemtreeElementAdd(PRO_E_STD_SEC_PLANE_VIEW_DIR,secpln_elem,&ivalue,PRO_VALUE_TYPE_INT,&element);

        //向特征树添加草绘平面定位方向设置元素
        ivalue=PRO_SEC_ORIENT_DIR_UP;
        UsrElemtreeElementAdd(PRO_E_STD_SEC_PLANE_ORIENT_DIR,secpln_elem,&ivalue,PRO_VALUE_TYPE_INT,&element);

        //向特征树添加草绘平面定位参照基准面设置元素
        ProSelectionAlloc(NULL,&top,&sel);
        UsrElemtreeElementAdd(PRO_E_STD_SEC_PLANE_ORIENT_REF,secpln_elem,&sel,PRO_VALUE_TYPE_SELECTION,&element);
        ProSelectionFree(&sel);

        //向特征树添加草绘方法元素
        ivalue=PRO_SEC_SKETCH;
        UsrElemtreeElementAdd(PRO_E_STD_SEC_METHOD,setup_elem,&ivalue,PRO_VALUE_TYPE_INT,&element);

        //创建非完全特征
        ProMdlCurrentGet((ProMdl*)&solid);
        ProMdlToModelitem(solid,&modelitem);
        ProSelectionAlloc(NULL,&modelitem,&sel);
        opts[0]=PRO_FEAT_CR_INCOMPLETE_FEAT;
        ProFeatureCreate(sel,elem_tree,opts,1,&feature,&errors);
        ProSelectionFree(&sel);

        //从数据库中获得截面元素
        UsrSectionGet(&feature,PRO_E_STD_SECTION,&section);

        //构建和求解截面
        UsrSectionBuild(&RefPln1,&RefPln2,section,index,dimValue);

        //将草绘器元素添加到特征元素树中
        UsrElemtreeElementAdd(PRO_E_SKETCHER,stdsec_elem,&section,PRO_VALUE_TYPE_POINTER,&element);

        //拉伸深度定义
        ProElementAlloc(PRO_E_STD_EXT_DEPTH,&depth_elem);
        ProElemtreeElementAdd(elem_tree,NULL,depth_elem);

        //起始面定义
        ProElementAlloc(PRO_E_EXT_DEPTH_FROM,&depthfrom_elem);
        ProElemtreeElementAdd(depth_elem,NULL,depthfrom_elem);

        //拉伸深度类型(给定深度值)
        ivalue=PRO_EXT_DEPTH_FROM_BLIND;
        UsrElemtreeElementAdd(PRO_E_EXT_DEPTH_FROM_TYPE,depthfrom_elem,&ivalue,PRO_VALUE_TYPE_INT,&element);

        //深度值设置
        UsrElemtreeElementAdd(PRO_E_EXT_DEPTH_FROM_VALUE,depthfrom_elem,&depth_value,PRO_VALUE_TYPE_DOUBLE,&element);

        //终止面定义
        ProElementAlloc(PRO_E_EXT_DEPTH_TO,&depthto_elem);
        ProElemtreeElementAdd(depth_elem,NULL,depthto_elem);

        //终止面深度值
        ivalue=PRO_EXT_DEPTH_TO_NONE;
        UsrElemtreeElementAdd(PRO_E_EXT_DEPTH_TO_TYPE,depthto_elem,&ivalue,PRO_VALUE_TYPE_INT,&element);

        //像特征元素树添加新的深度定义元素后重定义特征
        ProFeatureRedefine(NULL,&feature,elem_tree,opts,1,&errors);
        ProSectionFree(&section);

        //重新调整模型使其在当前窗口完全显示
        int win_id;
        ProWindowCurrentGet(&win_id);  //获得当前窗口的标识号
        ProWindowRefit(win_id);  //在当前窗口完全显示模型

}

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);
}

有奖推广贴子: 

回复

使用道具 举报

列兵

Rank: 1

4

主题

25

帖子

0

积分
沙发
发表于 2010-11-25 13:18:17 | 只看该作者
PRO_E_FEATURE_TREE
     |   
     |--PRO_E_STD_FEATURE_NAME
     |   
     |--PRO_E_EXT_SURF_CUT_SOLID_TYPE
     |   
     |--PRO_E_REMOVE_MATERIAL
     |
     |--PRO_E_IS_SMT_CUT              ( applicable only in sheetmetal parts )
     |
     |--PRO_E_SMT_CUT_NORMAL_DIR      ( applicable only in sheetmetal parts )
     |
     |--PRO_E_FEATURE_FORM
     |   
     |--PRO_E_STD_SECTION             ( Section )
     |   
     |--PRO_E_FEAT_FORM_IS_THIN       ( Feature Form )
     |   
     |--PRO_E_STD_MATRLSIDE           ( Material Side )
     |   
     |--PRO_E_THICKNESS               ( Thickness )
     |   
     |--PRO_E_SRF_END_ATTRIBUTES
     |   
     |--PRO_E_TRIM_QLT_SIDE
     |   
     |--PRO_E_TRIM_QUILT
     |   
     |--PRO_E_STD_DIRECTION
     |   
     |--PRO_E_STD_EXT_DEPTH
     |    |
     |    |--PRO_E_EXT_DEPTH_FROM
     |         |--PRO_E_EXT_DEPTH_FROM_TYPE
     |         |--PRO_E_EXT_DEPTH_FROM_REF
     |         |--PRO_E_EXT_DEPTH_FROM_VALUE
     |    |  
     |    |--PRO_E_EXT_DEPTH_TO
     |         |--PRO_E_EXT_DEPTH_TO_TYPE
     |         |--PRO_E_EXT_DEPTH_TO_REF
     |         |--PRO_E_EXT_DEPTH_TO_VALUE
     |
     |--PRO_E_STD_SMT_THICKNESS  ( applicable only in sheetmetal parts )
     |
     |--PRO_E_STD_SMT_SWAP_DRV_SIDE  ( applicable only in sheetmetal parts )
     |
     |--PRO_E_SMT_WALL_SHARPS_TO_BENDS  ( applicable only in sheetmetal parts )
     |
     |--PRO_E_SMT_FILLETS  ( applicable only in sheetmetal parts )
     |    |
     |    |--PRO_E_SMT_FILLETS_SIDE
     |    |
     |    |--PRO_E_SMT_FILLETS_VALUE
     |
     |--PRO_E_SMT_DEV_LEN_CALCULATION  ( applicable only in sheetmetal parts )
     |    |
     |    |--PRO_E_SMT_DEV_LEN_SOURCE
     |    |
     |    |--PRO_E_SMT_DEV_LEN_Y_FACTOR
     |    |    |
     |    |    |--PRO_E_SMT_DEV_LEN_Y_FACTOR_TYPE
     |    |    |
     |    |    |--PRO_E_SMT_DEV_LEN_Y_FACTOR_VALUE
     |    |
     |    |--PRO_E_SMT_DEV_LEN_BEND_TABLE
回复 支持 反对

使用道具 举报

列兵

Rank: 1

4

主题

25

帖子

0

积分
板凳
发表于 2010-11-25 13:20:07 | 只看该作者
proe相关帮助里有这个,楼主比较利害,喜欢用最麻烦的方式,这样创建拉伸确实比较锻炼人啊!
回复 支持 反对

使用道具 举报

列兵

Rank: 1

15

主题

78

帖子

0

积分
地板
 楼主| 发表于 2010-11-26 09:22:56 | 只看该作者
回复 3# 青岛森科


    实不相瞒,这个拉伸我调试了快一星期了,总也成功不了,我很是着急啊,直到看见您给我发的这个超级复杂的特征元素树,我还是没有头绪,我也在查tkuse那个pdf文档,可是按照他的模型稍加改动还是成功不了,把我这个初学者整的生不如死,我不过想做一个外接圆直径为50,拉伸深度为25.5的一个正六面体而已,却耽误了这么长时间,都说学Pro/E二次开发,入门很难,入门后就会游刃有余了,但是我真没想到会难道这种程度,我买的书不是讲的过于简单,没有实例,就是版本太老没有参考价值,所以只寄希望于各位善良的高手,等待着您的再次指点,您能把生成这个六面体的具体的完整的程序代码给我发一遍么,我复制下来,反复学习,争取能举一反三,从而用到旋转,孔,倒角等等特征,使得我的Pro/E二次开发的学习能有质的飞跃,谢谢您了。
回复 支持 反对

使用道具 举报

列兵

Rank: 1

4

主题

25

帖子

0

积分
5#
发表于 2010-11-26 09:56:38 | 只看该作者
最好的学习资料是proe的帮助手册,有比较详细的示例代码,你可以参考的。
proe学习的确入门很难,慢慢来吧,别着急。
回复 支持 反对

使用道具 举报

列兵

Rank: 1

15

主题

78

帖子

0

积分
6#
 楼主| 发表于 2010-11-26 10:13:27 | 只看该作者
回复 5# 青岛森科


   您说的这这个Pro/E的帮助手册是指的哪一个呢?是...\proe4.0\protoolkit下的tkuse.pdf呢?还是...\proe4.0\protoolkit\protkdoc下的index.html呢?还是打开Pro/E软件后,“帮助”菜单栏里的那个“帮助中心”呢,呵呵,我主要看前面两个,可总也不得要领呢,我感觉我现在正处于学习过程中的一个非常严重的瓶颈阶段,可能有个高手稍微点一下,后面我就很顺利了,可是我现在自己怎么也突破不了这个难关了,哎
回复 支持 反对

使用道具 举报

列兵

Rank: 1

15

主题

78

帖子

0

积分
7#
 楼主| 发表于 2010-11-29 12:07:55 | 只看该作者
回复 7# mmi190


    你说的什么是真的假的啊?呵呵,没看明白
回复 支持 反对

使用道具 举报

列兵

Rank: 1

4

主题

25

帖子

0

积分
8#
发表于 2010-12-3 14:46:24 | 只看该作者
是...\proe4.0\protoolkit下的tkuse.pdf
看这个就足够了。
楼主是做什么行业的?
回复 支持 反对

使用道具 举报

列兵

Rank: 1

15

主题

78

帖子

0

积分
9#
 楼主| 发表于 2010-12-8 10:13:04 | 只看该作者
回复 8# 青岛森科


  我是研究这方面的研究生啊,呵呵,研究基于航天器空间布局的Proe二次开发,呵呵
回复 支持 反对

使用道具 举报

列兵

Rank: 1

4

主题

25

帖子

0

积分
10#
发表于 2010-12-8 23:30:41 | 只看该作者
回复 9# lovedongyao


  呵呵,高科技人才啊,哪个大学??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-11-28 11:26

返回顶部