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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x

& V1 v. Z6 ~% _) q& H& e! @! w. i8 n
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点; y& D" O4 z3 ~
5 h! e4 d; G. a* y1 g
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
1 X6 ~9 U- |8 b1 J" x9 l{: H( t* h" R* Z- Q0 N( J
    int
+ E- }4 _, r8 ?        irc;6 f0 j- [$ O8 R
    double2 E* h+ D$ G) Y+ ^$ i3 L3 {
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },, z- w- U, M( Q& ~
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},7 G6 C, M) {! Z/ Q2 r& a- _
        mx[12];
8 j% ?# a5 l+ c! o- V
9 L! g5 m: R% Z+ C. {# c    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
; v; q. I. T  b6 q+ }% u& _' t    FTN(uf5940)(abs_mx, csys, mx, &irc);, |# P/ K$ @/ }$ y3 ^
    FTN(uf5941)(adata->arc_center, mx);
1 U- D2 D  A2 {) M% P/ V. m$ B}! m& H: o+ d, }6 v; N" `7 |

, N% N# P) K5 ]static void map_point_to_matrix(tag_t matrix, double *pos)8 C5 e4 H7 m: N6 |
{
  V& _+ G8 X9 P  |/ K    int
$ F# u3 S2 F8 [( F) l1 O, p) F        irc;5 w# T2 X4 q2 s5 r# p: ^
    double
) O, \2 t: j. X' `        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },3 t! }/ q* @5 e6 S
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
0 \: m  r6 Z, D3 f        mx[12];
* a( ?2 l+ D: K+ h9 E7 h9 I
5 D9 t2 _  \+ ~9 @" r    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
2 j* W7 S0 j& }$ G# f. [    FTN(uf5940)(abs_mx, csys, mx, &irc);  f* X# l: Z* ~/ r. }
    FTN(uf5941)(pos, mx);
; a( k. Q/ ~9 U8 f4 z}- u0 Y1 V* A( l# w' x' T
' @. H+ C" `. s1 {( p+ a
/*  This motion callback emulates the rubberbanding circle seen when
: F0 D- Q( a* `7 t. u3 @/ Y    using the interactive option Insert->Curve->Basic Curves...->Circle  */# q' ~" J# X" @' W( i* N' G

0 l! E9 B; `; K" m! L- Xstatic void rubberband_circle_cb(double *screen_pos,
$ ?) u- z7 d4 y# M. P# E8 |    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
0 E4 r: x+ s9 U  a{2 O% D' o  M: N4 J
    double$ {: L- C( p) V5 O
        axes[9];/ f4 m& w7 U+ v
    UF_CURVE_arc_p_t' B/ J7 [1 q9 @, v8 C* S- h; P
        my_data = (UF_CURVE_arc_p_t) client_data;3 ~/ Z' Z0 q) c7 q
, c; Q6 M3 b$ K6 J9 G1 t; M1 X' }
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
1 d! \  F9 c2 o7 ?: d$ W7 g& j; B5 ]    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
" D- O% ?( B# S/ v
2 C. @( G9 v3 Q0 s    if (my_data->radius > 0)
: B7 x7 G. q/ C" A7 M5 t    {
9 t  ?" b- d7 O! T  @        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));! N, @* N1 f% T

+ \0 o& l1 c( z& X4 N        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
* x- Y! |7 c+ R% w- Z5 d            axes, my_data->arc_center, my_data->radius));
9 F6 u! Q/ A* q; S- ]) Y5 U    }
) t" B% }7 f+ ]! U4 q# G0 h% z}
, K! s. m5 \' j' l
0 q" }+ ]# w( ?static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)* Y2 L: m# Y' p1 x
{
2 u9 M$ g; x' |/ V9 a2 p9 e    int
- N+ |; _. i% e1 M" G* M        resp;( V+ D+ S& [2 \
    tag_t* G$ H( `6 c1 n# z9 o
        view;4 g/ s- g3 n0 J  L
    char6 ]1 E; `5 S: A8 ~; z) j
        msg[133];1 m% K) c7 x1 G" ]8 T
    double  ?! z( g' e8 w  G3 t0 h
        on_arc[3];- N; Z2 S) R6 Y0 }! s$ C
1 k7 W: Y; F6 |( D0 ^
    sprintf(msg, "%s center", prompt);
$ `4 g9 f" I- h/ ^6 Y# ?    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,, e  n. P$ s( @/ u/ B' v/ I5 g
        the_data->arc_center, &view, &resp));+ i8 a! b2 L' q" @
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;# e/ }+ X) |/ K' t

" E0 D0 j( V! K; V; a    the_data->matrix_tag = ask_wcs_matrix_tag();: b+ k% E, [  Z+ n( z4 e
    map_arc_center_from_abs(the_data);. f( v0 V* x6 p

/ |& N. A2 X5 k& `! D    sprintf(msg, "%s point on arc", prompt);
2 n% Y$ W, ~* K$ v    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
0 Y' P8 ?/ V6 ~4 @. ]        (void *)the_data, on_arc, &view, &resp));' ~3 ^- n% d6 c- z$ {" o$ e3 k; }
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;& p/ m8 A4 N: K. W/ W
. g# v  B/ c, P9 J7 ^) b
    map_point_to_matrix(the_data->matrix_tag, on_arc);
! k9 _( M: c7 T; T- f9 Z
8 F3 O& z8 B3 J. \+ q9 o4 x7 R/ p    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);3 O5 b$ u% l6 k2 Z2 G7 R
9 q( l8 `- r& i5 P
    return TRUE;% [+ ~- h% @" R8 Z
}[/mw_shl_code]8 Y3 j0 u$ |" ?/ Y/ n, b$ ~4 }# N
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了