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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x

5 ^) |: A3 o: i" T- w0 K
- u1 t' r. D5 YNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
( M4 W5 Y" g# t3 p
6 U8 h: G2 O& ?* `[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
9 X: d: Q7 M  k; V{
& c5 d* V  o2 }2 ~( }9 A1 |1 a1 ^4 Q    int$ N7 P( b9 @6 J; [/ ^; P1 q
        irc;
* O3 l0 L  [& `# j* |; V    double
8 k2 H; |2 m; q; p; |' ^        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },* S0 p7 r' V' V! ~5 v' U% T0 j
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},7 x3 D  f5 ~; ?  p  b
        mx[12];7 `% T  C* C1 A  N) ]6 h

9 Z( }9 I/ P! c! ?. K    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
' P& z( J5 [* k. F, {& P: q% E    FTN(uf5940)(abs_mx, csys, mx, &irc);
$ \4 y, e, g2 }: t" r: g    FTN(uf5941)(adata->arc_center, mx);8 {3 i) U' Y4 n8 D/ _  R
}4 l. }6 |. _2 X8 }+ P- B0 ~. V

9 x, M! q& b0 h$ L6 _; Wstatic void map_point_to_matrix(tag_t matrix, double *pos)
# O. s8 c) ]. m' M7 R% C! ]' q{
) ]$ ~" p/ [: N+ @4 K    int+ w% i2 t1 K" ]: T
        irc;$ H2 \: X4 ~* k
    double  v, k2 K8 e' p# \6 {
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },0 a; L- @8 P: V5 ?! X& Q+ Z3 l
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
! a* `) w( u# T" D7 q        mx[12];3 X$ a9 I0 z' `6 d: Z
0 x- H7 ?/ q0 l$ I
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));4 t( @& F: ~: T% O& H
    FTN(uf5940)(abs_mx, csys, mx, &irc);
- Q' C' ~  D) p6 \7 ?9 I    FTN(uf5941)(pos, mx);
' s: `  ]8 H5 s; @0 g7 l+ p, P}2 u" k9 ^$ a# q( f

9 H& ~$ f. c$ Z/*  This motion callback emulates the rubberbanding circle seen when
; |# f4 x5 E+ l! E/ {    using the interactive option Insert->Curve->Basic Curves...->Circle  */
$ R8 ^( ], q! b2 M7 H7 B; ~" v1 E
+ ?( i6 `. R- E3 e5 J4 Q& Astatic void rubberband_circle_cb(double *screen_pos,
  B' [5 T$ D$ U9 J    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
9 s3 D8 |8 y  [{
3 C( M' M4 d0 W' _3 i+ Y    double5 A( b, @% B# a% a# a1 q! R% Q
        axes[9];5 s! i1 |5 {+ \8 U  P) M9 Y5 |2 |
    UF_CURVE_arc_p_t
) k  m9 I8 p+ g/ G, X8 C        my_data = (UF_CURVE_arc_p_t) client_data;
! j' `" C: V+ Z% J0 O, g: l8 Y; m5 t
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
- b$ _: w  S' T9 |$ l; M. P; h    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
, n* |7 X! ^+ N+ p, R$ q) N; D; L& @, S8 _* g* P, P0 ?- Z1 h* G; z
    if (my_data->radius > 0)
: b  t! P; ~+ c5 V6 e    {8 C, j( J* u' \  v" Y
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));& m+ F" }$ c6 C# [4 q. f, L3 s2 w

8 E% J8 ]$ X7 ]% d6 ~' T        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
' L$ [" H% k3 n( e( X9 Y            axes, my_data->arc_center, my_data->radius));
/ ^# W7 g* F, m' A! |2 I- ]    }4 y! A! d1 L9 B( {  p1 f) v
}5 t! C! i& ]1 l5 z$ t+ h
5 j5 P4 ^- U5 a0 {; D. x) |
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)6 q9 X% r# L+ B4 q/ Z
{! p+ n7 Z( M6 X( @, s3 q
    int/ g- {# M# }5 i* l; k) w
        resp;
9 @! q( ~( [+ V: E    tag_t7 P* `: l/ b8 a5 ~+ P$ I
        view;+ l: s; T6 l4 ?" N7 G' q, ~
    char
9 z8 ]5 P: N3 x( l* l+ ?/ x        msg[133];
) Z1 f, j1 C* L; i' a% r    double* {$ @- K0 @; {8 R' h
        on_arc[3];* T% Y' O( k3 h) G% K+ `; q
) F- n# n9 e/ }- j# b, u5 k" W. H
    sprintf(msg, "%s center", prompt);
# ~8 a) @7 i5 A  k7 _; j2 Z    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
0 e$ W: h; o6 |- Z        the_data->arc_center, &view, &resp));
4 Z2 Y2 G- T( o, G, y6 J5 x  Z" P    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
) T0 [) G$ p& A7 O& t" J& k' _; e7 K& Q, A. y
    the_data->matrix_tag = ask_wcs_matrix_tag();* [! ^3 U5 b. E& [! r
    map_arc_center_from_abs(the_data);9 I$ }" y" m0 Q( V
1 T6 Z' s, T& C0 T
    sprintf(msg, "%s point on arc", prompt);1 G/ K" e$ A+ x9 v4 }# D/ l; ?' r
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,3 [/ e6 _$ p5 ^. h1 R# a# c6 f
        (void *)the_data, on_arc, &view, &resp));! l" c0 L# k# O
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;# \9 h' f& n0 r" w: ^. J
% |1 |/ y$ g; J2 q. i- C0 k# B! c
    map_point_to_matrix(the_data->matrix_tag, on_arc);
. t2 o" P% m: Q7 ]' }' t4 b. T8 ?: l0 k! |4 o- C7 k
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);) V7 L  b0 M0 K
8 @0 g! z( r# y
    return TRUE;+ Q7 l6 c/ j3 W& X% d8 Z
}[/mw_shl_code]
  O! ^" W( \9 ], @
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了