选择零件实体加入到选择的操作里

  1 #include <stdarg.h>
  2 //#include <stdio.h>
  3 #include <uf.h>
  4 #include <uf_object_types.h>
  5 #include <uf_part.h>
  6 #include <uf_ui.h>
  7 #include <uf_ui_ont.h>
  8 #include <uf_disp.h>
  9 #include <uf_retiring.h>
 10 #include <uf_obj.h>
 11 #include <uf_cam.h>
 12 #include <uf_camgeom.h>
 13 #include <uf_param.h>
 14 #include <string.h>
 15 #include <vector>
 16 
 17 //#define  MAX_CAMGEOM   200
 18 
 19 static int init_proc_body(UF_UI_selection_p_t select, void *user_data);
 20 static void init_camgeom_app_data(UF_CAMGEOM_app_data_p_t app_data);
 21 
 22 void ugdebugep(int line, const char* format, ...)
 23 {
 24     static char buf[1024];
 25     va_list     ap;
 26 
 27     sprintf(buf, "(%03d)", line);
 28     UF_UI_open_listing_window();
 29     UF_UI_write_listing_window(buf);
 30     va_start(ap, format);
 31     vsprintf(buf, format, ap);
 32     
 33     va_end(ap);
 34     UF_UI_write_listing_window(buf);
 35     UF_UI_write_listing_window("
");
 36     
 37 }
 38 void pauseMsgbox(int line)
 39 {
 40     static char buf[16];
 41     sprintf(buf, "at line %d", line);
 42     uc1601(buf, 1);
 43 }
 44 #define  dp(...) ugdebugep(__LINE__ ,__VA_ARGS__);
 45 #define  markline ugdebugep(__LINE__ ,"at line");
 46 #define  dpause pauseMsgbox(__LINE__)
 47 
 48 
 49 static void do_camgeom_api(void)
 50 {
 51     //UF_CAMGEOM_app_data_p_t app_data_list[MAX_CAMGEOM] = { NULL };
 52     UF_CAMGEOM_app_data_p_t* app_data_list=NULL;
 53     tag_t                   *oper_tag = NULL , *entity_list = NULL;
 54     //entity_list[MAX_CAMGEOM] = { NULL_TAG };
 55     int                            i,entity_count = 0, oper_count = 0, err_code = 0, type = 0, subtype = 0;
 56     tag_t                   *entity_eid = NULL_TAG, view = NULL_TAG;
 57     logical                 auto_wall_selection = FALSE;
 58 
 59     //for (i = 0; i < MAX_CAMGEOM; i++) app_data_list[i] = NULL;
 60     if (UF_PART_ask_display_part() != null_tag)
 61     {        
 62         UF_UI_ONT_ask_selected_nodes(&oper_count, &oper_tag);        
 63         if (oper_count > 0)
 64         {
 65 
 66             
 67             
 68             char Cue[] = "选择";
 69             char Title[] = "功能测试";
 70             int Scope = UF_UI_SEL_SCOPE_NO_CHANGE;
 71             int Response, entity_count = 0;            
 72             UF_UI_select_with_class_dialog(Cue, Title, Scope, init_proc_body, NULL, &Response, &entity_count, &entity_eid);            
 73 
 74             //申请内存 
 75             app_data_list = new UF_CAMGEOM_app_data_p_t[entity_count];        
 76 
 77             
 78 
 79             for (size_t m = 0; m < entity_count; m++)
 80             {    
 81                 //entity_list[m] = entity_eid[m];
 82 
 83                 app_data_list[m] = new UF_CAMGEOM_app_data_t;
 84 
 85                 init_camgeom_app_data(app_data_list[m]);
 86 
 87                 UF_DISP_set_highlight(entity_eid[m], 0);
 88             
 89             }
 90 
 91             
 92 
 93             if (entity_count > 0)
 94             {
 95                 
 96                 for (i = 0; i < oper_count; i++)
 97                 {
 98                     
 99                     UF_OBJ_ask_type_and_subtype(oper_tag[i], &type, &subtype);
100                     if (type == UF_machining_operation_type)
101                     {                        
102                         UF_CAMGEOM_append_items(oper_tag[i], UF_CAM_part, entity_count, entity_eid, app_data_list);
103                     }
104                 }
105             }
106 
107             
108 
109             for (size_t m = 0; m < entity_count; m++)
110             {
111                 delete app_data_list[m];
112             }
113             delete []app_data_list;
114 
115             UF_free(entity_eid);
116         }
117     }
118 }
119 
120 static int init_proc_body(    UF_UI_selection_p_t select,    void* user_data)
121 {
122     int nums = 1;
123     UF_UI_mask_t masks[] = {     UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY };
124 
125     if ((UF_UI_set_sel_mask(select,    UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,    nums, masks)) == 0)
126     {
127         return (UF_UI_SEL_SUCCESS);
128     }
129     else
130     {
131         return (UF_UI_SEL_FAILURE);
132     }
133 }
134 
135 static void init_camgeom_app_data(UF_CAMGEOM_app_data_p_t app_data)
136 {
137     if (app_data)
138     {
139         app_data->has_stock = 0;
140         app_data->has_cut_stock = 0;
141         app_data->has_tolerances = 0;
142         app_data->has_feedrate = 0;
143         app_data->has_offset = 0;
144         app_data->has_avoidance_type = 0;
145         app_data->stock = 0.0;
146         app_data->cut_stock[0] = 0.0;
147         app_data->cut_stock[1] = 0.0;
148         app_data->cut_stock[2] = 0.0;
149         app_data->tolerances[0] = 0.0;
150         app_data->tolerances[1] = 0.0;
151         app_data->feedrate_unit = UF_CAM_feedrate_unit_per_minute;
152         app_data->feedrate_value = 10.0;
153         app_data->offset = 0.0;
154         app_data->avoidance_type = UF_CAM_avoidance_type_warning;
155     }
156 }
157 
158 
159 void ufusr(char *param, int *retcode, int param_len)
160 {
161     UF_initialize();
162 
163     do_camgeom_api();
164 
165     UF_terminate();
166 }
167 
168 int ufusr_ask_unload(void)
169 {
170     return (UF_UNLOAD_IMMEDIATELY);
171 }
172 /************************************************************/

特别感谢"梅子酱"同学的改进

原文地址:https://www.cnblogs.com/liuxiaoqing1/p/12869493.html