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

效果:

 源码:
//有界平面
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的更多相关文章

  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. Swift系列一 - 数据类型

    如果你习惯了OC的语法,第一次接触Swift的语法可能会有点抗拒,因为Swift的语法有点怪.但如果你有前端的基础,学Swift可能会有点吃力,如果你有C++的基础可能会学得比较快点.不管你有什么样的 ...

  2. 初探SQL注入需要知道的5个问题

    SQL注入产生原理 可控变量(注入点,就是传参) 带入数据库查询 变量未存在过滤或过滤不严谨 例子: 获取admin表的pass里面的数据 select * from users where id=1 ...

  3. Python视频压缩

    html, body { font-family: "SF UI Display", ".PingFang SC", "PingFang SC&quo ...

  4. 联想R720Y空间问题

    由于之前Y空间在启动项中,所以将他关闭,这次想找到他却找不到 备注:因为在解决问题前,没有把图片保存下来,所以下面用一个颜色框挡住,表示之前的效果 第一个问题 在电脑上找到Y空间 百度上很多说在开始中 ...

  5. .NET Core 基于 Grafana Loki 日志初体验

    介绍 Loki: like Prometheus, but for logs. Loki是一个轻量级的日志系统,受到Prometheus项目的启发,由Grafana团队设计和开发,所以在Grafana ...

  6. DOM 绑定事件

    // 1.获取事件源 var oDiv = document.getElementById('box'); console.log(oDiv); //2.事件 (1)直接绑定匿名函数 oDiv.onc ...

  7. 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍

    目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...

  8. [Java]数据分析--聚类

    距离度量 需求:计算两点间的欧几里得距离.曼哈顿距离.切比雪夫距离.堪培拉距离 实现:利用commons.math3库相应函数 1 import org.apache.commons.math3.ml ...

  9. 使用CSS设置边框和背景

    一.设置边框 1.边框样式 属性 说明 border-width 设置边框的宽度 boder-style 设置边框的样式 border-color 设置边框的颜色 a.border-width属性 自 ...

  10. vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

    vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 打开编辑,修改如下内容: BOOTPROTO=static #默认dhcp,改为static,表示启用静态 ...