先准备几条曲线如下图所示,我们用这几条线来创建一个有界平面:

效果:

 源码:
  1. //有界平面
  2. extern DllExport void ufusr(char *param, int *returnCode, int rlen)
  3. {
  4. UF_initialize();
  5. uc1601("有界平面", 1);
  6. tag_t tagLine[6] = { 45888,46337,46215,46015,45057,45256 };
  7.  
  8. UF_STRING_t generator;
  9. UF_STRING_p_t ge = &generator;
  10. UF_MODL_init_string_list(ge);
  11. int iqy = 2;//闭合环数量
  12. int iby = 6;//边缘总数
  13. UF_MODL_create_string_list(iqy, iby, ge);
  14.  
  15. ge->id[0] = tagLine[0];
  16. ge->id[1] = tagLine[1];
  17. ge->id[2] = tagLine[2];
  18. ge->id[3] = tagLine[3];
  19. ge->id[4] = tagLine[4];
  20. ge->string[0] = 5;//第1条环有几条边
  21. ge->dir[0] = 1; //方向1、-1意义不大
  22.  
  23. ge->id[5] = tagLine[5];
  24. ge->string[1] = 1; //第2条环有几条边
  25. ge->dir[1] = 1;
  26.  
  27. double tol[3]; //公差
  28. tol[0] = 0.001;
  29. tol[1] = 0.5 * (PI / 180);
  30. tol[2] = 0.02;
  31.  
  32. tag_t tagFace1 = 0;
  33. UF_MODL_create_bplane(ge, tol, &tagFace1);//有界平面
  34.  
  35. UF_terminate();
  36. }
  37.  
  38. extern int ufusr_ask_unload(void)
  39. {
  40. return (UF_UNLOAD_IMMEDIATELY);
  41. }

