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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
. F. e0 i* O- ~. p! O; n- Z$ m. p
6 ^( K. Y2 B# z) I1 c- V
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
9 o8 L1 c; A0 e/ D: W: E; `7 R" [  W/ @1 O3 x
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)' p  c5 I4 S( T5 R) U& U- ?
{7 ]0 P- r9 i2 }8 a
    int
0 v+ v! x2 Y( Q        irc;
/ _, Z* K. r9 t$ _    double
9 Y0 r- D1 G* ^; {; ^% T; y        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },/ s7 W* k" w; ^
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},$ {; ^. P& A* M& `
        mx[12];
6 d& n3 E3 g5 }, X( S8 h+ f7 C, n/ ~3 X2 f" h
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
/ c- w" O5 \: \4 L% ?/ O    FTN(uf5940)(abs_mx, csys, mx, &irc);6 z/ S' f- D/ O  t& u4 F5 }! s
    FTN(uf5941)(adata->arc_center, mx);. V! z4 {3 a/ E% Z. y( X
}  i0 ?' b0 U. d9 n+ d# E

- P  n7 r7 Q6 j+ a8 p' ?* ustatic void map_point_to_matrix(tag_t matrix, double *pos)7 v- C$ c5 ?7 @) _
{
7 y3 ]7 w( Z% B4 _$ @    int
3 v* K" {: e& E; n; z        irc;
7 u1 Q; l8 X, W& a    double
( N: v9 B8 B2 H+ X3 d8 p, a. t. `        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },+ w$ f6 G5 \9 O5 v. J/ [
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
- p- g& q1 @6 \1 n& t$ Q  ~' {        mx[12];
$ D9 B6 D! C4 `, d; n* A- A
0 ]+ R1 J' p7 B# Z    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));7 J, ?* X0 w; v4 x1 I7 E
    FTN(uf5940)(abs_mx, csys, mx, &irc);
# d6 m3 c# a" L    FTN(uf5941)(pos, mx);  q; k1 N3 o' n/ N2 B% W
}
2 X! S6 ?" {5 t' |" s+ s( {# j' N1 f2 u( Z; d
/*  This motion callback emulates the rubberbanding circle seen when% `( X' i' i8 i0 p( p8 _5 |
    using the interactive option Insert->Curve->Basic Curves...->Circle  */  z" r# ]' _! e3 \6 l
) n' c$ ]% g9 t6 g  I: o
static void rubberband_circle_cb(double *screen_pos,3 K& ~/ Z( d1 Q4 \9 t# ^& e
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
9 H" y7 M3 ]7 V  ^" n! J4 K{
# e+ w7 p0 d* {7 w: N' a    double6 F9 v' _2 y9 L4 ^* x' S6 V6 E5 y
        axes[9];' ?9 o) \7 e3 K
    UF_CURVE_arc_p_t
0 @) I6 R$ m& R9 {& j; y        my_data = (UF_CURVE_arc_p_t) client_data;
! E. P% I8 ]6 p$ t+ V" U! L* d0 @  U+ J' B5 c& H0 G
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
# a! o  I" u6 R3 K2 a2 |7 m    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);2 J% X! a5 }1 a% S
- r- t% H" g5 a2 p/ J8 Z& t
    if (my_data->radius > 0)4 J  {7 G9 S0 M+ d4 ?  n+ \6 ~: r
    {
# _! _- _5 f+ S9 G        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));( B  `& }/ S, |8 i2 H; |$ R) a
( X0 y+ [  T7 e. z  [' I$ X( q
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,7 i( L- a- _" g6 ~' H
            axes, my_data->arc_center, my_data->radius));
" K' b* q3 d4 k1 k! k    }
. ^1 R% v% C, j& Y, c+ k}3 \% L$ `8 I: C, ^( s
0 `  M! P0 [. N: K
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
9 _1 h) p0 F3 a) ]{
4 L: \$ I. g4 ]) r$ C" i$ u    int
/ i7 v0 n1 O8 L$ f; y        resp;) U% n: w: u5 Y+ u: X" B
    tag_t1 L7 ?, H$ S, }) L: ^+ T
        view;- n9 I9 X( W8 [% q, z( j
    char
/ e1 @7 ^) x' i% M% V        msg[133];
; g0 X2 L) D6 ?  |. Y) |. A; S7 \8 N    double4 c: z7 E' N) }7 o2 ?% T
        on_arc[3];- |1 w, d! E# @5 X# f
0 P& ^6 c4 y; A1 `3 Q! q
    sprintf(msg, "%s center", prompt);
, }  N0 K* f  P( E& A    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
( E6 L6 j  ^1 N. Z+ M* {" f; ^        the_data->arc_center, &view, &resp));. _# Y$ v6 S( ]
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
3 r! Y) \. Z" t* m2 J9 b
/ v( C+ _! }0 f: }    the_data->matrix_tag = ask_wcs_matrix_tag();
0 J8 N8 U; H* f% H    map_arc_center_from_abs(the_data);  @0 l9 Y6 {: a- o
/ x# `! H& l5 U7 l
    sprintf(msg, "%s point on arc", prompt);4 H* W/ D2 D9 E9 E. c  u! a3 n
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,# y+ A$ n+ j$ k. \; K
        (void *)the_data, on_arc, &view, &resp));
: {: c0 W! K: g& v, M  I; H5 `: g    if (resp != UF_UI_PICK_RESPONSE) return FALSE;9 @2 W  `6 K& Y& }
: \) Y) I% l* q1 C4 D  A1 u8 F
    map_point_to_matrix(the_data->matrix_tag, on_arc);( d% c) @4 f8 E4 D$ l$ v# H, s
5 R% y4 x  ]; g0 U7 d9 x3 O
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);, \) R. z1 _/ Q: ^1 H, {3 F

7 `3 A( G4 z  v0 ~' V    return TRUE;
) p# }0 G& l" @9 U) y}[/mw_shl_code]4 k" {8 g' ?7 l* V7 \
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了