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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
  |4 f% }7 w. D
  S! [& X7 h  s8 j
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点5 C) E+ i( `7 M8 |( z

: Z7 z% Y3 ^2 d: t- {[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
( i' L5 O0 v  `# u( F{
% b" A1 c/ Z5 w    int- ~9 j) d' o; ]4 M7 I1 f5 \
        irc;
6 l( p* l" f3 k* f' v5 u# a7 d! u    double
. B# ]2 Y" Y, F        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },' S; f  ?( n# X: U5 t# ^, }  b
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},$ q( _1 Q4 X) v& B
        mx[12];
) o) r5 P( z/ k" }. V4 `$ z2 c$ f3 V' p, f
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));, j, v! @. g( S2 o0 `
    FTN(uf5940)(abs_mx, csys, mx, &irc);7 G6 i9 d" ~) @  R4 I6 Q9 f
    FTN(uf5941)(adata->arc_center, mx);
# ~- ?3 ?' f7 m, x}8 M. v# X  x% {$ H+ P
2 G- b0 A0 P. G  Y5 S/ T
static void map_point_to_matrix(tag_t matrix, double *pos)9 ~& X1 T$ s2 K0 U1 @. ~' ~* o
{
7 l( @3 e2 y. g! H" A1 P    int
: N3 w7 s' ]$ i# G8 X        irc;
$ e/ u' Z0 t1 c. W6 g    double
2 W/ @* x% c: {9 n! Q# X2 D        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
6 x. o: W& @) |# q( o/ W        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},- l2 o) Z4 S$ g/ }  N# H+ `
        mx[12];2 l# U! L: e& {+ ~/ b
2 q( G& h& S9 b9 A; ?
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));6 |0 _  [! C$ b7 b$ G+ r. Q: e8 ]0 I3 ?
    FTN(uf5940)(abs_mx, csys, mx, &irc);+ y, T3 E& U* {* q9 A: @- G3 j
    FTN(uf5941)(pos, mx);, Y8 ~# ]! w) R4 m
}
1 C, }6 C- j9 k- F" e( p' Y$ }$ i
/*  This motion callback emulates the rubberbanding circle seen when
( c( i/ U1 n# x4 a& v    using the interactive option Insert->Curve->Basic Curves...->Circle  */
- i+ ]% o, \( A( n0 m! U& Q
+ }! Q4 Q6 p$ L$ o+ Hstatic void rubberband_circle_cb(double *screen_pos,
5 v! n  [3 P* t/ r    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)6 m9 g) |, k; }# J! g7 a
{2 |! E% D9 |0 j
    double8 |4 h/ W$ A' r  B% i
        axes[9];
1 i/ C( k9 Q. c6 W    UF_CURVE_arc_p_t' A! D7 F/ c( m! g
        my_data = (UF_CURVE_arc_p_t) client_data;7 a: x$ W( @7 Q+ m
1 T1 h9 i& T7 S; _, \
    map_point_to_matrix(my_data->matrix_tag, screen_pos);' E- d5 J3 z# N% ~; Z7 G4 |
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);7 o( G$ r! u- b1 _2 \! ?7 w

2 Y+ Q- C# O. S# X0 r) |    if (my_data->radius > 0)
9 V( U! L: |0 s4 q    {& x- t. Q+ J6 {7 {) r1 P! C7 {
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));4 ^& u' I; a, \5 a
; R+ G6 s3 p( I8 A
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
( j/ n0 S! R2 z5 X            axes, my_data->arc_center, my_data->radius));
+ u3 N; ^$ G# a: k  n6 B    }* \. [, ]/ O' L3 M1 |
}! H8 n2 Z2 S5 y0 J' ~+ z
: u# [: Y" ?/ r0 L0 }
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)3 r1 S5 g" C$ V* I+ t
{
& v$ x, i" B1 ~% W( G! m! a( h' W    int+ J2 w! |5 \& J. W+ j( i  U. K4 E, U
        resp;
5 n% ^( n. J+ _' A1 K    tag_t5 _: c' Y  X1 T, o; F
        view;
4 z% _' o, Z& b' c2 `    char  b) G# b8 O8 b. G1 q  e, _2 b
        msg[133];
3 W4 z, Q7 r7 @! ^% y8 j1 ^; q* Q& X    double
5 L5 Y3 T& X0 T& z3 D        on_arc[3];
0 y, y3 p3 d7 e. b- W2 B+ U0 R
, ^7 j. F; Y8 s    sprintf(msg, "%s center", prompt);
, i# y$ N' x- \& q/ s# }9 n    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
% ?4 C9 t* [# U$ G        the_data->arc_center, &view, &resp));
$ E  i6 Y$ j* L  ^    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
3 v6 j8 S: c/ J# C2 h7 [. A" c0 j9 D
) e  ~! h% y! ^4 t6 p, n    the_data->matrix_tag = ask_wcs_matrix_tag();. [+ a( Z8 `% @4 c
    map_arc_center_from_abs(the_data);7 c; B9 P5 Q, t1 e8 m
) f8 i% A9 P& d
    sprintf(msg, "%s point on arc", prompt);$ ~2 j( I/ k; L3 G" w7 x
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,* K& ~# b) q& L# I: X$ U
        (void *)the_data, on_arc, &view, &resp));
2 Z! R1 x6 w1 T) e9 A9 z& ?7 X" G    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
/ t% L4 [4 u0 W0 E9 m
3 ]7 [* a8 \8 P    map_point_to_matrix(the_data->matrix_tag, on_arc);
/ l, [$ \# G  R. C6 U4 M& [" p! a$ M3 }0 ]+ t+ G+ J
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);- Y& H+ z! l! e) G! P  d) v# Q- `4 @
1 o. Q( G/ m' W, u8 d6 w- H- V+ ]% w
    return TRUE;
. y  R0 G2 V6 J! T7 m& {( R& Z  U& Q1 w}[/mw_shl_code]
+ `  U( v" l# b. N. p# ^8 t
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了