查看: 3911|回复: 1

[资料分享] PLM之家NX二次开发:第二次课后附加作业

 火 [复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2014-11-24 07:57:59 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×
•使用ufun完成以下功能
7 ^! ]% u. ]4 Z9 e

使用ufun完成以下功能 新建一个部件文件,比如:c:\plmhome.prt 在部件中创建一个圆柱体,通过圆柱体创建圆 ...

使用ufun完成以下功能 新建一个部件文件,比如:c:\plmhome.prt 在部件中创建一个圆柱体,通过圆柱体创建圆 ...
, s9 J/ k9 X- I& |7 u" [
. n1 _) v( B0 j+ e8 j, G
1.新建一个部件文件,比如:c:\plmhome.prt
% D2 ]& \, R' u6 z# o6 ?2.在部件中创建一个圆柱体,通过圆柱体创建圆柱体的中心线
' ~6 y9 O4 u1 t, E" P8 A- D3.查询中心线的起点和终点,并输出到信息窗口
# |2 ?, U2 h5 P4.保存部件
! O$ h$ z6 Z" c" {5.关闭部件
7 k4 s9 N( B1 V7 t7 N& `) R' a/ @4 j5 ]& F0 y' k% |
•提示:使用到的函数: 2 ]  m4 n& D9 w# k: |, @
UF_PART_new,UF_PART_save,UF_PART_close_all
UF_MODL_create_cyl1,uf_curve_create_line,uf_curve_ask_line,UF_UI_open_listing_window,UF_UI_write_listing_window
- G' x+ n( c( W7 U6 o; I3 G

1 w, C2 P3 n# L2 a& ^9 p$ q8 e, J9 m8 J/ {  L! W0 j

  H( c: v/ W* Z: z* q2 Z
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

0

主题

39

回帖

331

积分

培训VIP会员

积分
331
发表于 2014-11-26 07:50:53 | 显示全部楼层
tag_t newPartTag = NULL_TAG;0 b) S. |% Z1 O! H) g' V
        tag_t cylTag = NULL_TAG;
- R) V5 n$ Q: E% [3 g        tag_t bodyTag = NULL_TAG;, z7 u- f" R1 N0 x
        double cylOrigin[3] = {20, 30, 40};. U% ^& A' s8 `
        char cylDiam[256] = "50";
9 H* Q$ N1 J  E" y/ \* x  [$ Z        double cylDirection[3] = {0, 0 ,1};
* D' f& o  j( Q. p* n        double height = 60;2 s4 \! m/ A8 u+ M$ f) N; @
       
% r2 }7 a: X9 N. q+ G; B) G
, P+ S8 V/ o  L& s        char cylHeight[256];4 P$ I0 O2 f+ o% O9 I5 d0 j7 O
        sprintf_s(cylHeight, sizeof(cylHeight), "%f", height);
