查看: 2300|回复: 0

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

[复制链接]

4

主题

4

回帖

52

积分

管理员

积分
52
发表于 2018-7-12 11:09:03 | 显示全部楼层 |阅读模式

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

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

×

5 B7 z& L0 A$ G2 _
$ A; c  B; h+ J3 U( u" a( L# W9 n【NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
2 _  C4 t# p1 s3 o; e3 F& O3 G* Z" M1 _1 o2 Q
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)2 m, o: y5 K/ a1 \
{9 D* x: G1 g1 E1 C4 U  D) ^
    int* N3 p% H+ ~. c% |! G7 C
        irc;" S' ~5 [0 }" t+ k
    double2 {, T$ u! K, B
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },* O# f; g7 b* `* G6 N
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},% U5 p5 |" q% e( L5 E5 D
        mx[12];
. ^2 k5 p0 F, f% K- ]
% @! A; [$ P: W    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));1 Z& a- k! W( x
    FTN(uf5940)(abs_mx, csys, mx, &irc);
  W: A2 b' {, Q    FTN(uf5941)(adata->arc_center, mx);
! J1 v& L" M; A) R) c0 @' L}- y( z2 f* w+ W( \- _7 e

/ O& X4 }* N, B( {# }% `8 |2 E& ~static void map_point_to_matrix(tag_t matrix, double *pos)
! y5 d3 k1 ?) c7 @8 L; g{- G7 j6 ?! B. i' p
    int
; W% b. r, t- t' R' @8 @% A        irc;& ^7 w$ ?! |2 P3 w: h0 n
    double! `* W' t- D! ^
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
# D: J) g+ E, k; b$ f2 \        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
2 m/ i, {% n, @1 ?7 ~        mx[12];7 P2 A" T5 Z. M6 o/ N
/ R& |, R) U2 \' L; [. M
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
( I* m1 x4 o8 D2 t; {6 |5 i    FTN(uf5940)(abs_mx, csys, mx, &irc);& C' @+ K6 h  Y% t3 Y$ g& V
    FTN(uf5941)(pos, mx);
0 y& m) p) }6 X! O6 j}) N3 V8 T; X( j' i1 T. z
9 u7 Q" z  d$ D5 k& ^6 n! i
/*  This motion callback emulates the rubberbanding circle seen when: X; |) j+ S8 r' C5 ?6 D' X
    using the interactive option Insert->Curve->Basic Curves...->Circle  */
( K! t* N7 M8 l% \0 X3 o+ M! r3 q: `4 ]
static void rubberband_circle_cb(double *screen_pos,
9 l9 i- |! U. K$ l    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)) V( S" z& w/ b, a# \( S
{
4 J3 v/ ]4 g0 z; _    double7 h2 [3 f2 `2 g2 w+ j. v8 y' q
        axes[9];
- x8 F5 k9 F$ W0 V+ C. B    UF_CURVE_arc_p_t
9 ^: \9 B3 X  _! ^6 v. Q. ~        my_data = (UF_CURVE_arc_p_t) client_data;
' a  ^9 n% c% d5 H) G0 _4 J( I! g( ~4 @( c/ Y$ m
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
5 S9 G1 Q5 G$ P- D    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
1 Q6 o& M* r- k  J/ _' q. `- d) M8 s& {, f2 \, V
    if (my_data->radius > 0)* G4 [; P# B6 M' n. K7 b
    {% U3 O. {* ^& T6 G( ~% d! m
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));' ^/ r8 F# ~' E1 ]; {
! E4 r0 c1 f' B# G
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
1 ]+ q6 a; e2 r  K            axes, my_data->arc_center, my_data->radius));
: C8 E0 A; x4 Q% A! d8 p    }# u% S6 t3 I) M( M
}
1 G/ {( }. J( M( J3 O5 y! C6 O5 b" N# F5 d2 C6 e$ B$ l8 p
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)' K3 M/ g0 o! Z+ Q) n/ k# @
{) R0 Z) P- h- J3 g& c0 ~7 j' }
    int
, p0 x$ O; h/ e7 i$ h        resp;% R1 G% t- n. w# S7 @$ }' b; h; h
    tag_t  E) z# s$ n  L& R! Y$ Y; u
        view;
- _: C' Z% @: ~% b: m1 Z4 M# b    char. q4 G' y6 b( f' ?9 y% B5 K
        msg[133];
, s) w* J4 h! J7 h, m: \    double
" Y' G& P- X" c4 f. @        on_arc[3];) C4 o5 Y/ Z4 D+ X/ Q" H
3 w8 R* G4 n8 E7 d7 e7 y
    sprintf(msg, "%s center", prompt);
* p! `$ R/ e0 k! O, R8 M5 d$ e. \    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,$ V2 T- K! @6 q5 J/ ?
        the_data->arc_center, &view, &resp));; W( q2 C. [( B6 ?, o- \) H
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;$ v# U, D& I% v6 L

: b  P( d* J) \! V* |    the_data->matrix_tag = ask_wcs_matrix_tag();
, g! ^5 c: |% l2 D# |2 _    map_arc_center_from_abs(the_data);& }( c# L2 ^2 A
' l$ @8 c7 h( ?$ v
    sprintf(msg, "%s point on arc", prompt);9 @6 l- V' F3 `' O9 b# I
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,1 W4 L6 g7 T* [
        (void *)the_data, on_arc, &view, &resp));" M5 n/ z0 j( ^) S
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
: P7 Y$ Y$ P4 Y1 \0 y- p& l5 S! A: |$ `5 w: y
    map_point_to_matrix(the_data->matrix_tag, on_arc);# q" P7 s. k2 c5 i1 W: J: Q

% y8 T/ s, S! A) M# U- L    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
; `5 p& V! X  \
& D4 j% x9 h! a2 \6 ^" [    return TRUE;
& @; _/ F7 \( p" K; ~9 d+ ^9 U! G}[/mw_shl_code]4 I! c1 u8 N) T1 _: @
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

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

本版积分规则

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