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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

1 @; O8 M+ w7 a9 B+ R; D: u, c
/ c. u! f- k4 p8 U6 eNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
% j" ], N6 E0 {9 d  K" t! [- Z- K
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
8 S0 N. V. F" L8 B1 h* T{' H& S5 L( m3 L2 J8 |- a
    int
/ T. x& [3 X1 z" j        irc;$ k0 i2 o; p6 u2 f- u1 j! L: E. b
    double% |2 F. h9 W1 F+ j$ c) P8 j4 X6 D
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
6 j# g& z( h6 w' r' I" i+ E" |        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},( Q* w: _9 x- C. x; @. S( n, D6 h% O
        mx[12];
" K& n2 |$ Y3 k% x- F
+ }( @# Z$ B) t& J* V* x! [    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
, ]0 p5 _5 d0 q9 H/ ]. V    FTN(uf5940)(abs_mx, csys, mx, &irc);1 Q: n( B% e# A, j9 i! ~5 j6 H
    FTN(uf5941)(adata->arc_center, mx);
0 o' e* T3 v  L* n* f: K" k}4 v5 \0 z# {6 d9 a; U. f% C% N

3 g. m" K. p) i/ }1 |( v7 ^: p8 ]: rstatic void map_point_to_matrix(tag_t matrix, double *pos)
7 d' ~2 |! ^% n2 _& n+ I{
$ W- f4 U6 V: W5 g% k    int* @% @4 D; E  F' ]
        irc;
3 M2 P/ F0 D2 m' W: b. i    double% k3 f4 ]5 L. t8 J0 S
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },* {2 r" S" L+ Q0 ^  I
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
# F# m, O5 G  Z& e        mx[12];4 p$ k( n( u, y( Y0 N- v- e

4 ~) w% A, B8 m% I9 V0 }3 i# h    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));! r  o% w: r7 G( R7 v3 f! Y$ n
    FTN(uf5940)(abs_mx, csys, mx, &irc);( V; \! Y! t4 |  V* }) M
    FTN(uf5941)(pos, mx);8 u; Z9 d% z7 C% e" d' Y0 p7 R
}
3 D$ d, G  s+ ~0 {: \3 j$ @4 A% K$ g" i/ K' ^6 Y9 s+ w2 E4 \" i
/*  This motion callback emulates the rubberbanding circle seen when( ^5 F5 g( ]- l! Z" _
    using the interactive option Insert->Curve->Basic Curves...->Circle  */" ^6 g# ?' J4 a7 o1 z
) i# t' @2 ?9 T8 X) F
static void rubberband_circle_cb(double *screen_pos,# o2 H1 V% R, J7 N
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
! h. R2 l$ F: G{
# V! b& g  J& j    double
6 Q1 L/ H- H! L: m+ L' }; {( `        axes[9];8 ~: }' G5 t0 }
    UF_CURVE_arc_p_t
: w. v  h/ q+ K8 B6 {        my_data = (UF_CURVE_arc_p_t) client_data;, J2 s4 z2 t4 Y- \9 p8 ~9 W

# d7 ]1 b0 d. b) V5 f1 J' J5 N    map_point_to_matrix(my_data->matrix_tag, screen_pos);
) g7 F9 [( e7 Z    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);8 i6 u/ z+ I0 Z; B8 L
; U$ |5 T& e/ D8 V1 n* u# D
    if (my_data->radius > 0)7 B" G- f7 H! }
    {
8 b1 R! J' ^# [        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));3 N' _: E8 @% C- J
3 l+ S4 J# u( u3 |' w' \) M
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,; O& j0 z2 W3 g! N/ Q
            axes, my_data->arc_center, my_data->radius));
( {% U$ q% k7 }' l6 [' g    }
6 x* L. X7 k$ D+ X) b& J}/ |9 l3 g& X5 s& ?$ |
9 a" ]! J6 F$ |  \
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
; i- R) e/ L0 T3 z{
- h! J  Z7 \1 l0 E: i* u    int8 O6 o3 `  _9 v1 s/ x
        resp;% m! O- L" \8 {, C' I, m
    tag_t9 j; a: j) L) Q1 x9 ^
        view;" c9 I% {2 Z; U' n( v# h
    char! I9 \+ T6 ]: A# H
        msg[133];
- _, e/ b7 S6 |+ p) C# l    double- q, t8 Q+ V5 t! h( P9 O. k2 ~# g
        on_arc[3];
) k$ c  A' H2 z" z  O+ k5 o* S
  V- `' A- R% @( C7 Z6 {* Y8 S: `7 @    sprintf(msg, "%s center", prompt);5 |) R+ L9 z; \; [) _: z
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
. Y( j8 ?. n' K% l; J2 U5 \        the_data->arc_center, &view, &resp));
3 y6 O' M  Q" X/ z    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
: E6 t! r7 t& V- {9 w& i& ]& l7 o; Q
    the_data->matrix_tag = ask_wcs_matrix_tag();' p" S$ e7 ~+ x- m
    map_arc_center_from_abs(the_data);  m2 w6 y( j6 c$ s
, ]' G9 B4 m" O2 F, a9 w
    sprintf(msg, "%s point on arc", prompt);# Y  f: I2 V0 Y# z& H3 v" W
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
  q9 S0 m5 m# ^0 e1 b        (void *)the_data, on_arc, &view, &resp));
1 T! e- c% }3 K& m    if (resp != UF_UI_PICK_RESPONSE) return FALSE;% V# F0 k! [7 _$ i

% R- b* I0 a; q2 i$ p) o- k    map_point_to_matrix(the_data->matrix_tag, on_arc);% Z2 f! o+ @! H8 @/ W) t. ]

+ }0 r8 `: z2 \; w- y" `    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);: O: U" a6 y4 @3 w* V/ r  G( \8 r
- M) b! }* U5 A
    return TRUE;# @8 G& }* {: b' N$ X& H2 q! B: M
}[/mw_shl_code]8 t  T$ J0 r/ b5 S2 ^3 K# x
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了