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

效果:

 源码:
//有界平面
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. 学习Canvas绘图与动画基础 为多边形着色(三)

    1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...

  2. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  3. 你注意到了吗?修改API文档也需要规范!

    关于API接口文档的内容和格式规范的文章,之前也有写过,网上也有不少写的比我还好的,就不赘述了,今天想说的是一个很容易被忽略的点,修改API文档的规范:版本控制. 示例 拿Eolinker来演示一下流 ...

  4. Arduino+DS18b20+OLED Display

    DS18b20获取到温度数值保存到变量中,然后和天气图标还有滚动字幕一起发送到OLED 屏幕上显示 需要用到的库均可在Arduino库管理器下载. 电路图: 图中屏幕接线已在代码中写出,温度传感器da ...

  5. js实现倒计时函数

    function updateEndTime() { //当前时间,距1970年1月1日的秒数 var date = new Date(); var time = (date.getTime())/1 ...

  6. 谁动了我的 Linux?原来 history 可以这么强大!

    当我们频繁使用 Linux 命令行时,有效地使用历史记录,可以大大提高工作效率. 在平时 Linux 操作过程中,很多命令是重复的,你一定不希望大量输入重复的命令.如果你是系统管理员,你可能需要对用户 ...

  7. 计算机网络参考模型,IP地址及MAC地址查看方法,数据包封装过程

    分层思想 首先,计算机网络参考模型,是基于分层思想而出现的.分层思想,就是将复杂流程分解为几个功能单一的子过程. 优点: 可以让整个流程更加清晰, 让复杂问题简单化, 更容易发现问题,并真对性的解决问 ...

  8. svg web拓扑更新了,支持动态添加svg组件

    版本1.0请点此 预览地址 https://svg.yaolunmao.top 如何使用 # 克隆项目 git clone https://github.com/yaolunmao/vue-webto ...

  9. Can’t update table ‘xxx’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger

    MySQL: Solution for ERROR 1442 (HY000): Can't update table 'xxx' in stored function/trigger because ...

  10. [刷题] 46 Permutations

    要求 整型数组,每个元素不相同,返回元素所有排列的可能 示例 [1,2,3] [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路 树 ...