Исходники для Unigraphics NX Копирование точки из одной системы координат в другую систему координат


Добавил:DMT
Дата создания:5 апреля 2008, 22:08
Дата обновления:5 апреля 2008, 22:08
Просмотров:4388 последний позавчера, 17:06
Комментариев: 0

Копирование точки из одной системы координат в другую систему координат

Копирование точки из одной системы координат в ту же позицию, но в другую систему координат. Выбирается сначало одна CSYS, потом вторая, после этого выбирается точка. Координаты точки относительно первой системы координат преобразуются во вторую систему координат, тем самым координаты точки относительно первой и второй системы координат равны, но положение относительно абсолютной системы координат разное.
Код на C++
  1. static void PrintErrorMessage(int errorCode, int line)
  2. {
  3. if(errorCode)
  4. {
  5. char message[133];
  6.  
  7. UF_get_fail_message(errorCode,message);
  8. UF_UI_set_status(message);
  9. fprintf(prterr,"errorCode=%d\tmessage=%s\tline=%d\n",errorCode,message,line);
  10. fflush(prterr);
  11. errorCode=0;
  12. }
  13. }
  14.  
  15. int csys_init_proc(UF_UI_selection_p_t select, void* user_data)
  16. {
  17. int ret_code;
  18. int num_triples=1;
  19. UF_UI_mask_t mask_triples[]={UF_coordinate_system_type,0,0};
  20.  
  21. ret_code=UF_UI_set_sel_mask
  22. (select,UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,num_triples,mask_triples);
  23.  
  24. if(ret_code==0)
  25. return UF_UI_SEL_SUCCESS;
  26.  
  27. return UF_UI_SEL_FAILURE;
  28.  
  29. }
  30.  
  31. int point_init_proc(UF_UI_selection_p_t select, void* user_data)
  32. {
  33. int ret_code;
  34. int num_triples=1;
  35. UF_UI_mask_t mask_triples[]={UF_point_type,0,0};
  36.  
  37. ret_code=UF_UI_set_sel_mask
  38. (select,UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,num_triples,mask_triples);
  39.  
  40. if(ret_code==0)
  41. return UF_UI_SEL_SUCCESS;
  42.  
  43. return UF_UI_SEL_FAILURE;
  44.  
  45. }
  46.  
  47. void copy_point_csystocsys()
  48. {
  49.  
  50. tag_t csys1_tag;
  51. label_get_csys1:
  52. //
  53. {
  54. char* message="Выбери первую csys";
  55. char* title="Выбери первую csys";
  56. int scope=UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY;
  57. int response;
  58. tag_t object;
  59. double cursor[3];
  60. tag_t view;
  61.  
  62.  
  63. errorCode=UF_UI_select_with_single_dialog
  64. (message,title,scope,csys_init_proc,NULL,&response,&object,cursor,&view);PRTERR;
  65. switch(response)
  66. {
  67. case UF_UI_BACK:
  68. goto label_get_csys1;
  69.  
  70. case UF_UI_CANCEL:
  71. goto term;
  72.  
  73. case UF_UI_OK:
  74. break;
  75.  
  76. case UF_UI_OBJECT_SELECTED:
  77. break;
  78.  
  79. case UF_UI_OBJECT_SELECTED_BY_NAME:
  80. break;
  81. }
  82.  
  83.  
  84. if(object==NULL_TAG)
  85. {
  86. uc1601("Будьте любезны выбрать первую csys",1);
  87. goto label_get_csys1;
  88. }
  89.  
  90.  
  91. //set highlight off
  92. errorCode=UF_DISP_set_highlight(object,0);PRTERR;
  93.  
  94. csys1_tag=object;
  95.  
  96.  
  97. }
  98.  
  99. tag_t csys2_tag;
  100. label_get_csys2:
  101. //
  102. {
  103. char* message="Выбери вторую csys";
  104. char* title="Выбери вторую csys";
  105. int scope=UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY;
  106. int response;
  107. tag_t object;
  108. double cursor[3];
  109. tag_t view;
  110.  
  111.  
  112. errorCode=UF_UI_select_with_single_dialog
  113. (message,title,scope,csys_init_proc,NULL,&response,&object,cursor,&view);PRTERR;
  114. switch(response)
  115. {
  116. case UF_UI_BACK:
  117. goto label_get_csys1;
  118.  
  119. case UF_UI_CANCEL:
  120. goto term;
  121.  
  122. case UF_UI_OK:
  123. break;
  124.  
  125. case UF_UI_OBJECT_SELECTED:
  126. break;
  127.  
  128. case UF_UI_OBJECT_SELECTED_BY_NAME:
  129. break;
  130. }
  131.  
  132.  
  133. if(object==NULL_TAG)
  134. {
  135. uc1601("Будьте любезны выбрать вторую csys",1);
  136. goto label_get_csys2;
  137. }
  138.  
  139.  
  140. //set highlight off
  141. errorCode=UF_DISP_set_highlight(object,0);PRTERR;
  142.  
  143. csys2_tag=object;
  144.  
  145.  
  146. }
  147.  
  148. tag_t point_tag;
  149. label_get_point:
  150. //
  151. {
  152. char* message="Выбери точку";
  153. char* title="Выбери точку";
  154. int scope=UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY;
  155. int response;
  156. tag_t object;
  157. double cursor[3];
  158. tag_t view;
  159.  
  160.  
  161. errorCode=UF_UI_select_with_single_dialog
  162. (message,title,scope,point_init_proc,NULL,&response,&object,cursor,&view);PRTERR;
  163. switch(response)
  164. {
  165. case UF_UI_BACK:
  166. goto label_get_csys2;
  167.  
  168. case UF_UI_CANCEL:
  169. goto term;
  170.  
  171. case UF_UI_OK:
  172. break;
  173.  
  174. case UF_UI_OBJECT_SELECTED:
  175. break;
  176.  
  177. case UF_UI_OBJECT_SELECTED_BY_NAME:
  178. break;
  179. }
  180.  
  181.  
  182. if(object==NULL_TAG)
  183. {
  184. uc1601("Будьте любезны выбрать точку",1);
  185. goto label_get_point;
  186. }
  187.  
  188. //set highlight off
  189. errorCode=UF_DISP_set_highlight(object,0);PRTERR;
  190.  
  191. point_tag=object;
  192.  
  193. }
  194.  
  195. {
  196.  
  197. double from_origin[ 3 ];
  198. double from_x_axis[ 3 ];
  199. double from_y_axis[ 3 ];
  200. double to_origin[ 3 ];
  201. double to_x_axis[ 3 ];
  202. double to_y_axis[ 3 ];
  203. double mtx[ 16 ];
  204. tag_t matrix_id;
  205. double matrix_values[ 9 ];
  206.  
  207. double point_coords[3];
  208. tag_t point;
  209.  
  210. errorCode=UF_CSYS_ask_csys_info (csys1_tag,&matrix_id,from_origin);PRTERR;
  211.  
  212. errorCode=UF_CSYS_ask_matrix_values(matrix_id, matrix_values);PRTERR;
  213. UF_VEC3_copy(matrix_values+0,from_x_axis);
  214. UF_VEC3_copy(matrix_values+3,from_y_axis);
  215.  
  216. errorCode=UF_CSYS_ask_csys_info (csys2_tag,&matrix_id,to_origin);PRTERR;
  217.  
  218. errorCode=UF_CSYS_ask_matrix_values(matrix_id, matrix_values);PRTERR;
  219. UF_VEC3_copy(matrix_values+0,to_x_axis);
  220. UF_VEC3_copy(matrix_values+3,to_y_axis);
  221.  
  222. errorCode=UF_MTX4_csys_to_csys (from_origin,from_x_axis,from_y_axis,to_origin,to_x_axis,to_y_axis,mtx);PRTERR;
  223.  
  224. errorCode=UF_CURVE_ask_point_data (point_tag,point_coords);PRTERR;
  225.  
  226. UF_MTX4_vec3_multiply (point_coords,mtx,point_coords);
  227.  
  228. errorCode=UF_CURVE_create_point (point_coords,&point );PRTERR;
  229. }
  230.  
  231.  
  232. goto term;
  233. term:
  234. return;
  235. }
При использовании обязательна ссылка на http://DMTSoft.ru
up