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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
1 [! T4 X# `# H3 z$ [

/ W& Y1 p* u: Z, rNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点; D! Z9 \' a9 V0 ^
2 d! Y% O, i; [3 A, h
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
* [8 u, ~, Z/ p  ]{+ I: h! g2 e9 b/ _- s
    int
3 N2 l( j1 [" X$ }        irc;1 g. H% o) x. o6 I4 w2 _$ D
    double
8 P, V2 S& E- p        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },& c0 E3 q1 Z, c. D: M
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},4 |' w( C2 ^+ @. o
        mx[12];
) ^) Z+ }) {2 z1 q" `& N3 K- J- B- B
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
( u. v; e- r. }8 o' b  G; X$ h    FTN(uf5940)(abs_mx, csys, mx, &irc);6 ^0 Z  }: d# S  ]; b  t8 ?3 i
    FTN(uf5941)(adata->arc_center, mx);. p6 O# ~- _1 r6 _( k3 @
}
7 M9 U/ e7 Y0 C: ~6 G" q3 }5 T$ _/ Q. M5 Z
static void map_point_to_matrix(tag_t matrix, double *pos)8 L5 u: y% R( {0 V0 @5 W, ^
{7 M% @* {  u  E$ V! S/ u
    int
1 R5 U0 p; `; [0 ~' b) M) f        irc;
/ r" C. b$ w( [+ r* y0 b- Q. O    double  m. I* e: f8 P) t/ s0 \: F/ d
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },5 X8 v1 c- h1 S8 o! N4 \
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
) s+ I4 Q# F2 s! n2 V        mx[12];
0 }2 T: X1 ]8 n- Q, o: W: Y
# b/ x0 \; A: F2 M; K    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
; p+ p6 t6 t7 z+ u0 ^    FTN(uf5940)(abs_mx, csys, mx, &irc);1 L. }0 z$ Y( t/ ~* b8 X
    FTN(uf5941)(pos, mx);9 _9 T+ H/ ^( h/ I6 N
}
$ |' R1 H/ e& M) z
6 h- N( P4 r+ d" L8 E/*  This motion callback emulates the rubberbanding circle seen when0 u9 N0 P5 s3 E( l; K* v- y
    using the interactive option Insert->Curve->Basic Curves...->Circle  */, ?" @; @% ?- r- P* M8 D
# L: g8 i7 z  J6 w
static void rubberband_circle_cb(double *screen_pos,
5 h, {- X+ U8 z9 O  `7 J    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
7 ]8 s- Z9 G- |$ T; S2 `  s* t{
& i) E6 R; [" O, X4 A    double
. Y* R  O2 a$ B' o        axes[9];
' ]6 M0 f1 R* }! p) J2 [    UF_CURVE_arc_p_t
9 c* t. H$ [7 G0 J        my_data = (UF_CURVE_arc_p_t) client_data;3 P4 L- |2 R& r9 j
! x: m+ R3 |3 o$ T, e0 v
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
0 L$ Z  k0 a8 C8 t/ w/ }    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
, F: A" q6 _9 B5 l+ M8 D9 l
% r6 ?- o! e* G. V$ `- [3 f/ @/ X6 ?    if (my_data->radius > 0)
, @4 _" _$ _  Y- }    {2 C3 ?0 b' m6 m& }: q3 S8 }
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));4 \$ f9 @, c& O$ M+ D4 W
1 t  ?( c4 @1 L
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,1 h3 F6 M! Z! V+ {
            axes, my_data->arc_center, my_data->radius));" Q7 C- S6 P2 g9 c0 ?" p, s
    }8 h' N* r/ |8 d; t5 }  q
}* d$ }* x6 K8 w- x/ I, p
) a' L! J2 _- X2 b# E1 n: q% n
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data); K* R0 V, s+ i) z% E2 O
{7 G! d6 y. F8 E$ F( U
    int2 v5 n% B. H! @. M2 F8 f' [3 ^
        resp;6 C9 X$ Z2 }4 a1 m+ p* b: X
    tag_t
/ i  d- q; c5 f7 ^1 i        view;8 |+ d" }/ ?; R+ {- t; ~3 S$ X
    char0 M' k/ }$ }# d; x  l! t
        msg[133];
6 _$ Y  P! `& a( ]    double
3 y/ H9 g. k2 ]) h        on_arc[3];. J  |* ?. [; w: _/ q, x* D
5 l& V- i. s; k3 P5 t
    sprintf(msg, "%s center", prompt);
, P1 F' }0 r! B* p    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
2 Q" x6 ?* n6 c2 p* A; \        the_data->arc_center, &view, &resp));& h; n. e- M$ A$ M7 C5 c( l
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;) X0 P  g6 Z+ m  j* v3 D0 R/ @) U

8 K4 G8 y. p1 ^0 r. a    the_data->matrix_tag = ask_wcs_matrix_tag();$ Y3 W* N( q! O. Q6 ~
    map_arc_center_from_abs(the_data);) y/ v; c8 g  I" n' s  s$ y
7 Y" s1 h) F7 \7 F) T% J# A
    sprintf(msg, "%s point on arc", prompt);7 F" Z6 U2 q( t; |7 M
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,3 X7 q7 Q; X4 v9 K6 M
        (void *)the_data, on_arc, &view, &resp));
5 y' ?: R' Y- Q: W$ u# J: P8 H    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
- D) Z) n! n% N- H& @. r0 M7 z# Z: `3 n; T& M6 j/ X9 T. M$ x# f
    map_point_to_matrix(the_data->matrix_tag, on_arc);
; D  R0 }3 H" `6 N4 O: |8 k9 Q8 V- B5 m1 S7 Q7 M
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);1 e+ O2 x( B+ b8 o0 Y9 Y0 Z

% l1 y8 B7 z; v2 y3 G) c3 Y  X    return TRUE;
/ f1 L; A; V4 f" N  @' U! s" s4 n}[/mw_shl_code]
8 E3 x3 F6 G7 Q: w4 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二次开发专题模块培训报名开始啦

    我知道了