请帮忙解决一下创建过两条线的基准面的问题!
作者:cad 提交日期:2009-7-6| 分类: | 访问量:
请帮忙解决一下创建过两条线的基准面的问题!
请帮忙看看:创建过两条线的基准面该怎么弄,谢谢!!! 下面的程序可以运行,也可以选线,但就是出不了基准面,在ProFeatureCreate (mdl_sel, elem_tree, NULL, 0, &feature,&errors);时出问题了,不知道该怎么用那个PRO_DTMPLN_THRU,谢谢指点! 主要的问题是:PRO_DTMPLN_THRU该怎么用?谢谢!
/*====================================================================*\ FUNCTION : CreatOffsetDtm() (创建过两条线的基准面) \*====================================================================*/
int CreattDtm_twoline() { ProError status; ProElement elem_tree, elem_ftype, elem_consts, elem_offset; ProElement elem_const_type, elem_offset_ref, elem_offset_dist; ProModelitem model_modelitem; ProSelection mdl_sel; ProFeature feature; ProErrorlist errors;
ProValueData value_data; ProSelection * p_select; ProSelection sel; int n_select; ProValue value;
// 为特征树顶层元素elem_tree分配内存
status = ProElementAlloc (PRO_E_FEATURE_TREE, &elem_tree);
// 向特征树添加特征类型元素
int ivalue=PRO_FEAT_DATUM; UsrElemtreeElementAdd(PRO_E_FEATURE_TYPE,elem_tree,&ivalue,PRO_VALUE_TYPE_INT,&elem_ftype);
// 向特征树添加约束平面集元素elem_consts
status = ProElementAlloc (PRO_E_DTMPLN_CONSTRAINTS, &elem_consts); ProElemtreeElementAdd (elem_tree, NULL, elem_consts);
/////////// // 向约束平面集元素添加子元素elem_const
status = ProElementAlloc (PRO_E_DTMPLN_CONSTRAINT, &elem_offset); status = ProElemtreeElementAdd (elem_consts, NULL, elem_offset);
// 设置基准面类型元素,并添加到特征树中
ivalue=PRO_DTMPLN_THRU; UsrElemtreeElementAdd(PRO_E_DTMPLN_CONSTR_TYPE,elem_offset, &ivalue,PRO_VALUE_TYPE_INT,&elem_const_type);
// 向特征树添加基准面参照元素 CString wzh; // ProSelection sel; ProSolid solid; status=ProMdlCurrentGet((ProMdl*)&solid);//获得当前模型 /********* ProSelectionAlloc(NULL, &BasePln, &sel);//选择参照轴线; UsrElemtreeElementAdd(PRO_E_DTMPLN_CONSTR_REF,elem_offset, &sel,PRO_VALUE_TYPE_SELECTION,&elem_offset_ref); *********/ AfxMessageBox("选线"); status = ProSelect ( "axis,datum,line", -1, NULL, NULL, NULL, NULL, &p_select,&n_select ); if ( n_select <= 0 ) { return ProError(-1); } status = ProElementAlloc (PRO_E_DTMPLN_CONSTR_REF,&elem_offset_ref); value_data.type = PRO_VALUE_TYPE_SELECTION; value_data.v.r = p_select[0];
// 向特征树添加偏距元素之值 status = ProValueAlloc ( &value ); status = ProValueDataSet ( value, &value_data ); status = ProElementValueSet (elem_offset_ref, value ); wzh.Format("line_1_valueset_%d",status); AfxMessageBox(wzh); status = ProElemtreeElementAdd (elem_offset, NULL,elem_offset_ref); wzh.Format("line_1_ADD_%d",status); AfxMessageBox(wzh);
//second_line status = ProElementAlloc (PRO_E_DTMPLN_CONSTRAINT, &elem_offset); status = ProElemtreeElementAdd (elem_consts, NULL, elem_offset); status = ProSelect ( "axis,datum,line", -1, NULL, NULL, NULL, NULL, &p_select,&n_select ); if ( n_select <= 0 ) { return ProError(-1); } status = ProElementAlloc (PRO_E_DTMPLN_CONSTR_REF,&elem_offset_ref); value_data.type = PRO_VALUE_TYPE_SELECTION; value_data.v.r = p_select[0];
// 向特征树添加偏距元素之值 status = ProValueAlloc ( &value ); status = ProValueDataSet ( value, &value_data ); status = ProElementValueSet (elem_offset_ref, value ); status = ProElemtreeElementAdd (elem_offset, NULL,elem_offset_ref); wzh.Format("line_2_ADD_%d",status);//这一步出来status=0; AfxMessageBox(wzh);
// 获得当前模型项的选择对象
ProMdlToModelitem(solid, &model_modelitem); ProSelectionAlloc(NULL, &model_modelitem, &mdl_sel);
// 创建偏距基准面
status = ProFeatureCreate (mdl_sel, elem_tree, NULL, 0, &feature,&errors); wzh.Format("feature_%d",status); //这一步出来status=-1; AfxMessageBox(wzh); // 释放内存空间
status = ProElementFree (&elem_tree); status = ProSelectionFree (&mdl_sel); return (status); }
其中UsrElemtreeElementAdd()定义如下:
/*====================================================================*\ 函数: UsrElemtreeElementAdd() 功能:设置特征元素之值,并将特征元素添加到特征元素树中) \*====================================================================*/
void UsrElemtreeElementAdd(ProElemId id, //(In)特征元素标识符 ProElement parent, //(In)上级元素 void *value, //(In)特征元素值 ProValueDataType type, //(In)特征元素值类型 ProElement *element //(In)特征元素 ) { 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); }
*本文摘自:http://www.jxcad.com.cn/read.php?tid=456669&fpage=2
|