下面还有一个官方例子,我们先看效果:

 源码:

  1. //有界平面
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <uf.h>
  5. #include <uf_modl.h>
  6. #include <uf_curve.h>
  7. #include <uf_part.h>
  8. #include <uf_csys.h>
  9.  
  10. #define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
  11.  
  12. static int report(char *file, int line, char *call, int irc)
  13. {
  14. if (irc)
  15. {
  16. char messg[133];
  17. printf("%s, line %d: %s\n", file, line, call);
  18. (UF_get_fail_message(irc, messg)) ?
  19. printf(" returned a %d\n", irc) :
  20. printf(" returned error %d: %s\n", irc, messg);
  21. }
  22. return(irc);
  23. }
  24.  
  25. static void do_ugopen_api(void)
  26. {
  27. //有界平面边公差
  28. double tol[3];
  29. /* data points for objects in loops */
  30. static double points[45] = { 4.,-2.,0.,4.,4.,0.,-4.,4.,0.,-4.,
  31. -4.,0.,0.,-2.,0.,-2.,3.,0.,-3.,3.,0.,-3.,2.,0.,
  32. -2.,2.,0.,-2.,-1.,0.,2.,3.,0.,3.,3.,0.,3.,2.,0.,
  33. 2.,2.,0.,2.,3.,0. };
  34. static double startang = 0.0;
  35. static double endang = 6.28318530717958648;
  36. static double arcrad = 1.0;
  37. char prtnam[133];
  38. int loops[4];
  39. int numlps = 4;
  40. int units = 2;
  41. int arc = 1;
  42. int k, total;
  43. tag_t bpobj;
  44. tag_t part;
  45. tag_t objarray1[4];
  46. tag_t objarray2[3];
  47. tag_t objarray3, wcs_tag;
  48. tag_t objarray4[4];
  49. UF_STRING_t generator;
  50. UF_STRING_p_t ge = &generator;
  51.  
  52. UF_CURVE_line_t line1;
  53. UF_CURVE_line_t line2;
  54. UF_CURVE_line_t line3;
  55. UF_CURVE_line_t line4;
  56. UF_CURVE_line_t line5;
  57. UF_CURVE_line_t line6;
  58. UF_CURVE_line_t line7;
  59. UF_CURVE_line_t line8;
  60. UF_CURVE_line_t line9;
  61. UF_CURVE_arc_t arc1;
  62.  
  63. line1.start_point[0] = points[3];
  64. line1.start_point[1] = points[4];
  65. line1.start_point[2] = points[5];
  66. line1.end_point[0] = points[0];
  67. line1.end_point[1] = points[1];
  68. line1.end_point[2] = points[2];
  69.  
  70. line2.start_point[0] = points[6];
  71. line2.start_point[1] = points[7];
  72. line2.start_point[2] = points[8];
  73. line2.end_point[0] = points[3];
  74. line2.end_point[1] = points[4];
  75. line2.end_point[2] = points[5];
  76.  
  77. line3.start_point[0] = points[9];
  78. line3.start_point[1] = points[10];
  79. line3.start_point[2] = points[11];
  80. line3.end_point[0] = points[6];
  81. line3.end_point[1] = points[7];
  82. line3.end_point[2] = points[8];
  83.  
  84. line4.start_point[0] = points[15];
  85. line4.start_point[1] = points[16];
  86. line4.start_point[2] = points[17];
  87. line4.end_point[0] = points[18];
  88. line4.end_point[1] = points[19];
  89. line4.end_point[2] = points[20];
  90.  
  91. line5.start_point[0] = points[18];
  92. line5.start_point[1] = points[19];
  93. line5.start_point[2] = points[20];
  94. line5.end_point[0] = points[21];
  95. line5.end_point[1] = points[22];
  96. line5.end_point[2] = points[23];
  97.  
  98. line6.start_point[0] = points[30];
  99. line6.start_point[1] = points[31];
  100. line6.start_point[2] = points[32];
  101. line6.end_point[0] = points[33];
  102. line6.end_point[1] = points[34];
  103. line6.end_point[2] = points[35];
  104.  
  105. line7.start_point[0] = points[33];
  106. line7.start_point[1] = points[34];
  107. line7.start_point[2] = points[35];
  108. line7.end_point[0] = points[36];
  109. line7.end_point[1] = points[37];
  110. line7.end_point[2] = points[38];
  111.  
  112. line8.start_point[0] = points[36];
  113. line8.start_point[1] = points[37];
  114. line8.start_point[2] = points[38];
  115. line8.end_point[0] = points[39];
  116. line8.end_point[1] = points[40];
  117. line8.end_point[2] = points[41];
  118.  
  119. line9.start_point[0] = points[39];
  120. line9.start_point[1] = points[40];
  121. line9.start_point[2] = points[41];
  122. line9.end_point[0] = points[42];
  123. line9.end_point[1] = points[43];
  124. line9.end_point[2] = points[44];
  125.  
  126. arc1.start_angle = startang;
  127. arc1.end_angle = endang;
  128. arc1.arc_center[0] = points[27];
  129. arc1.arc_center[1] = points[28];
  130. arc1.arc_center[2] = points[29];
  131. arc1.radius = arcrad;
  132.  
  133. strcpy(prtnam, "bplane");
  134. uc1601("创建部件bplane.prt", 1);
  135. UF_CALL(UF_PART_new(prtnam, units, &part));
  136. UF_CALL(UF_CSYS_ask_wcs(&wcs_tag));
  137. UF_CALL(UF_CSYS_ask_matrix_of_object(wcs_tag, &arc1.matrix_tag));
  138.  
  139. //为有界平面创建几何图形
  140. //1个外围回路和3个孔回路
  141. //创建外围边界环路 -- 3条线和1条弧线
  142. uc1601("创建外围环", 1);
  143. loops[0] = 4;
  144. UF_CALL(UF_CURVE_create_line(&line1, &objarray1[0]));
  145. UF_CALL(UF_CURVE_create_line(&line2, &objarray1[1]));
  146. UF_CALL(UF_CURVE_create_line(&line3, &objarray1[2]));
  147. //通过三个点创建一个弧
  148. uf5063(&arc, points, &points[12], &points[9], &objarray1[3]);
  149.  
  150. //创建孔边界环路1 -- 2条线和1条弧线
  151. uc1601("创建内环1", 1);
  152. loops[1] = 3;
  153. UF_CALL(UF_CURVE_create_line(&line4, &objarray2[0]));
  154. UF_CALL(UF_CURVE_create_line(&line5, &objarray2[1]));
  155. (uf5063)(&arc, &points[21], &points[24], &points[15], &objarray2[2]);
  156.  
  157. //创建孔边界环路2 -- 1个圆弧
  158. uc1601("创建内环2", 1);
  159. loops[2] = 1;
  160. UF_CALL(UF_CURVE_create_arc(&arc1, &objarray3));
  161.  
  162. //创建孔边界环路2 -- 4条线
  163. uc1601("创建内环3", 1);
  164. loops[3] = 4;
  165. UF_CALL(UF_CURVE_create_line(&line6, &objarray4[0]));
  166. UF_CALL(UF_CURVE_create_line(&line7, &objarray4[1]));
  167. UF_CALL(UF_CURVE_create_line(&line8, &objarray4[2]));
  168. UF_CALL(UF_CURVE_create_line(&line9, &objarray4[3]));
  169.  
  170. UF_MODL_init_string_list(ge);
  171. UF_MODL_create_string_list(numlps, 12, ge);
  172.  
  173. //将数据存储到字符串列表结构中
  174. total = 0;
  175. ge->string[0] = loops[0];
  176. ge->dir[0] = 1;
  177. for (k = 0; k < loops[0]; k++) ge->id[total++] = objarray1[k];
  178. ge->string[1] = loops[1];
  179. ge->dir[1] = -1;
  180. for (k = 0; k < loops[1]; k++) ge->id[total++] = objarray2[k];
  181. ge->string[2] = loops[2];
  182. ge->dir[2] = 1;
  183. ge->id[total++] = objarray3;
  184. ge->string[3] = loops[3];
  185. ge->dir[3] = -1;
  186. for (k = 0; k < loops[3]; k++) ge->id[total++] = objarray4[k];
  187. if (total != 12) printf("Error in total value!\n");
  188. tol[0] = .001;
  189. tol[1] = .5 * (PI / 180);
  190. tol[2] = .02;
  191.  
  192. //创建有界平面
  193. uc1601("创建有界平面1", 1);
  194. UF_CALL(UF_MODL_create_bplane(ge, tol, &bpobj));
  195. UF_MODL_free_string_list(ge);
  196.  
  197. }
  198.  
  199. void ufusr(char *param, int *retcode, int paramLen)
  200. {
  201. if (!UF_CALL(UF_initialize()))
  202. {
  203. do_ugopen_api();
  204. UF_CALL(UF_terminate());
  205. }
  206. }
  207.  
  208. int ufusr_ask_unload(void)
  209. {
  210. return (UF_UNLOAD_IMMEDIATELY);
  211. }

