元素树-创建特征-在一个边的中点创建一个坐标系
来源:互联网 发布:c语言疯狂讲义 v4.0 编辑:程序博客网 时间:2024/04/27 14:30
方法1:偏移原始坐标系创建新坐标系
方法2:在中点创建基准点/面,之后创建坐标系
采用方法:方法2
步骤:
选择边-添加点-添加坐标系
创建方法:点 -边-边
1.1 选择边特征
status = ProSelect("edge", 1, NULL, NULL, NULL, NULL, &sel_1, &nSel)<pre name="code" class="cpp">status = ProSelectionCopy(*sel_1, &sel_11); //复制一份,防范而已1.2创建一个基准点,使用方法 元素树 详情参考 ProDtmPnt.h (可以搜索 ProElementAlloc)
setPoint(){//ProSelectionModelitemGet(*sel_1, &item);//元素树ProElement elem_tree, elem_type, elem_dpo_type, elem_array, elem_point;ProElement elem_pla_cons, elem_pla_con, elem_pla_ref, elem_pla_type;ProElement elem_dim_cons, elem_dim_con, elem_dim_ref, elem_dim_type, elem_dim_val;{status = ProElementAlloc(PRO_E_FEATURE_TREE, &elem_tree); //创建元素树根if (status != PRO_TK_NO_ERROR) { return status; }int ivalue = PRO_FEAT_DATUM_POINT;//添加类型 创建一个点UsrElemtreeElementAdd(PRO_E_FEATURE_TYPE, elem_tree, &ivalue, PRO_VALUE_TYPE_INT, &elem_type);//添加点类型 ivalue = PRO_DPOINT_TYPE_GENERAL; UsrElemtreeElementAdd(PRO_E_DPOINT_TYPE, elem_tree, &ivalue, PRO_VALUE_TYPE_INT, &elem_dpo_type); //参照数组status = ProElementAlloc(PRO_E_DPOINT_POINTS_ARRAY, &elem_array); status = ProElemtreeElementAdd(elem_tree, NULL, elem_array);//点status = ProElementAlloc(PRO_E_DPOINT_POINT, &elem_point);status = ProElemtreeElementAdd(elem_array, NULL, elem_point);//pla consstatus = ProElementAlloc(PRO_E_DPOINT_PLA_CONSTRAINTS, &elem_pla_cons);status = ProElemtreeElementAdd(elem_point, NULL, elem_pla_cons);//pla constatus = ProElementAlloc(PRO_E_DPOINT_PLA_CONSTRAINT, &elem_pla_con);status = ProElemtreeElementAdd(elem_pla_cons, NULL, elem_pla_con);//pla ref sel_1UsrElemtreeElementAdd(PRO_E_DPOINT_PLA_CONSTR_REF, elem_pla_con, sel_1, PRO_VALUE_TYPE_SELECTION, &elem_pla_ref);//pla typeivalue = PRO_DTMPNT_CONSTR_TYPE_ON;UsrElemtreeElementAdd(PRO_E_DPOINT_PLA_CONSTR_TYPE, elem_pla_con, &ivalue, PRO_VALUE_TYPE_INT, &elem_pla_type);//dim consstatus = ProElementAlloc(PRO_E_DPOINT_DIM_CONSTRAINTS, &elem_dim_cons);status = ProElemtreeElementAdd(elem_point, NULL, elem_dim_cons);//dim constatus = ProElementAlloc(PRO_E_DPOINT_DIM_CONSTRAINT, &elem_dim_con); status = ProElemtreeElementAdd(elem_dim_cons, NULL, elem_dim_con);//dim ref select UsrElemtreeElementAdd(PRO_E_DPOINT_DIM_CONSTR_REF, elem_dim_con, sel_1, PRO_VALUE_TYPE_SELECTION, &elem_dim_ref);//dim typeintivalue = PRO_DTMPNT_CONSTR_TYPE_RATIO; UsrElemtreeElementAdd(PRO_E_DPOINT_DIM_CONSTR_TYPE, elem_dim_con, &ivalue, PRO_VALUE_TYPE_INT, &elem_dim_type);//dim val doubledouble d_ratio = 0.5; //比率0.5 UsrElemtreeElementAdd(PRO_E_DPOINT_DIM_CONSTR_VAL, elem_dim_con, &d_ratio, PRO_VALUE_TYPE_DOUBLE, &elem_dim_val);}//创建ProModelitem model_item;ProSelection mdl_sel;ProErrorlist errors;ProSolid solid;//status = ProMdlCurrentGet((ProMdl*)&solid);if (status != PRO_TK_NO_ERROR) {return status;}status = ProMdlToModelitem(solid, &model_item);if (status != PRO_TK_NO_ERROR) {return status;}status = ProSelectionAlloc(NULL, &model_item, &mdl_sel);if (status != PRO_TK_NO_ERROR) {return status;}////status = ProFeatureCreate(mdl_sel, elem_tree, NULL, 0, &feature, &errors);ProFeatureCreateOptions * opts = 0;status = ProArrayAlloc(1, sizeof(ProFeatureCreateOptions), 1, (ProArray*)&opts);//opts[0] = PRO_FEAT_CR_DEFINE_MISS_ELEMS;opts[0] = PRO_FEAT_CR_FIX_MODEL_ON_FAIL;//status = ProFeatureWithoptionsCreate(mdl_sel, elem_tree, opts, 0, &feature, &errors);//创建特征。注意creo版本status = ProFeatureCreate(mdl_sel, elem_tree, opts, 0, &feature, &errors);if (status != PRO_TK_NO_ERROR) {return status;}feature.type = PRO_POINT;feature.id = feature.id + 1;// 与手动选择id差1。 这里的feature 需要注意status = ProSelectionAlloc(NULL, &feature, &midsel);return status;}
现在获得了一个点和一条边
1.3 获得另一条边
坐标轴方向不需确定,所以只要在获得任意一条边即可
方法:当前边-任意端点-端点的所有边-与当前边不相同的边
1.3.1获得端点
status = ProSelectionModelitemGet(sel_11, &item); status = ProGeomitemdataGet(&item, &geo_data); status = ProLinedataGet(geo_data->data.p_curve_data, end1, end2); //end1,end2 任选其一1.3.2获得边
part = (ProPart)mdl; //mdlcurrentget()//status = ProGeometryAtPointFind(part,end1,&sel_p,&p_count);//获取某个点的几何体//获取线ProModelitem item_temp;ProGeomitemdata *p_data;Pro3dPnt temp_3d1;Pro3dPnt temp_3d2;for (int i = 0; i < p_count;i++){ProSelectionModelitemGet(sel_p[i], &item_temp);if (PRO_EDGE == item_temp.type ){ProGeomitemdataGet(&item_temp,&p_data);ProLinedataGet(p_data->data.p_curve_data,temp_3d1,temp_3d2);if (equal3dPoint(end1,temp_3d1) && !equal3dPoint(end2,temp_3d2)){//getProSelectionCopy(sel_p[i], &sel_22);return PRO_TK_NO_ERROR; }else if(equal3dPoint(end1, temp_3d2) && !equal3dPoint(end2, temp_3d1)){//getProSelectionCopy(sel_p[i], &sel_22);return PRO_TK_NO_ERROR;}else{//no}}}
对比函数
bool equal3dPoint(Pro3dPnt &point1, Pro3dPnt &point2){if (point1[0] == point2[0]){if (point1[1] == point2[1]){if (point1[2] == point2[2]){return true;}}}return false;}1.3.3 添加坐标系
ProElement elem_tree, elem_type, elem_conts, elem_cont, elem_cont_ref;ProElement elem_axi1, elem_axi2;status = ProElementAlloc(PRO_E_FEATURE_TREE, &elem_tree); int ivalue = PRO_FEAT_CSYS; UsrElemtreeElementAdd(PRO_E_FEATURE_TYPE, elem_tree, &ivalue, PRO_VALUE_TYPE_INT, &elem_type); // status = ProElementAlloc(PRO_E_CSYS_ORIGIN_CONSTRS, &elem_conts); if (status != PRO_TK_NO_ERROR) { return; } status = ProElemtreeElementAdd(elem_tree, NULL, elem_conts); if (status != PRO_TK_NO_ERROR) { return; } // status = ProElementAlloc(PRO_E_CSYS_ORIGIN_CONSTR, &elem_cont); if (status != PRO_TK_NO_ERROR) { return; } status = ProElemtreeElementAdd(elem_conts, NULL, elem_cont); if (status != PRO_TK_NO_ERROR) { return; } //添加 原点参考 status = UsrElemtreeElementAdd(PRO_E_CSYS_ORIGIN_CONSTR_REF, elem_cont, &midsel, PRO_VALUE_TYPE_SELECTION, &elem_cont_ref); if (status != PRO_TK_NO_ERROR) { return; } /参考1 status = UsrElemtreeElementAdd(PRO_E_CSYS_ORIENTSELAXIS1_REF, elem_tree, &sel_11, PRO_VALUE_TYPE_SELECTION, &elem_axi1); if (status != PRO_TK_NO_ERROR) { return; } //参考2 status = UsrElemtreeElementAdd(PRO_E_CSYS_ORIENTSELAXIS2_REF, elem_tree, &sel_22, PRO_VALUE_TYPE_SELECTION, &elem_axi2); if (status != PRO_TK_NO_ERROR) { return; } // 基本模型属性 ProModelitem model_item; ProSelection mdl_sel; ProFeature feature; ProErrorlist errors; ProSolid solid; ProMdl mdl; // status = ProMdlCurrentGet((ProMdl*)&solid); if (status != PRO_TK_NO_ERROR) { return; } status = ProMdlToModelitem(solid, &model_item); if (status != PRO_TK_NO_ERROR) { return; } status = ProSelectionAlloc(NULL, &model_item, &mdl_sel); if (status != PRO_TK_NO_ERROR) { return; } // 创建特征 //status = ProFeatureCreate(mdl_sel, elem_tree, NULL, 0, &feature, &errors); ProFeatureCreateOptions * opts = 0; status = ProArrayAlloc(1, sizeof(ProFeatureCreateOptions), 1, (ProArray*)&opts); opts[0] = PRO_FEAT_CR_NO_OPTS; status = ProFeatureWithoptionsCreate(mdl_sel, elem_tree, opts, 0, &feature, &errors); status = ProElementFree(&elem_tree); status = ProSelectionFree(&mdl_sel);
参考用:
int nSel ;ProSelection *sel_p;ProSelection *sel_1,*sel_2;ProSelection sel_11, sel_22;ProGeomitemdata * geo_data;ProModelitem item;ProFeature feature; //新点的//Pro3dPnt end1;Pro3dPnt end2;Pro3dPnt midpoint;
来源: pro_toolkit程序设计
特征元素标识, 上级元素, 特征元素值, 特征元素类型, 特征元素ProError line::UsrElemtreeElementAdd(ProElemId id, ProElement parent, void * value, ProValueDataType type, ProElement *element){ProValueData value_data;ProValue pvalue;value_data.type = type;// type changeswitch (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;}//status = ProElementAlloc(id, element);if (status != PRO_TK_NO_ERROR) {return status;}status = ProValueAlloc(&pvalue);if (status != PRO_TK_NO_ERROR) {return status;}status = ProValueDataSet(pvalue, &value_data);if (status != PRO_TK_NO_ERROR) {return status;}status = ProElementValueSet(*element, pvalue);if (status != PRO_TK_NO_ERROR) {return status;}//status = ProElemtreeElementAdd(parent, NULL, *element);if (status != PRO_TK_NO_ERROR) {return status;}return status;}
1 0
- 元素树-创建特征-在一个边的中点创建一个坐标系
- 创建一个dom元素
- 动态的创建一个元素 createElement 和删除一个元素
- 创建只有一个元素的元组
- 创建一个10个元素的数组赋初值,由后往前输出,在加倍输出
- 黑马程序员-我的第十篇学习日记:OC中点语法,@property和@synthesize,完整创建一个可用对象
- 创建一个新的模块在Magento
- 在myeclipse创建一个java的类
- 一个封装的创建DOM元素的JS方法
- 一个在vs2005+上创建一个基于CRecordView的对话框
- 创建一个的用户
- 使用JAVASCRIPT动态创建一个Select元素
- 创建一个文本注记元素
- 在码云上创建一个项目
- 给定一个有序数组,元素各不相同且升序排列,创建一个高度最小的二叉查找树
- c#创建静态类,在其中定义一个泛型方法,实现查找数组元素的功能
- 创建坐标系
- 动态创建的元素要想样式生效,必须先有一个原生的元素?
- 华为机试——字符串中出现次数最多的子串
- 用InterfaceBuilder构造一个App 、 视图控制器和视图 、 控件与事件
- OM:Over-ship Tolerance
- layer动画(二)
- poi 日期处理
- 元素树-创建特征-在一个边的中点创建一个坐标系
- iOS开发63-__block 和 __weak的区别
- Qt之拦截关闭窗口的QCloseEvent简单使用
- 导航栏透明且可下拉放大的个人中心
- 简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)
- 从僵尸网络追踪到入侵检测 第7章 使用Honeydstats日志服务
- spring activemq小试牛刀
- TCP 慢启动(slow start)报文观察
- jackson的使用方法(二)