PLM之家PLMHome-工业软件践行者

[资料] 【NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点

[复制链接]

2018-7-12 11:09:03 2119 0

admin 发表于 2018-7-12 11:09:03 |阅读模式

admin 楼主

2018-7-12 11:09:03

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

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

x

9 J/ K. H/ G' A" G- o% _. T! U  C; @: b9 [% R
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
7 Z4 U2 L+ n, j- C# J5 i% G+ a
# J7 \' i0 Q. H. ?[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
5 L, L1 `: ]2 _3 t0 l" l{
) K+ t$ q, n' \$ L    int& r4 A3 v6 E$ g5 e# Z$ \
        irc;
  F" i3 g' E* B  r    double5 y+ z# O0 ?( w1 \6 g  \3 L
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
+ @# O% z, F; c        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},# v: s" u/ U) P0 H/ S
        mx[12];
8 a- I9 |2 Y" T, L! L; M
1 A" n8 f1 c4 J: \  W    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));( v' {  N3 H( x1 P" g6 G
    FTN(uf5940)(abs_mx, csys, mx, &irc);1 \5 Q4 y) T' f* L
    FTN(uf5941)(adata->arc_center, mx);
3 Y7 E1 Y% t' B2 j4 ~' z}+ T, j! X! I7 m( h4 p% w

) \% F# h! @' c5 P8 [static void map_point_to_matrix(tag_t matrix, double *pos)
6 d0 X# D9 C! {4 a7 E( `( M{3 u: j( H+ J- h3 w  L- d3 F
    int" p* b2 V2 v: N, w( R
        irc;
. k" o# w/ P3 o" n( W/ i    double& o2 K5 h1 Z- h* \# y! Q; b
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },/ |" u, p  \7 b3 ~2 }  D! g! a8 `5 C
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},1 b/ W0 `7 P8 g8 ]. B% O
        mx[12];
/ h4 @8 l6 m2 x5 b  v/ l0 p6 m; G& n/ i; i' o8 v$ E& \6 R9 Q
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
$ P- ?, o1 ?0 @+ i% m    FTN(uf5940)(abs_mx, csys, mx, &irc);
4 g. u+ I4 ]0 {' P7 c; a6 c    FTN(uf5941)(pos, mx);$ e/ o$ r/ e+ j& A3 k  x
}
9 S6 |. A6 {  Y6 T' R! [+ z" p0 R7 @! H' l  j) d4 N+ [
/*  This motion callback emulates the rubberbanding circle seen when
7 x% x) y0 q% f# J4 h- {' e    using the interactive option Insert->Curve->Basic Curves...->Circle  */& C- S2 q' `! T/ ]5 O
+ \1 d* a# {& A
static void rubberband_circle_cb(double *screen_pos,
( _  |, T7 v" g5 u1 s    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
% [; a/ {5 Z, V9 e  E, a{
1 h2 Z% a( t2 h; z9 a* [. r6 z! c    double
+ g8 v9 B! t6 T9 p        axes[9];
+ H! o; n2 o9 z0 V! ^- w" P    UF_CURVE_arc_p_t. R' S% ]! u" ^7 d
        my_data = (UF_CURVE_arc_p_t) client_data;& _, B: ~- m- g( e* q2 H
/ u- V. A+ Y7 ]. X6 r3 G0 m! v$ G- q+ t
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
; R1 X& H+ \8 s- ^1 }2 Z* \7 z! o    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
7 H, o& h+ R$ P( \
8 B/ e9 R+ |* ^    if (my_data->radius > 0)4 U* N' ?* Q. i) n7 b
    {6 k1 `' T! l& R: ^
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
2 r  J1 A' Z. S5 S: m/ `, K9 A
( ?: R- D# ~) G  W/ ~) b) {        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
  B( x9 c7 h. E: K$ N3 g2 ~+ ~            axes, my_data->arc_center, my_data->radius));* a' Y: k& ^/ ?
    }
, W3 `& G) Y  h) N; j. Z}
3 F8 u& [$ s) K6 X1 ~8 z0 P) @2 P+ e0 F0 o. Y* ?
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data), Z6 u* ~% p% i$ A: I4 N  A
{
9 q% y2 k3 f3 l# c7 Z0 L    int9 P" B3 M/ E0 `+ V
        resp;, P/ T8 W9 |  F$ F* M- t  ?
    tag_t2 T0 Q7 W6 R) L" g7 f/ \
        view;4 U: k" k: G$ n' s) n
    char  ?3 ~4 i4 C4 j
        msg[133];2 W* j& q2 _6 w  Y' ~
    double
; R" g/ z+ d3 \. S- m" y8 V        on_arc[3];/ b- W  a: [7 t5 C- k

: d" x: b7 k4 \" G: s    sprintf(msg, "%s center", prompt);. S+ N' {; S, Z3 [1 r1 q
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
6 m$ }' k. J- d% i* j5 A        the_data->arc_center, &view, &resp));) P8 I$ u% T& g% _' f; l# w
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;: U/ I# `6 H: o& L; F
5 i/ {) I& P+ I  x( B9 U! D
    the_data->matrix_tag = ask_wcs_matrix_tag();
8 g7 s' l, z5 c+ z4 _* d    map_arc_center_from_abs(the_data);9 J  W/ h7 [* \0 L

9 I2 b1 h9 @2 F, ]    sprintf(msg, "%s point on arc", prompt);
7 v  }# L9 m6 p6 t, y6 \    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,/ V$ W( t/ i  g
        (void *)the_data, on_arc, &view, &resp));
* d/ B. {/ z$ p$ Q" q+ \! Y3 r- n    if (resp != UF_UI_PICK_RESPONSE) return FALSE;* M# M7 ^5 b5 _4 A
: _+ J4 y) n' l- O( P
    map_point_to_matrix(the_data->matrix_tag, on_arc);
( a, |. Q# F# X4 L% p2 d& d+ v& D& {# p3 d% U( s# m4 Z1 }6 N
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
$ A  ]' \, N; u6 k
; Z( [5 K' }3 Q! {$ H/ _    return TRUE;3 d  G- V9 c8 k7 P. ]+ c4 b
}[/mw_shl_code]
" j, k( L6 V; j: b
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了