PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
1 L2 i* ^: M+ Z3 W

; z0 T1 s' o4 [NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点" W' Z  L9 r: F6 T- d1 b6 a

2 `" `1 V' g* y& @, {5 x2 ?[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
* {  B$ j0 u- k9 `$ j/ f{$ b8 W8 I! p! g* M' `8 k1 k
    int
8 d5 n2 b: K# f  f        irc;
" z. ?" i" D  }8 \3 e- `& I    double
5 u4 n+ ^5 M; c        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },* R  q9 \) ~  h" ^4 n  q
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},$ c& N) T1 l2 W; m
        mx[12];- ~8 \, c5 S+ b7 G# E
- d8 e- w$ z7 C
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));( z- \6 \2 U( c
    FTN(uf5940)(abs_mx, csys, mx, &irc);
* J4 E+ P* i0 l% M  Z    FTN(uf5941)(adata->arc_center, mx);2 U% L/ n, v, }  q0 Z6 H# F. Z* E
}
9 A  Z$ U$ d, Q7 T1 c' I8 i" X5 L$ ~9 p" d! f' h0 O
static void map_point_to_matrix(tag_t matrix, double *pos)
- r" I8 O# g* L! E/ i, I{+ E" L  D: `- V: m; s4 W- Y1 x
    int
) Z8 Z* O1 m+ e        irc;
, @( K9 C# N; y8 \% y9 t" V    double9 l4 z1 x+ L1 Y/ t# N  C
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
. Q' c* f8 ]% [        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},& q5 }/ t$ j# _$ o
        mx[12];
) |' ^" F% K% G3 [0 o) @6 c! ^9 o6 S3 r- ^0 s; W
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
# V# }4 x4 c: K7 k6 h    FTN(uf5940)(abs_mx, csys, mx, &irc);: E. Q8 ?0 a$ w# b2 c0 ]; y( J8 |
    FTN(uf5941)(pos, mx);: G  J9 W1 \  C$ o$ F: k
}
; |+ n9 T. b8 F3 D5 ?4 k1 e
# T6 M: B! Q! ?/ m- M8 O- P' C, B/*  This motion callback emulates the rubberbanding circle seen when4 E4 v) J; l  s7 |8 @9 m% W
    using the interactive option Insert->Curve->Basic Curves...->Circle  */
  j- d' Z! `" K3 r  y* |/ _$ ^3 L  S/ O% R
static void rubberband_circle_cb(double *screen_pos,# \9 R: F; r6 _
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
) F1 u4 T8 ?5 `3 q{1 d; R8 l. M, l! E& c  M, {# T9 p
    double
" \/ r* _' i1 m3 M: y$ K        axes[9];
5 f  N% z6 f' e; W    UF_CURVE_arc_p_t
5 g, V7 U3 r: R6 B        my_data = (UF_CURVE_arc_p_t) client_data;
3 Y0 f1 O" O4 E) v$ e& Y3 q# R7 w# h. T9 z! w  W
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
! J' F$ `: P; \9 M& n. M/ `    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
, C* I/ E) B+ O& ?
8 p# T& I! O1 x2 P& b$ I    if (my_data->radius > 0)
4 D5 _5 [+ w! r% _    {' `; [% E# C4 d$ d9 Y% M9 W
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));( f/ F% L; L# b

8 T$ A& w8 w: d# E8 }, c3 {        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,& s- ^. K+ d, q( O+ w, j7 Z
            axes, my_data->arc_center, my_data->radius));: g9 F8 K" C. \+ N. R5 G; E
    }% l- Z( Y9 i: a& ?- A/ R3 i
}0 x. B. g/ J8 O9 C. C! l6 a. E% A9 K

  m( L* q- I, K/ o9 c3 bstatic logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data): I. P$ ]) ~2 g2 S+ K
{
* c+ E1 Z  x& z' r8 m8 p    int
' c" x* s* a' b. l- E) h        resp;
: P1 t# c% T+ {8 G1 u    tag_t2 ~- Y! n' m1 z) L' Q
        view;
* L5 k4 I7 _( C7 v7 T2 {    char
" [- c6 ^5 x3 f' E        msg[133];
: Z  a2 e2 x! X$ k: \    double- D9 H) I- z$ w, o( o* ^* R
        on_arc[3];
  u4 ^# A2 n- C9 o  o( N; M( N9 ]/ y3 g0 v6 r- R8 B
    sprintf(msg, "%s center", prompt);/ v9 ~- Y1 j9 |2 d( R
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
8 @% n* i9 s7 H& z        the_data->arc_center, &view, &resp));- P. x2 z# H/ O, x
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
/ \0 B7 w! Y: U! _) k
% y! Z" F* B6 e    the_data->matrix_tag = ask_wcs_matrix_tag();4 z5 P! s! _; V, e& f5 M" C
    map_arc_center_from_abs(the_data);4 O! b) T' K. f$ _4 Y

8 J& b" R8 w- B# ?9 k- `% ?" z    sprintf(msg, "%s point on arc", prompt);
/ P: k: v4 M! \- h1 x; c    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
, \8 l3 N; o. H        (void *)the_data, on_arc, &view, &resp));
' U/ v3 [! s; m$ N$ F% o- R! b    if (resp != UF_UI_PICK_RESPONSE) return FALSE;; E% P* Z% b" B9 ]

- s7 H0 e$ ~  C  p! o    map_point_to_matrix(the_data->matrix_tag, on_arc);
( M: X! _5 h) z
# \! q. i, y& o5 x7 R- v    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
* A! x7 e; U5 y& ]) r" T& ^, o& ^1 Z3 o- o7 x0 O
    return TRUE;9 Y* m6 s0 M- A( `( K
}[/mw_shl_code]
4 L5 K5 ~# m, O& N" A& r: R
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了