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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
  G- X  v2 ?+ y5 J3 f& }
$ n1 W2 _1 E, _9 N
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
# q- ~  C, _* _" K% r5 u0 ~0 j. R0 j7 W1 N5 D" x5 Y  o! y
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)- _$ g. u" {( G7 ]( P
{4 z1 A8 \+ y+ i6 ?9 o
    int5 E6 l7 F# t) X* `
        irc;8 ~$ E' Z2 D( c5 i1 J, d: ?8 n3 h
    double2 z3 j* ?! }4 x% \& D6 v
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
; H- h6 f: ~" A- ^) s) ^# [        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
+ u# F6 }# _+ \) e! h+ x" z. p        mx[12];
+ {: @# J6 K$ U+ W5 b, T. i1 z
$ i4 g5 }6 P4 G    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));, `3 w1 |4 X0 Q! i- v
    FTN(uf5940)(abs_mx, csys, mx, &irc);, ~7 [& n  h" n
    FTN(uf5941)(adata->arc_center, mx);
  H( x/ o5 X5 m7 ^7 B}8 P, g- k/ Z+ \- [- I( l
7 r( p! p# j4 j8 c
static void map_point_to_matrix(tag_t matrix, double *pos)+ z1 t" @. e7 D( m2 ~
{
3 ~, G# s3 l+ @' s0 _* |- i    int
0 j' ]8 r1 O7 p; W; H4 @) ^' a* E+ ~        irc;% b% S) U# {( S; [% D
    double
+ W4 }- h% y6 l0 i! B+ v/ i0 v/ q        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
/ G" G8 r$ i1 M8 ~; q        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
! A5 @9 q2 S. V+ i        mx[12];% C( a5 j, `# G* c# ]8 A! y

3 S4 x' j+ V  ^7 ?6 I) B! _4 k+ a    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
2 U6 V, G; x! k& r2 y3 n5 s    FTN(uf5940)(abs_mx, csys, mx, &irc);
8 y* a5 n# m2 A, m+ q9 A) c, q    FTN(uf5941)(pos, mx);. `9 L0 Y; X* Q! d2 f6 C
}' r$ a$ a+ Z" l" E/ z5 T# p5 }
( u* p0 D) h7 ~% O1 h' c
/*  This motion callback emulates the rubberbanding circle seen when# I$ c: o4 K% [: M0 ]% S; a4 r
    using the interactive option Insert->Curve->Basic Curves...->Circle  *// ]2 n+ F1 W% H: I  ]: H* k; b0 _, Z

5 F. N; K2 |# }3 |7 x! ^" i2 s% c% jstatic void rubberband_circle_cb(double *screen_pos,, P0 X; F, @5 s$ o
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data): Q9 R4 [) n, j" G" T5 r6 ~" ]6 L
{
1 q: S# E) c4 `: B% a6 p    double
0 A: d1 K* q0 d        axes[9];. }) b* P6 [4 k0 I
    UF_CURVE_arc_p_t& @1 s7 {) }5 b% E* L; M
        my_data = (UF_CURVE_arc_p_t) client_data;5 F% a; }- h* a" z$ D0 t' f
( Q* u( `4 z( L
    map_point_to_matrix(my_data->matrix_tag, screen_pos);- o* e) V5 U9 x& W6 c1 @
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
: Y/ Z9 P( z  a
% ?% `) M! n. ?( w2 |, x; @    if (my_data->radius > 0)
# G1 P6 a+ B( _  v) V4 n    {
0 p/ u! }0 H$ ]8 r5 {& m7 R# d6 L        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
9 W$ h% l& W. P+ J- V$ k; `% u
/ a! m- L7 L7 p9 ~" C; K1 {        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,0 z0 a9 [& }5 |' D
            axes, my_data->arc_center, my_data->radius));5 o8 P' k6 w; e! I
    }* I& c) r1 Z; `8 a+ O# M
}) @5 f1 K5 o' M$ u9 A
. E' r/ Z. A9 {& M" Z( `: q; J
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)4 H% e. @+ A2 i- c
{
1 X7 B9 _# q* Z    int
; T" b. {" \! T6 ], w, A$ @# l        resp;
6 |) y" \  Q. M. w/ M& |    tag_t2 s* v  A" _: q0 U9 g3 e  D
        view;6 o0 `% F0 |5 v# [$ @1 E
    char
, M! }+ P9 }. Z9 b& a3 ]- L        msg[133];" s9 m$ Q+ T( s- M
    double
3 O! X& d+ r4 v; f% |/ ?5 \        on_arc[3];: v" b1 Q# B, w4 k: o" V" {3 k
" f  O7 x5 r- W' s7 I$ b& X3 G% D
    sprintf(msg, "%s center", prompt);. _. Q8 x9 K1 s8 O! \& |
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,8 N6 ]! d& w+ B  Y- N" J3 w
        the_data->arc_center, &view, &resp));; }, ~* G* P# [/ o# q6 T
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
! g) b( `1 R2 A! k  Q, h# d* I2 }3 w0 e5 E
    the_data->matrix_tag = ask_wcs_matrix_tag();
0 V& l  h+ i! l2 W) o1 }( i" X( D1 G    map_arc_center_from_abs(the_data);1 `  Z, H. F/ r
6 y% c; E5 T& q- n  j
    sprintf(msg, "%s point on arc", prompt);0 u  _0 }( t* _
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
& H: ?- R8 R/ b: L6 M        (void *)the_data, on_arc, &view, &resp));! U& o0 v  k$ G" n! f7 j
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
$ X3 S# g& a, Q" v$ Z7 Y  y1 x, S
# H4 Y% Q+ E* Q) t& e    map_point_to_matrix(the_data->matrix_tag, on_arc);7 H4 x; S/ _( W( ~

5 M# F# W7 D1 G: D, |    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
8 ?3 D- Z* ~: ~' a2 j5 @4 }  S* ]% Y. I$ Y
    return TRUE;4 a# _1 U8 G6 N) v
}[/mw_shl_code]# _8 Y3 o( [* ^5 r6 K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了