iCAx开思网
标题:
怎么用pro/toolkit创建一个拉伸特征啊!
[打印本页]
作者:
flosea
时间:
2009-3-10 16:06
标题:
怎么用pro/toolkit创建一个拉伸特征啊!
各位大侠:
跪求一个完整的用pro/toolkit在pro/e2.0上创建拉伸特征的的C源程序,只要能创建一个正方形即可。
先谢谢啦!!
作者:
usedID
时间:
2009-3-10 18:36
看 李世国的书,上面很详细,
作者:
flosea
时间:
2009-3-10 22:03
/*====================================================================*\
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, §ion);
/*---------------------------------------------------------------*\
构建和求解截面
\*---------------------------------------------------------------*/
UsrSectionBuild(&RefPln1, &RefPln2, section,index,dimValue);
/*---------------------------------------------------------------*\
将草绘器元素添加到特征元素树中
\*---------------------------------------------------------------*/
UsrElemtreeElementAdd(PRO_E_SKETCHER,stdsec_elem,
§ion,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(§ion);
/*---------------------------*\
重新调整模型,使其在当前窗口完全显示
\*--------------------------*/
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);
}
粉红色的这个程序是不是有问题啊?这就是李世国书上的,但拉伸出不来啊?
作者:
flosea
时间:
2009-3-10 22:31
各位大侠,帮帮忙吧!实在想不出来啊!发个程序过来让我参考参考吧!谢谢啦!!
作者:
5I3D
时间:
2009-3-24 10:53
至少在4.0上有问题,
*section = (ProSection)value_data.v.p;
测试一下可以发现:*section ==NULL;为真。
所以程序会自动退出。
处理的办法是:(注册运行之后)在点击按钮CreateFeature(bolt)之前需要——Applications->Legacy->Feature->Done,然后点击上述按钮就可以创建特征。
至于怎么用修改程序,还在摸索中.........。要是哪位高人知道,请指点。
作者:
Easy2009
时间:
2009-4-8 11:02
我这里有个 Proe 2001 下 VC6 做的非常简陋的 拉伸 加料特征程序。
仅供参考。看不懂别骂我。
1, C++的代码;
2,没有注释。
作者:
Easy2009
时间:
2009-4-8 11:03
附加代码在此
作者:
DavidJiang
时间:
2009-4-8 11:37
李世国的例子特征创建元素树是采用2001的结构,当然不能在野火上运行,参照野火拉伸特征元素树修改一下就可以了。
作者:
xiaohong1009
时间:
2010-3-7 22:45
具体怎么改啊 楼上的 可以把你改的代码我参照一下吗 谢谢你 我QQ601698998 有空可以交流一下
作者:
yzq122600
时间:
2010-3-24 23:49
学习中。。。。。
作者:
2323220987
时间:
2010-3-26 20:32
我有4.0的代码,QQ:527318405
作者:
yzq122600
时间:
2010-3-29 21:40
学学啊....
作者:
lightshining
时间:
2010-5-22 15:38
我拉伸出来的还是不完全特征,没有草绘元素,怎么办?
作者:
llp008008
时间:
2010-8-20 18:46
肯請DX將能在2.0上用的方法傳上來,謝謝.
作者:
xbin_cax
时间:
2010-11-24 21:06
protoolkit幫助文件内有實例的呀。
欢迎光临 iCAx开思网 (https://www.icax.org/)
Powered by Discuz! X3.3