生成不了拉伸特征
这是我做的一个拉伸特征的函数,在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;
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=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);
ProSectionFree(§ion);
//重新调整模型使其在当前窗口完全显示
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);
} 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 proe相关帮助里有这个,楼主比较利害,喜欢用最麻烦的方式,这样创建拉伸确实比较锻炼人啊! 回复 3# 青岛森科
实不相瞒,这个拉伸我调试了快一星期了,总也成功不了,我很是着急啊,直到看见您给我发的这个超级复杂的特征元素树,我还是没有头绪,我也在查tkuse那个pdf文档,可是按照他的模型稍加改动还是成功不了,把我这个初学者整的生不如死,我不过想做一个外接圆直径为50,拉伸深度为25.5的一个正六面体而已,却耽误了这么长时间,都说学Pro/E二次开发,入门很难,入门后就会游刃有余了,但是我真没想到会难道这种程度,我买的书不是讲的过于简单,没有实例,就是版本太老没有参考价值,所以只寄希望于各位善良的高手,等待着您的再次指点,您能把生成这个六面体的具体的完整的程序代码给我发一遍么,我复制下来,反复学习,争取能举一反三,从而用到旋转,孔,倒角等等特征,使得我的Pro/E二次开发的学习能有质的飞跃,谢谢您了。 最好的学习资料是proe的帮助手册,有比较详细的示例代码,你可以参考的。
proe学习的确入门很难,慢慢来吧,别着急。 回复 5# 青岛森科
您说的这这个Pro/E的帮助手册是指的哪一个呢?是...\proe4.0\protoolkit下的tkuse.pdf呢?还是...\proe4.0\protoolkit\protkdoc下的index.html呢?还是打开Pro/E软件后,“帮助”菜单栏里的那个“帮助中心”呢,呵呵,我主要看前面两个,可总也不得要领呢,我感觉我现在正处于学习过程中的一个非常严重的瓶颈阶段,可能有个高手稍微点一下,后面我就很顺利了,可是我现在自己怎么也突破不了这个难关了,哎 回复 7# mmi190
你说的什么是真的假的啊?呵呵,没看明白 是...\proe4.0\protoolkit下的tkuse.pdf
看这个就足够了。
楼主是做什么行业的? 回复 8# 青岛森科
我是研究这方面的研究生啊,呵呵,研究基于航天器空间布局的Proe二次开发,呵呵 回复 9# lovedongyao
呵呵,高科技人才啊,哪个大学??
页:
[1]
2