8 T6 b6 U0 O+ H9 x0 K        //创建part
3 A  u% G8 M4 {( J# U        UF_CALL(UF_PART_new("D:\\leaf.part", 1, &newPartTag));' `, D9 E! J& s( |
        //创建圆柱
5 E/ f7 c1 O! [& S: R. X4 Z" J        UF_CALL(UF_MODL_create_cyl1(UF_NULLSIGN, cylOrigin, cylHeight, cylDiam, cylDirection, &cylTag));
1 H7 \/ i6 g: i  v* [3 C  X: v* w2 b        //获取圆柱特征所在的体
4 l# _/ j" B6 S- |  j) U        UF_CALL(UF_MODL_ask_feat_body(cylTag,&bodyTag));
. n! [) t5 T5 J1 H" }        //获取体上的边
! M3 y1 j: D$ U! t        uf_list_p_t edge_list ;
- D5 ?, f+ v3 H6 Y        UF_CALL(UF_MODL_ask_body_edges(bodyTag, &edge_list));* \) F' v' @( z' |
        //得到边的数量
( c6 d6 v% H5 h. u) e        int edgeCount = 0;4 W: m: m7 P! \( `
        UF_CALL(UF_MODL_ask_list_count(edge_list, &edgeCount));
/ {4 W( ]( ^; [. {9 k( l( K        //打印边的数量1 W& [! y! u- m
        char cCount[256];
1 m) x/ n; w' u  a3 p        sprintf_s(cCount, sizeof(cCount), "cylinder实体上的边的数量:%d",  edgeCount);
; ]# X: v! n8 E        uc1601(cCount, 1);
5 {, j2 @/ c3 ]8 @        , r  G; a7 i# z; U4 i0 g
        int error;8 ]: l* |4 u& A2 _  p- D
        double (*point_coords)[3];
+ K6 |6 o( f! }        point_coords= (double (*)[3]) UF_allocate_memory(edgeCount * sizeof(double [3]), &error );
& _! R0 y4 b. C3 L5 n        //获取圆柱的上两条边的圆心
. A' |* L6 l. q9 u* m        int i = 0;, U* [7 ^1 s; q7 u) n6 a  L  t
        tag_t curveOriginTag = NULL_TAG;
# q, }; n7 P3 R# {) l        for (i; i < edgeCount; i++)
+ W2 f% z! C8 J/ I' C; c4 P        {
+ b; ~% M) h) N% i" J7 G5 k                UF_CALL(UF_MODL_ask_list_item(edge_list, i, &curveOriginTag));
0 b# \% `4 ^+ V. d+ N, q1 ~                UF_CALL(UF_CURVE_ask_centroid(curveOriginTag, point_coords[i]));& F4 }* q" ]# v
        }# z/ D9 }  y. X3 D( W. I
        //将圆心存放到直线起始点的链表中
- a5 z* f; B2 D2 B        UF_CURVE_line_p_t line_coords;
2 @8 K  j6 P2 p; Q7 u% o7 P9 T        line_coords= (UF_CURVE_line_p_t ) UF_allocate_memory(edgeCount * sizeof(double [3]), &error );8 j( W& w' B/ A$ B% ]1 X
        line_coords->start_point[0] = point_coords[0][0];
4 a$ j& K$ @( Y( k) r( A        line_coords->start_point[1] = point_coords[0][1];0 C( X1 ?0 \7 v; c
        line_coords->start_point[2] = point_coords[0][2];- z$ s6 N4 k% N8 a
        line_coords->end_point[0] = point_coords[1][0];1 |- x5 k) `' \3 H: M9 |4 p9 Y4 D( F
        line_coords->end_point[1] = point_coords[1][1];
1 d5 ~' T& O1 J7 a        line_coords->end_point[2] = point_coords[1][2];
0 ?/ z3 E6 v2 }) Y$ F& W6 ]
8 e* M% r) @" ~        tag_t lineTag = NULL_TAG;! ~/ b- L* g9 j8 g; v6 M
       
* p7 Y0 ]7 ^1 t( Y        //创建直线
0 r6 {/ L4 A3 T1 _, e        UF_CALL(UF_CURVE_create_line(line_coords, &lineTag));" g$ X' G" F2 p8 N4 w' E
3 w6 N/ E) g* |) M1 F4 u+ S
        //打印直线的端点: p3 n) F8 G1 j6 k  `
        char msg[256];
' k" `" L3 q, p( a        sprintf_s(msg, sizeof(msg), "创建的直线的起点是:%f、%f、%f,\n终点是:%f、%f、%f.",
0 b7 a/ X6 }5 W, H                        line_coords->start_point[0],
" o  o9 H9 b6 Y                        line_coords->start_point[1],
2 B2 z, x' ^! c: \8 l3 X) E4 g1 w: x                        line_coords->start_point[2],
# _, N( }% E- ?! M! z                        line_coords->end_point[0],
+ f9 w& J2 y* [% S; W# O5 k                        line_coords->end_point[1],
5 ?! a( s2 |4 \9 p                        line_coords->end_point[2]);$ a7 y0 U: c: r' ?9 V
        UF_CALL(UF_UI_open_listing_window());
3 }) V# s: r1 k3 }2 u. [/ K( Y. f1 @* t        UF_CALL(UF_UI_write_listing_window(msg));
- q3 d" b. x3 F8 a% x* e        //UF_CALL(UF_UI_close_listing_window());
! C" U/ d0 E0 P4 Z
0 B  e2 n, t) M9 G+ c% G9 f        //释放动态内存/ Q7 S3 p5 i$ K+ H7 B* k
        UF_MODL_delete_list(&edge_list);1 r) r8 s. t, u) u* ^% h
        UF_free(point_coords);
7 X5 _, C- k4 a1 J% e$ j; Q        UF_free(line_coords);2 O# f7 R. a# H8 D% K

9 h+ I0 Z" |: l' d6 P; A4 V        UF_PART_save();) h0 `1 d0 @2 @' P/ H
        UF_PART_close_all();

评分

参与人数 1PLM币 +5 收起 理由
admin + 5 很给力!

查看全部评分

上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部