NX二次开发-UFUN获取投影曲线里的曲线UF_MODL_ask_proj_curves

Posted nxopen2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NX二次开发-UFUN获取投影曲线里的曲线UF_MODL_ask_proj_curves相关的知识,希望对你有一定的参考价值。

  1 NX11+VS2013
  2 
  3 #include <uf.h>
  4 #include <uf_modl.h>
  5 #include <uf_curve.h>
  6 #include <uf_obj.h>
  7 
  8 
  9 
 10     
 11 UF_initialize();
 12 
 13 //创建四条直线
 14 UF_CURVE_line_t Line_coords1;
 15 Line_coords1.start_point[0] = 0.0;
 16 Line_coords1.start_point[1] = 0.0;
 17 Line_coords1.start_point[2] = 0.0;
 18 Line_coords1.end_point[0] = 10.0;
 19 Line_coords1.end_point[1] = 0.0;
 20 Line_coords1.end_point[2] = 0.0;
 21 tag_t LineTag[4];
 22 UF_CURVE_create_line(&Line_coords1, &LineTag[0]);
 23 
 24 UF_CURVE_line_t Line_coords2;
 25 Line_coords2.start_point[0] = 10.0;
 26 Line_coords2.start_point[1] = 0.0;
 27 Line_coords2.start_point[2] = 0.0;
 28 Line_coords2.end_point[0] = 10.0;
 29 Line_coords2.end_point[1] = 10.0;
 30 Line_coords2.end_point[2] = 0.0;
 31 UF_CURVE_create_line(&Line_coords2, &LineTag[1]);
 32 
 33 UF_CURVE_line_t Line_coords3;
 34 Line_coords3.start_point[0] = 10.0;
 35 Line_coords3.start_point[1] = 10.0;
 36 Line_coords3.start_point[2] = 0.0;
 37 Line_coords3.end_point[0] = 0.0;
 38 Line_coords3.end_point[1] = 10.0;
 39 Line_coords3.end_point[2] = 0.0;
 40 UF_CURVE_create_line(&Line_coords3, &LineTag[2]);
 41 
 42 UF_CURVE_line_t Line_coords4;
 43 Line_coords4.start_point[0] = 0.0;
 44 Line_coords4.start_point[1] = 10.0;
 45 Line_coords4.start_point[2] = 0.0;
 46 Line_coords4.end_point[0] = 0.0;
 47 Line_coords4.end_point[1] = 0.0;
 48 Line_coords4.end_point[2] = 0.0;
 49 UF_CURVE_create_line(&Line_coords4, &LineTag[3]);
 50 
 51 //创建块
 52 UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔
 53 double Corner_pt[3] = { -50.0, -50.0, -110.0 };//设置原点
 54 char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高
 55 tag_t BlkTag = NULL_TAG;
 56 UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);
 57 
 58 //特征找面
 59 uf_list_p_t faceList;
 60 UF_MODL_ask_feat_faces(BlkTag, &faceList);
 61 
 62 //获得链表的数量
 63 int count = 0;
 64 UF_MODL_ask_list_count(faceList, &count);
 65 
 66 tag_t redFaceTag = NULL_TAG;
 67 for (int i = 0; i < count; i++)
 68 {
 69     //获取链表里的每个tag
 70     tag_t faceTag = NULL_TAG;
 71     UF_MODL_ask_list_item(faceList, i, &faceTag);
 72 
 73     //获得每个面的原点
 74     int Type;
 75     double Point[3];
 76     double Dir[3];
 77     double Box[6];
 78     double Radius[3];
 79     double RadData[3];
 80     int NormDir;
 81     UF_MODL_ask_face_data(faceTag, &Type, Point, Dir, Box, Radius, RadData, &NormDir);
 82 
 83     //找到距离为10的面(块的顶面)
 84     if (fabs(fabs(Point[2]) - 10) < 0.001)
 85     {
 86         //设置颜色
 87         UF_OBJ_set_color(faceTag, 186);
 88         redFaceTag = faceTag;
 89     }
 90 }
 91 
 92 
 93 //创建曲线链表
 94 uf_list_p_t curve_refs;
 95 UF_MODL_create_list(&curve_refs);
 96 //向链表中添加对象
 97 uf_list_p_t face1_refs;
 98 for (int i = 0; i < 4; i++)
 99 {
100     UF_MODL_put_list_item(curve_refs, LineTag[i]);
101 }
102     
103 //创建面链表
104 UF_MODL_create_list(&face1_refs);
105 UF_MODL_put_list_item(face1_refs, redFaceTag);
106 
107 
108 //创建投影曲线
109 int along_face = 0;//0 =使用投影向量(proj_vector),1 =使用面法线
110 double proj_vector[3] = { 0.0, 0.0, -1.0 };//投影的向量方向
111 tag_t proj1tag = NULL_TAG;
112 UF_MODL_create_proj_curves(curve_refs, face1_refs, along_face, proj_vector, &proj1tag);
113 
114 
115 //方法1
116 //获取投影曲线里的曲线
117 uf_list_p_t uf_curve_refs;
118 UF_MODL_ask_proj_curves(proj1tag, &uf_curve_refs);
119 
120 //获得链表的数量
121 int curveCount = 0;
122 UF_MODL_ask_list_count(uf_curve_refs, &curveCount);
123 
124 for (int i = 0; i < curveCount; i++)
125 {
126     //获取链表里的每个tag
127     tag_t curveTag = NULL_TAG;
128     UF_MODL_ask_list_item(uf_curve_refs, i, &curveTag);
129 
130     //设置颜色
131     UF_OBJ_set_color(curveTag, 136);
132 }
133 
134 ////方法2
135 //int n_curve_refs = 0;
136 //tag_t *curve_refsTag = NULL_TAG;
137 //UF_CURVE_ask_proj_curves(proj1tag, &n_curve_refs, &curve_refsTag);
138 
139 //for (int i = 0; i < n_curve_refs; i++)
140 //{
141 //    //设置颜色
142 //    UF_OBJ_set_color(curve_refsTag[i], 136);
143 //}
144 
145 //删除链表
146 UF_MODL_delete_list(&uf_curve_refs);
147 UF_MODL_delete_list(&curve_refs);
148 UF_MODL_delete_list(&face1_refs);
149 UF_MODL_delete_list(&faceList);
150 
151 UF_terminate();
152 
153 caesar卢尚宇
154 2020年2月29日

技术图片

以上是关于NX二次开发-UFUN获取投影曲线里的曲线UF_MODL_ask_proj_curves的主要内容,如果未能解决你的问题,请参考以下文章

nx二次开发怎么判断选择的曲线是不是有缝隙

UG NX二次开发(C#)-曲线-创建样条曲线的几种方法

UG NX二次开发(C#)-曲线-创建样条曲线的几种方法

NX二次开发-UFUN获得两条曲线的交点UF_MODL_intersect_curve_to_curve

UG NX二次开发(C#)-曲线-用AssociativeLineBuilder创建智能直线

UG NX二次开发(C#)-曲线-用AssociativeLineBuilder创建智能直线