PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x

# @0 q0 H. n& d- a  l2 K
7 U& b% U: y. G! m+ oNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点0 |5 e/ {, b7 R9 n7 L7 g! d; j
+ f' q# n* g7 p& q0 L# i
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata); h; D6 \( z2 L  U" x
{
$ m  u* Q; K! d  C% l4 l    int
- z9 m  H" y% G- y/ Q. N        irc;8 }% B: c/ L5 h3 x3 D. a
    double2 W5 [0 F. l" t* x1 P- `/ m
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },0 N( j( ?' L& j2 w, H) \! u
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},8 g+ I9 Z$ _3 r5 A" L6 K
        mx[12];. H0 [6 Y: D3 i; Y1 K- u
1 E$ I) h& m) \) q
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));+ h  V2 r* b5 q( O% d
    FTN(uf5940)(abs_mx, csys, mx, &irc);0 {( @# b$ `$ `! e4 p, v( T" O
    FTN(uf5941)(adata->arc_center, mx);
+ i0 ?- ]; z: Z5 {% \2 U}7 _( \5 Y1 R3 P, P& H. h

( u. e3 E: O: Z4 {  Y; P" Ostatic void map_point_to_matrix(tag_t matrix, double *pos)3 n$ e) @% Y1 B; _
{) V7 o8 B' k6 p2 N; C4 P
    int
" L4 r- K) g; {+ b% e( i. @. m        irc;8 w6 @+ j$ S& v3 U5 C
    double
, a' ^  O7 m/ g/ ?        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
! y5 N2 t' N8 ~        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
% A: U8 k: G1 b& W        mx[12];/ o% k) c0 z5 Q& O0 J/ F
! ]8 r3 _3 w$ K. q  t6 k
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
* S" ]- v0 Y. Y1 m    FTN(uf5940)(abs_mx, csys, mx, &irc);
9 {" ?7 c! w* _1 F    FTN(uf5941)(pos, mx);
$ {* b2 n# m! F4 u) O/ P" L! S}- o; n1 g1 P7 W" ^# x- q6 O7 q6 ^

, i+ n+ R+ y% c/ L/ ?# N& q; ?! W* P/*  This motion callback emulates the rubberbanding circle seen when( g2 |7 _5 j* @: n/ E
    using the interactive option Insert->Curve->Basic Curves...->Circle  */* b4 ?- h5 l( X* U7 m
6 w, u* @4 I+ N: c
static void rubberband_circle_cb(double *screen_pos,
% m0 V# H( b* N    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
! k3 F# \/ u3 V0 Z5 q- [7 r6 w4 L' g{. T, f6 e* R  r, S* @
    double
, H* y0 P! ?. {3 D% [        axes[9];/ |, r8 X4 ^! S9 J! ^
    UF_CURVE_arc_p_t# Z, z9 u4 n% P, s! f
        my_data = (UF_CURVE_arc_p_t) client_data;
/ `2 f: ^9 @# [% G1 y" j: y' F: i$ |2 `+ G: F7 y$ S. d7 q: p
    map_point_to_matrix(my_data->matrix_tag, screen_pos);, u+ P7 k  _* |9 S
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
- k/ F: u5 Q8 a. g0 ^7 C; H# u& ]* t5 E' v
    if (my_data->radius > 0)
/ O, K4 h; z3 R% `# |; S# y. V    {( e' X+ J/ `+ K6 \, r
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
, w: K! o$ M; ?" g( I" J! b+ W
7 X0 B' ?. y  z: g8 o$ \/ {        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,! M: I; q. c: f  d6 |3 y" k* t
            axes, my_data->arc_center, my_data->radius));: E" G. t4 A" L% O% }
    }
8 b. q# @9 ^: x6 O* H}! W2 a" Z4 I$ f6 `. i! @
( G* I  w. ]" p, r' ~: `
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
, A: B6 p& h" C: ~" O  k+ T{2 p" Q: j0 f5 }. X& T& f+ n& x
    int$ H8 R# Z3 W$ D& B& R* X
        resp;
2 v2 S2 G$ [& N- f2 }/ o# `1 n    tag_t* `7 G' b0 V# C! t+ f3 n
        view;3 Z) `) a- N) x6 W8 V7 D9 U- z
    char
' O& G$ C" `5 S6 h# S        msg[133];
$ x; [3 M$ ]/ X( E) [3 V2 R    double6 U- E* c+ `3 d5 p
        on_arc[3];
! i' I& L; c  f* |7 S0 j& ~. Z$ F* ?" _( R
    sprintf(msg, "%s center", prompt);  S1 r! v9 E" Q* t# t9 F
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,/ `# k! _+ \5 S* G0 n. y. m. Z2 }" }
        the_data->arc_center, &view, &resp));
, |" K: o2 P9 i; `# _/ S    if (resp != UF_UI_PICK_RESPONSE) return FALSE;. N7 K2 n0 B( e( B
: A( R4 n; s+ T. q5 J! o& F; n* U/ g
    the_data->matrix_tag = ask_wcs_matrix_tag();
. h- [6 J9 }8 n' G- O4 |' S! v3 T    map_arc_center_from_abs(the_data);
: L& p- Q' z+ X, j# ^# x* M, `, j
' Z& y$ K+ ?! v7 R9 b    sprintf(msg, "%s point on arc", prompt);
, H7 Y- ?7 i, X" C" _* y9 K2 j* b& u    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,9 N0 H1 M. \; P- D. t
        (void *)the_data, on_arc, &view, &resp));
3 C7 C; Q  s) h5 P( m% I    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
2 ^6 h6 |0 h# z. a7 k0 S& p7 a6 K- z4 L. ~* y( {. a
    map_point_to_matrix(the_data->matrix_tag, on_arc);
* g* R) v1 B$ q3 @( Q% v
- o3 L, f' A; N    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);9 O" V( q. _8 ~. _% n5 G+ B& `

2 z+ \; j' J/ m) h) v& m0 @    return TRUE;
% ~6 B* J1 w, t/ ?# ^3 ^$ B7 J}[/mw_shl_code]
) s0 m8 f* p3 ]6 u: W
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了