【NX二次开发】创建有界平面UF_MODL_create_bplane的更多相关文章

  1. NX二次开发-创建(临时)坐标系

    函数:UF_CSYS_create_csys() . UF_CSYS_create_temp_csys() 函数说明:创建坐标系 .创建临时坐标系 用法: #include <uf.h> ...

  2. NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板

    这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...

  3. NX二次开发-创建圆弧(圆心-半径)UF_CURVE_create_arc_center_radius

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> UF_initializ ...

  4. NX二次开发-创建旋转UF_MODL_create_revolved

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> UF_initializ ...

  5. NX二次开发-创建功能区工具栏UF_UI_create_ribbon

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  6. NX二次开发-创建经典工具栏UF_UI_create_toolbar

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  7. NX二次开发-创建一个3 x 3矩阵UF_CSYS_create_matrix

    1 NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initializ ...

  8. NX二次开发-创建CSYS坐标系UF_CSYS_create_csys

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initialize( ...

  9. NX二次开发-创建临时坐标系UF_CSYS_create_temp_csys

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initialize( ...

随机推荐

  1. 0803-PyTorch的Debug指南

    0803-PyTorch的Debug指南 目录 一.ipdb 介绍 二.ipdb 的使用 三.在 PyTorch 中 Debug 四. 通过PyTorch实现项目中容易遇到的问题 五.第八章总结 py ...

  2. 40 图 |我用 Mac M1 玩转 Spring Cloud

    我的开源 Spring Cloud 项目 PassJava 一直可以在 Windows 上正常运行,最近不是换 Mac M1 了么,想把这个项目在 M1 上跑起来,毕竟我的那台 Windows 用起来 ...

  3. ATK&CK红队评估实战靶场 (一)的搭建和模拟攻击过程全过程

    介绍及环境搭建 靶机地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2 官方靶机说明: 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练 ...

  4. JDBC相关配置和操作

    获取数据库连接的几种方式 ps.数据库URL : String url = "jdbc:mysql://localhost:3306/dailytext?useSSL=false&s ...

  5. 序列化-JDK自带Serializable

    如下代码示例:实现了Serializable接口(强制)的类,可以通过ObjectOutputStream的writeObject()方法转为字节流. 字节流通过ObjectInputStream的r ...

  6. (转)解决c#自带的HttpClient(Http.GetFromJsonAsync Http.GetStringAsync等)返回中文乱码问题

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var aa = await Http.GetByteArrayAsync ...

  7. JPEG头部解析

    6.3 JPEG格式       6.3.1简介  微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分.正序存放就是高字节存放在前低字节在后,而逆序存放就是低字 ...

  8. Flink使用二次聚合实现TopN计算-乱序数据

    一.背景说明: 在上篇文章实现了TopN计算,但是碰到迟到数据则会无法在当前窗口计算,需要对其中的键控状态优化 Flink使用二次聚合实现TopN计算 本次需求是对数据进行统计,要求每隔5秒,输出最近 ...

  9. k8s创建资源的两种方式及DaemonSet应用(5)

    一.创建方式分类 Kubernetes 支持两种方式创建资源: (1)用 kubectl 命令直接创建,比如: kubectl run httpd-app --image=reg.yunwei.com ...

  10. Linux进阶之软件管理

    本节内容 一.rpm:管理linux软件程序的 特点:安装方便 不能解决依赖关系 1.安装软件: -i: -v: -h: rpm -ivh 包名 2.卸载软件 -e: 清楚 rpm -e 程序名 3. ...