找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

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

[求助] 怎么用pro/toolkit创建一个拉伸特征啊!

[复制链接]
跳转到指定楼层
1
发表于 2009-3-10 16:06:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
各位大侠:
       跪求一个完整的用pro/toolkit在pro/e2.0上创建拉伸特征的的C源程序,只要能创建一个正方形即可。
      先谢谢啦!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2009-3-10 18:36:03 | 只看该作者
看 李世国的书,上面很详细,
3
发表于 2009-3-10 22:03:37 | 只看该作者
/*====================================================================*\
FUNCTION : UsrCreateExtrudeFeat(创建拉伸特征)
\*====================================================================*/
void UsrCreateExtrudeFeat(
       double depth_value,    //(In)拉伸深度
                         ProGeomitem SketchPln, //(In)草绘平面
                         ProGeomitem RefPln1, //(In)参照平面1
                         ProGeomitem RefPln2,  //(In)参照平面2
                         int ProtrusionOrCut, //(In)特征类型
       int index,             //(In)草图序号
        double *dimValue)     //(In)直径
{
ProError         status;
    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;
int ivalue;
int win_id;

    ProMdlCurrentGet((ProMdl*)&solid);

/*---------------------------------------------------------------*\
    为特征树分配内存
\*---------------------------------------------------------------*/
    ProElementAlloc(PRO_E_FEATURE_TREE, &elem_tree);
/*---------------------------------------------------------------*\
    向特征树添加特征类型元素
\*---------------------------------------------------------------*/
    UsrElemtreeElementAdd(PRO_E_FEATURE_TYPE,elem_tree,
       &ProtrusionOrCut,PRO_VALUE_TYPE_INT,&element);
/*---------------------------------------------------------------*\
    向特征树添加特征形式元素
\*---------------------------------------------------------------*/
ivalue=PRO_EXTRUDE;
    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_PLANE, &setup_elem);
    ProElemtreeElementAdd(stdsec_elem, NULL, setup_elem);
/*---------------------------------------------------------------*\
    向特征树添加草绘平面元素
\*---------------------------------------------------------------*/   
  ProElementAlloc(PRO_E_STD_SECTION_PLANE, &secpln_elem);
  ProElemtreeElementAdd(setup_elem, NULL, secpln_elem);
/*---------------------------------------------------------------*\
    向特征树添加草绘平面设置元素
\*---------------------------------------------------------------*/   
  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);
/*---------------------------------------------------------------*\
    创建非完全特征
\*---------------------------------------------------------------*/
    status=ProMdlCurrentGet((ProMdl*)&solid);
if(status!=PRO_TK_NO_ERROR)return(status);
  
  
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);
    status=ProSectionFree(&section);
/*---------------------------*\
重新调整模型,使其在当前窗口完全显示
\*--------------------------*/
ProWindowCurrentGet(&win_id);
  
ProWindowRefit(win_id);

}
/*====================================================================*\
FUNCTION : UsrSectionGet()
从指定特征的元素树中选出草绘器(PRO_E_SKETCHER)元素之值
\*====================================================================*/
int UsrSectionGet(ProFeature *feature, //(In)  特征句柄
        int elemId,   //(In)  截面标识符
        ProSection *section) //(Out) 截面元素
{
    ProError status;
    ProElempath path;
    ProElempathItem path_items[2];
    ProValue value;
    ProValueData value_data;
    *section = NULL;
  

//设置特征截面元素的路径
    path_items[0].type = PRO_ELEM_PATH_ITEM_TYPE_ID;
  

    path_items[0].path_item.elem_id = elemId;
    path_items[1].type = PRO_ELEM_PATH_ITEM_TYPE_ID;
    path_items[1].path_item.elem_id = PRO_E_SKETCHER;
    ProElempathAlloc(&path);
  

    ProElempathDataSet (path, path_items, 2);
//从指定特征中得到路径为path的元素值(非透明的ProValue对象)
    status =ProFeatureElemValueGet(feature, path, &value);
  

    if(status != PRO_TK_NO_ERROR)
  return(0);
    ProElempathFree(&path);
    //从非透明的ProValue对象得到用户可以访问的数据对象ProValueData
    ProValueDataGet(value, &value_data);
//获得截面元素指针
    *section = (ProSection)value_data.v.p;
  

    return(1);
}

粉红色的这个程序是不是有问题啊?这就是李世国书上的,但拉伸出不来啊?
4
发表于 2009-3-10 22:31:57 | 只看该作者
各位大侠,帮帮忙吧!实在想不出来啊!发个程序过来让我参考参考吧!谢谢啦!!
5
发表于 2009-3-24 10:53:55 | 只看该作者
至少在4.0上有问题,
*section = (ProSection)value_data.v.p;
测试一下可以发现:*section ==NULL;为真。
所以程序会自动退出。
处理的办法是:(注册运行之后)在点击按钮CreateFeature(bolt)之前需要——Applications->Legacy->Feature->Done,然后点击上述按钮就可以创建特征。
至于怎么用修改程序,还在摸索中.........。要是哪位高人知道,请指点。
6
发表于 2009-4-8 11:02:54 | 只看该作者
我这里有个 Proe 2001 下 VC6 做的非常简陋的 拉伸 加料特征程序。
仅供参考。看不懂别骂我。
1, C++的代码;
2,没有注释。
7
发表于 2009-4-8 11:03:48 | 只看该作者
附加代码在此

本帖子中包含更多资源

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

x
8
发表于 2009-4-8 11:37:29 | 只看该作者
李世国的例子特征创建元素树是采用2001的结构,当然不能在野火上运行,参照野火拉伸特征元素树修改一下就可以了。
9
发表于 2010-3-7 22:45:27 | 只看该作者
具体怎么改啊 楼上的 可以把你改的代码我参照一下吗 谢谢你   我QQ601698998  有空可以交流一下
10
发表于 2010-3-24 23:49:45 | 只看该作者
学习中。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-23 19:04 , Processed in 0.032835 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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