转载自 https://www.cnblogs.com/zzyfym/p/12090675.html
#include <uf.h> #include <uf_ui.h> #include <uf_trns.h> //设置class_dialog选择过滤 static int init_proc(UF_UI_selection_p_t select,void* user_data) { int num_triples = 1; //实体 片体 UF_UI_mask_t mask_triples[] = {UF_solid_type,0,0}; /* enable only lines and edges */ if((UF_UI_set_sel_mask(select,UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,num_triples, mask_triples)) == 0) { return (UF_UI_SEL_SUCCESS); } else { return (UF_UI_SEL_FAILURE); } } extern DllExport void ufsta( char *param, int *returnCode, int rlen ) { /* Initialize the API environment */ if( UF_CALL(UF_initialize()) ) { /* Failed to initialize */ return; } /* TODO: Add your application code here */ UF_initialize(); //select_with_class_dialog char message[]="类选择对话框"; char title[]="按类选择:"; int scope=UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY; int response=0; int count=0; tag_t* objects=NULL; //5943 double translation[3]={0.0,500.0,500.0}; double matrix_value[16]={0.0}; /* 绝对坐标系 的平移距离 translation[0] x向的距离 translation[1] y向的距离 translation[2] z向的距离 */ //5947 tag_t *objects_array=NULL; int move_or_copy=2;//1 - Move 2 - copy int dest_layer=0;//0 - the original layer, -1 - the work layer, 1 - 256 - the specified layer int trace_curves=2;//轨迹曲线状态1 means on, 2 means off. tag_t *copies=NULL;//这是当move_or_copy等于1(移动)时不使用。当move_or_copy为2(副本)时,应设置一个为空tag_t tag_t trace_curve_group=NULL;//当trace_curves=2时,此处设置为null int status_value=0; //多选对话框 UF_UI_select_with_class_dialog (message,title,scope,init_proc,NULL,&response,&count,&objects); //分配内存 objects_array=(tag_t*)malloc(sizeof(tag_t)*count); if (response == UF_UI_OK && count > 0) { for (int i=0; i<count; i++) { objects_array[i]=objects[i]; UF_DISP_set_highlight(objects[i], 0); } } //返回矩阵以执行线性变换,沿着 绝对坐标系 的X轴,Y轴和Z轴。 uf5943(translation,matrix_value); //分配内存 copies=(tag_t*)malloc(sizeof(tag_t)*count); //平移 uf5947(matrix_value,objects_array,&count,&move_or_copy,&dest_layer,&trace_curves,copies,&trace_curve_group,&status_value); //释放内存 free(copies); free(objects_array); /* 注意: 1.坐标系问题 注意平移变换 这个玩意是按 绝对坐标系 方向来的(坐标系不统一时先把坐标系统一) 2.注意内存的分配。 3.如果是有参数的体 经过 uf5947 平移变换后变成 去参后的体。 4.trace_curves 轨迹曲线状态 ps:我也不明白是什么意思,求大神什么解释 */ UF_terminate(); /* Terminate the API environment */ UF_CALL(UF_terminate()); } Caesar卢尚宇 2020年5月21日