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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
/ H+ I1 a- }: t
# \  v+ V3 U. B; C1 p
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点8 C9 a  ]/ e' I3 }) x
! ?7 Y. U: Q2 I# t, G$ a
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)4 w% X% _( y0 d$ c" L4 u
{
' Z) |* m, x3 a2 F7 B% p( w    int
2 Y; ]3 `# T5 p4 c: f        irc;: Z$ {2 P4 p: O
    double
* v8 O; p. \# l) z. w( L3 ^        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },3 l: w9 f4 `4 l3 }
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
. {4 ^% D% ^! v  p4 _$ ^        mx[12];
! v& A$ t2 r$ a: h" k8 {( |5 k% o
: a% {' n& J; P9 N3 J+ y    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
7 E; ], B0 o$ P    FTN(uf5940)(abs_mx, csys, mx, &irc);) ~5 C8 T! M, L1 m
    FTN(uf5941)(adata->arc_center, mx);# p( B5 S; W  E
}
7 |: U/ X) F$ ?
# U# @5 n, G4 q* i$ Rstatic void map_point_to_matrix(tag_t matrix, double *pos)4 k6 x7 w; x4 N4 `
{+ W% F* U8 V! x3 A
    int
, o) A- ?# g# `        irc;
7 |  R# w3 P2 y- y+ q, {    double* ^1 e$ Q) a* w+ s* D# t
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
  n7 ~+ b' U: O2 Z4 y        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},2 I- G7 b9 ^/ E, z" M/ Q
        mx[12];0 n! n0 R/ G) N" U. _! y, m

8 W0 i" C3 J7 ^    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
2 I8 q" |$ J; _  v3 _    FTN(uf5940)(abs_mx, csys, mx, &irc);- H0 }& [$ {) Z7 S1 {8 c
    FTN(uf5941)(pos, mx);
! J6 E+ A5 g) K}9 n1 v8 {& A6 Y* j7 y
* C2 G. i. K  v" |/ ^9 A
/*  This motion callback emulates the rubberbanding circle seen when# g$ b8 X$ J- G' M) [
    using the interactive option Insert->Curve->Basic Curves...->Circle  */
5 R9 x- m9 i0 f% t& l
$ y& m- z0 D  s7 Xstatic void rubberband_circle_cb(double *screen_pos,7 p: [; U5 I7 S2 ?% m/ N4 ~
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)# B9 k. u9 T0 T. |
{
" F1 ^8 j3 Z8 L6 Z0 h3 O! |    double
, l, n* M, |9 u+ h, c  C3 C; o) h        axes[9];$ F4 y, D. n0 w1 I: f7 p! [% D
    UF_CURVE_arc_p_t7 X6 \" N* c1 u- E# [
        my_data = (UF_CURVE_arc_p_t) client_data;% A9 p* G) F& k! E  y* O

4 L; H' f4 H! }( U& c1 r3 [/ {    map_point_to_matrix(my_data->matrix_tag, screen_pos);7 h" |( l8 d0 u. a# x% M7 y/ T
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);3 x* k: Q- D5 n1 J& r

, M/ u0 b7 u/ P& k9 w$ C    if (my_data->radius > 0)1 R6 l5 o2 g5 x% \5 u" P' ?
    {* y6 J8 T1 Q: W/ F
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));) c- Y$ W2 g( P* k4 U  ]
5 t1 f( D& \& r. O
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,3 }9 ?# f9 ]  P
            axes, my_data->arc_center, my_data->radius));
# `0 A! d- d/ y1 [    }
8 E& r- e; a, z6 W$ V; ~7 d6 @}6 ^. T; |. n% p8 b; I6 c

( o+ r3 ?( l9 C( rstatic logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)9 F1 ^$ g! S% O; i! J& w
{9 P* b$ _" S8 ^; ~9 j2 a
    int
6 d$ i) D- D- ?9 E* u# P9 j        resp;/ j5 W4 l" o5 H( x6 V  [
    tag_t: v3 ?2 W. S$ ?: l2 O$ I1 B; O7 ?
        view;0 ?1 n7 K& @/ z# m1 m
    char5 d) j+ @$ ]. b
        msg[133];/ h5 k9 K& e7 C/ H
    double6 [/ f' v4 a8 t: T; ?/ {$ r
        on_arc[3];  w* j8 O9 r) Z, q
; y5 E8 x! l. O: H7 O9 L' T: w' u
    sprintf(msg, "%s center", prompt);
& b/ C  r+ ^9 _$ Q$ m    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
. R9 U5 f* T$ \( U; j: G        the_data->arc_center, &view, &resp));
3 n. i$ c5 l0 Z8 S/ W/ u$ f' r    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
  L$ f) K& h. E$ r4 j: F
: w$ Z& }, f! p0 O9 U    the_data->matrix_tag = ask_wcs_matrix_tag();
8 k7 p- q$ l1 Q5 }6 w    map_arc_center_from_abs(the_data);
) ]' w2 A0 W% J' Q$ @* t7 ?3 g7 V5 d& T- F, T$ G4 L
    sprintf(msg, "%s point on arc", prompt);) J/ }; r+ u3 u( R
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,9 ^9 m( ~; ^5 i: \' Y; @0 s
        (void *)the_data, on_arc, &view, &resp));
+ z% W* E6 g0 L, B% Z3 H, ~2 h) q$ F7 q    if (resp != UF_UI_PICK_RESPONSE) return FALSE;) l9 N1 ^. y# K( t7 b2 A7 v1 M
0 L' x9 x" G4 C* F
    map_point_to_matrix(the_data->matrix_tag, on_arc);0 V6 B6 ^& r# y, R" v0 J

  u; `. f2 \, s3 L, a    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);6 r% v. u) f& i- ~0 z) M" U

! z2 W& `/ w2 K% F6 ?* B2 f    return TRUE;
' d  W9 t" [8 N}[/mw_shl_code]
! I, m0 n9 b9 _" V; G- Q1 H/ K
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了