NX二次开发-曲线或边分析函数
UF_EVAL_is_arc 判断是圆形曲线或边
UF_EVAL_ask_arc 圆形曲线或边分析,得到曲线或边的信息
类似的函数还有以下这些:
UF_EVAL_is_ellipse // 椭圆
UF_EVAL_ask_ellipse
UF_EVAL_is_hyperbola //双曲线
UF_EVAL_ask_hyperbola
UF_EVAL_is_line //直线
UF_EVAL_ask_line //起点终点长度
UF_EVAL_is_parabola //抛物线
UF_EVAL_ask_parabola
UF_EVAL_is_spline //样条曲线
UF_EVAL_ask_spline
下面以UF_EVAL_ask_arc 为例:
#include "Text.h" static int init_proc_select_edges(UF_UI_selection_p_t select, void *user_data) { int errorCode = 0; //只是选择面 int num_triples = 1; //选择类型 数量 UF_UI_mask_t mask_triples[] = { UF_solid_type,UF_solid_edge_subtype,1 }; //定义选择类型 errorCode = UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples); if (errorCode == 0) { return UF_UI_SEL_SUCCESS; } else { return UF_UI_SEL_FAILURE; } } int Text_UI_select_edges(vector<tag_t> *vecFaces) { //调用API char *message = "提示:选择边"; char *title = "标题:选择边"; int scope = UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY;//选取范围 int response; int count = 0; tag_p_t object; UF_UI_select_with_class_dialog(message, title, scope, init_proc_select_edges, NULL, &response, &count, &object); for (int i = 0; i < count; i++) { tag_t tagObj = object[i]; //取消高亮显示 UF_DISP_set_highlight(tagObj, 0); (*vecFaces).push_back(tagObj); } return 0; } extern DllExport void ufusr(char *param, int *returnCode, int rlen) { UF_initialize(); vector<tag_t> vecEdges; Text_UI_select_edges(&vecEdges); for (int i = 0; i < vecEdges.size(); i++) { UF_EVAL_p_t evaluator; UF_EVAL_initialize(vecEdges[i], &evaluator); //确定给定的数据是否来自圆形曲线或边缘 bool boolIsArc; UF_EVAL_is_arc(evaluator, &boolIsArc); if (boolIsArc) { //返回圆形曲线或边的数据 UF_EVAL_arc_t arc; UF_EVAL_ask_arc(evaluator, &arc);//arc结构体中有曲线的参数
//arc.center 圆弧中心,圆心
if (fabs(arc.limits[0]) < 0.001 && fabs(arc.limits[1] - 2 * PI) < 0.001) { bool boolVal = true;//此圆是整圆 } } } UF_terminate(); } extern int ufusr_ask_unload(void) { return (UF_UNLOAD_IMMEDIATELY); }