【NX二次开发】创建有界平面UF_MODL_create_bplane
先准备几条曲线如下图所示,我们用这几条线来创建一个有界平面:
效果:
- //有界平面
- extern DllExport void ufusr(char *param, int *returnCode, int rlen)
- {
- UF_initialize();
- uc1601("有界平面", 1);
- tag_t tagLine[6] = { 45888,46337,46215,46015,45057,45256 };
- UF_STRING_t generator;
- UF_STRING_p_t ge = &generator;
- UF_MODL_init_string_list(ge);
- int iqy = 2;//闭合环数量
- int iby = 6;//边缘总数
- UF_MODL_create_string_list(iqy, iby, ge);
- ge->id[0] = tagLine[0];
- ge->id[1] = tagLine[1];
- ge->id[2] = tagLine[2];
- ge->id[3] = tagLine[3];
- ge->id[4] = tagLine[4];
- ge->string[0] = 5;//第1条环有几条边
- ge->dir[0] = 1; //方向1、-1意义不大
- ge->id[5] = tagLine[5];
- ge->string[1] = 1; //第2条环有几条边
- ge->dir[1] = 1;
- double tol[3]; //公差
- tol[0] = 0.001;
- tol[1] = 0.5 * (PI / 180);
- tol[2] = 0.02;
- tag_t tagFace1 = 0;
- UF_MODL_create_bplane(ge, tol, &tagFace1);//有界平面
- UF_terminate();
- }
- extern int ufusr_ask_unload(void)
- {
- return (UF_UNLOAD_IMMEDIATELY);
- }
下面还有一个官方例子,我们先看效果:
源码:
- //有界平面
- #include <stdio.h>
- #include <string.h>
- #include <uf.h>
- #include <uf_modl.h>
- #include <uf_curve.h>
- #include <uf_part.h>
- #include <uf_csys.h>
- #define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
- static int report(char *file, int line, char *call, int irc)
- {
- if (irc)
- {
- char messg[133];
- printf("%s, line %d: %s\n", file, line, call);
- (UF_get_fail_message(irc, messg)) ?
- printf(" returned a %d\n", irc) :
- printf(" returned error %d: %s\n", irc, messg);
- }
- return(irc);
- }
- static void do_ugopen_api(void)
- {
- //有界平面边公差
- double tol[3];
- /* data points for objects in loops */
- static double points[45] = { 4.,-2.,0.,4.,4.,0.,-4.,4.,0.,-4.,
- -4.,0.,0.,-2.,0.,-2.,3.,0.,-3.,3.,0.,-3.,2.,0.,
- -2.,2.,0.,-2.,-1.,0.,2.,3.,0.,3.,3.,0.,3.,2.,0.,
- 2.,2.,0.,2.,3.,0. };
- static double startang = 0.0;
- static double endang = 6.28318530717958648;
- static double arcrad = 1.0;
- char prtnam[133];
- int loops[4];
- int numlps = 4;
- int units = 2;
- int arc = 1;
- int k, total;
- tag_t bpobj;
- tag_t part;
- tag_t objarray1[4];
- tag_t objarray2[3];
- tag_t objarray3, wcs_tag;
- tag_t objarray4[4];
- UF_STRING_t generator;
- UF_STRING_p_t ge = &generator;
- UF_CURVE_line_t line1;
- UF_CURVE_line_t line2;
- UF_CURVE_line_t line3;
- UF_CURVE_line_t line4;
- UF_CURVE_line_t line5;
- UF_CURVE_line_t line6;
- UF_CURVE_line_t line7;
- UF_CURVE_line_t line8;
- UF_CURVE_line_t line9;
- UF_CURVE_arc_t arc1;
- line1.start_point[0] = points[3];
- line1.start_point[1] = points[4];
- line1.start_point[2] = points[5];
- line1.end_point[0] = points[0];
- line1.end_point[1] = points[1];
- line1.end_point[2] = points[2];
- line2.start_point[0] = points[6];
- line2.start_point[1] = points[7];
- line2.start_point[2] = points[8];
- line2.end_point[0] = points[3];
- line2.end_point[1] = points[4];
- line2.end_point[2] = points[5];
- line3.start_point[0] = points[9];
- line3.start_point[1] = points[10];
- line3.start_point[2] = points[11];
- line3.end_point[0] = points[6];
- line3.end_point[1] = points[7];
- line3.end_point[2] = points[8];
- line4.start_point[0] = points[15];
- line4.start_point[1] = points[16];
- line4.start_point[2] = points[17];
- line4.end_point[0] = points[18];
- line4.end_point[1] = points[19];
- line4.end_point[2] = points[20];
- line5.start_point[0] = points[18];
- line5.start_point[1] = points[19];
- line5.start_point[2] = points[20];
- line5.end_point[0] = points[21];
- line5.end_point[1] = points[22];
- line5.end_point[2] = points[23];
- line6.start_point[0] = points[30];
- line6.start_point[1] = points[31];
- line6.start_point[2] = points[32];
- line6.end_point[0] = points[33];
- line6.end_point[1] = points[34];
- line6.end_point[2] = points[35];
- line7.start_point[0] = points[33];
- line7.start_point[1] = points[34];
- line7.start_point[2] = points[35];
- line7.end_point[0] = points[36];
- line7.end_point[1] = points[37];
- line7.end_point[2] = points[38];
- line8.start_point[0] = points[36];
- line8.start_point[1] = points[37];
- line8.start_point[2] = points[38];
- line8.end_point[0] = points[39];
- line8.end_point[1] = points[40];
- line8.end_point[2] = points[41];
- line9.start_point[0] = points[39];
- line9.start_point[1] = points[40];
- line9.start_point[2] = points[41];
- line9.end_point[0] = points[42];
- line9.end_point[1] = points[43];
- line9.end_point[2] = points[44];
- arc1.start_angle = startang;
- arc1.end_angle = endang;
- arc1.arc_center[0] = points[27];
- arc1.arc_center[1] = points[28];
- arc1.arc_center[2] = points[29];
- arc1.radius = arcrad;
- strcpy(prtnam, "bplane");
- uc1601("创建部件bplane.prt", 1);
- UF_CALL(UF_PART_new(prtnam, units, &part));
- UF_CALL(UF_CSYS_ask_wcs(&wcs_tag));
- UF_CALL(UF_CSYS_ask_matrix_of_object(wcs_tag, &arc1.matrix_tag));
- //为有界平面创建几何图形
- //1个外围回路和3个孔回路
- //创建外围边界环路 -- 3条线和1条弧线
- uc1601("创建外围环", 1);
- loops[0] = 4;
- UF_CALL(UF_CURVE_create_line(&line1, &objarray1[0]));
- UF_CALL(UF_CURVE_create_line(&line2, &objarray1[1]));
- UF_CALL(UF_CURVE_create_line(&line3, &objarray1[2]));
- //通过三个点创建一个弧
- uf5063(&arc, points, &points[12], &points[9], &objarray1[3]);
- //创建孔边界环路1 -- 2条线和1条弧线
- uc1601("创建内环1", 1);
- loops[1] = 3;
- UF_CALL(UF_CURVE_create_line(&line4, &objarray2[0]));
- UF_CALL(UF_CURVE_create_line(&line5, &objarray2[1]));
- (uf5063)(&arc, &points[21], &points[24], &points[15], &objarray2[2]);
- //创建孔边界环路2 -- 1个圆弧
- uc1601("创建内环2", 1);
- loops[2] = 1;
- UF_CALL(UF_CURVE_create_arc(&arc1, &objarray3));
- //创建孔边界环路2 -- 4条线
- uc1601("创建内环3", 1);
- loops[3] = 4;
- UF_CALL(UF_CURVE_create_line(&line6, &objarray4[0]));
- UF_CALL(UF_CURVE_create_line(&line7, &objarray4[1]));
- UF_CALL(UF_CURVE_create_line(&line8, &objarray4[2]));
- UF_CALL(UF_CURVE_create_line(&line9, &objarray4[3]));
- UF_MODL_init_string_list(ge);
- UF_MODL_create_string_list(numlps, 12, ge);
- //将数据存储到字符串列表结构中
- total = 0;
- ge->string[0] = loops[0];
- ge->dir[0] = 1;
- for (k = 0; k < loops[0]; k++) ge->id[total++] = objarray1[k];
- ge->string[1] = loops[1];
- ge->dir[1] = -1;
- for (k = 0; k < loops[1]; k++) ge->id[total++] = objarray2[k];
- ge->string[2] = loops[2];
- ge->dir[2] = 1;
- ge->id[total++] = objarray3;
- ge->string[3] = loops[3];
- ge->dir[3] = -1;
- for (k = 0; k < loops[3]; k++) ge->id[total++] = objarray4[k];
- if (total != 12) printf("Error in total value!\n");
- tol[0] = .001;
- tol[1] = .5 * (PI / 180);
- tol[2] = .02;
- //创建有界平面
- uc1601("创建有界平面1", 1);
- UF_CALL(UF_MODL_create_bplane(ge, tol, &bpobj));
- UF_MODL_free_string_list(ge);
- }
- void ufusr(char *param, int *retcode, int paramLen)
- {
- if (!UF_CALL(UF_initialize()))
- {
- do_ugopen_api();
- UF_CALL(UF_terminate());
- }
- }
- int ufusr_ask_unload(void)
- {
- return (UF_UNLOAD_IMMEDIATELY);
- }
【NX二次开发】创建有界平面UF_MODL_create_bplane的更多相关文章
- NX二次开发-创建(临时)坐标系
函数:UF_CSYS_create_csys() . UF_CSYS_create_temp_csys() 函数说明:创建坐标系 .创建临时坐标系 用法: #include <uf.h> ...
- NX二次开发-创建NX9 NXOpenCPP Wizard开发向导模板
这篇文章,我在CSDN,在唐工论坛都发过.http://www.nxopen.cn/forum.php?mod=viewthread&tid=2039&highlight=NX9 博客 ...
- NX二次开发-创建圆弧(圆心-半径)UF_CURVE_create_arc_center_radius
NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> UF_initializ ...
- NX二次开发-创建旋转UF_MODL_create_revolved
NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> UF_initializ ...
- NX二次开发-创建功能区工具栏UF_UI_create_ribbon
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- NX二次开发-创建经典工具栏UF_UI_create_toolbar
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- NX二次开发-创建一个3 x 3矩阵UF_CSYS_create_matrix
1 NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initializ ...
- NX二次开发-创建CSYS坐标系UF_CSYS_create_csys
NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initialize( ...
- NX二次开发-创建临时坐标系UF_CSYS_create_temp_csys
NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initialize( ...
随机推荐
- 0803-PyTorch的Debug指南
0803-PyTorch的Debug指南 目录 一.ipdb 介绍 二.ipdb 的使用 三.在 PyTorch 中 Debug 四. 通过PyTorch实现项目中容易遇到的问题 五.第八章总结 py ...
- 40 图 |我用 Mac M1 玩转 Spring Cloud
我的开源 Spring Cloud 项目 PassJava 一直可以在 Windows 上正常运行,最近不是换 Mac M1 了么,想把这个项目在 M1 上跑起来,毕竟我的那台 Windows 用起来 ...
- ATK&CK红队评估实战靶场 (一)的搭建和模拟攻击过程全过程
介绍及环境搭建 靶机地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2 官方靶机说明: 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练 ...
- JDBC相关配置和操作
获取数据库连接的几种方式 ps.数据库URL : String url = "jdbc:mysql://localhost:3306/dailytext?useSSL=false&s ...
- 序列化-JDK自带Serializable
如下代码示例:实现了Serializable接口(强制)的类,可以通过ObjectOutputStream的writeObject()方法转为字节流. 字节流通过ObjectInputStream的r ...
- (转)解决c#自带的HttpClient(Http.GetFromJsonAsync Http.GetStringAsync等)返回中文乱码问题
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var aa = await Http.GetByteArrayAsync ...
- JPEG头部解析
6.3 JPEG格式 6.3.1简介 微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分.正序存放就是高字节存放在前低字节在后,而逆序存放就是低字 ...
- Flink使用二次聚合实现TopN计算-乱序数据
一.背景说明: 在上篇文章实现了TopN计算,但是碰到迟到数据则会无法在当前窗口计算,需要对其中的键控状态优化 Flink使用二次聚合实现TopN计算 本次需求是对数据进行统计,要求每隔5秒,输出最近 ...
- k8s创建资源的两种方式及DaemonSet应用(5)
一.创建方式分类 Kubernetes 支持两种方式创建资源: (1)用 kubectl 命令直接创建,比如: kubectl run httpd-app --image=reg.yunwei.com ...
- Linux进阶之软件管理
本节内容 一.rpm:管理linux软件程序的 特点:安装方便 不能解决依赖关系 1.安装软件: -i: -v: -h: rpm -ivh 包名 2.卸载软件 -e: 清楚 rpm -e 程序名 3. ...