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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

: E7 Q, d- I8 U5 H4 C6 o* P
: Q) F3 h( u# R9 A0 q( Q+ `* ]# L8 ZNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点0 M! O, d' z0 j6 [; A9 q0 R
+ V" _+ p* O' b
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
3 |1 Z% D. N4 y: H0 e' Q% }{
6 B! D% R" q: D' s* M2 y    int
5 k7 ^1 V% ?" f( j        irc;
/ k# w1 ^; a. c' \2 }1 U: @# [) H    double
0 e6 S: v/ ~7 ~4 [! ?: c; B        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
4 S/ R  W$ ?, B) o6 A        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},4 [' F5 q4 B' y0 x
        mx[12];
$ p/ \2 |# n9 g) M' h5 C* _# T* `/ G0 d! E" V* d" O
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
$ ^: x6 z# J; _+ g' G' n1 C: D    FTN(uf5940)(abs_mx, csys, mx, &irc);/ u) {. u( ?4 D' y! {! d
    FTN(uf5941)(adata->arc_center, mx);4 T, v$ }$ T3 Q1 e  j* Z
}, |5 i2 C+ `& J" u9 P# w# G
+ _: [( F$ Z+ i- V1 o9 k
static void map_point_to_matrix(tag_t matrix, double *pos)  e6 Z; v( e! {; C3 O- m% H" j
{
4 D* w2 m' b; s+ t" T: N/ U! V+ c    int
7 l+ W; D. `" H* h* s) I        irc;
# y9 e7 B/ P  O. D9 u: u    double; J. a) |8 ~9 E7 d! e
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
- }) K5 g; i) W: X8 V: D7 r' P& D        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},8 G/ G' g- v  B  Q0 z1 _  V
        mx[12];
: D: ~- @* t. b' _) ?8 s0 c7 M  `+ ]# s" ?6 e
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));. M4 J( F2 _6 a% G
    FTN(uf5940)(abs_mx, csys, mx, &irc);) `) l8 G0 W6 Z3 r0 }
    FTN(uf5941)(pos, mx);5 K" W0 f$ k+ H7 w  l  i6 k9 F/ N! K
}
+ P5 B1 b9 P. Q0 p
9 J- m2 B3 s# E3 x3 _, V/*  This motion callback emulates the rubberbanding circle seen when
( x  g& g- Z- D/ ^( O    using the interactive option Insert->Curve->Basic Curves...->Circle  */+ @0 d, s5 e$ X; F0 U
0 g/ `7 ]( n4 J; u: A0 Q
static void rubberband_circle_cb(double *screen_pos," d0 f: {( M( f- l6 n
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)$ `# u$ H  p& k" H: E
{
- |0 L! ?- `- Y5 R/ e) y% k    double& [+ B3 |/ W% ^5 ]
        axes[9];+ l# T$ E: e& m4 a
    UF_CURVE_arc_p_t4 K: a6 c+ O# l9 _
        my_data = (UF_CURVE_arc_p_t) client_data;  _8 n2 p5 y* x/ u

( N! T3 P/ _; |% M- R8 F    map_point_to_matrix(my_data->matrix_tag, screen_pos);
) t' _; y+ x4 b- [$ i/ D    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);1 _9 X; }& g3 J3 h9 R

( M$ L$ k- h- M6 ]( L2 J6 u    if (my_data->radius > 0)
1 Y" b: ?9 t" {1 e* {    {$ N. N- h6 T( w5 Q
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
) y& y' I4 C+ W1 N$ J/ d, p$ q3 i1 X- x3 |+ w6 X5 P" q
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,/ m' H. a5 d6 [+ r
            axes, my_data->arc_center, my_data->radius));
) `+ n/ b# \0 A* z4 y6 n    }
# q: O& C" Y. @9 X) R}
: w* [+ {2 K& z9 a7 d4 ], f
/ \) ^1 u' D. S  hstatic logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)$ a+ y* b8 J+ }) K- r# ]  y# l+ _
{
" B! w. E3 L# W) F7 `5 N0 r  }( Y    int9 Q. u- O/ e# I1 d) ?# N$ s$ o( F
        resp;
# ^3 _0 P( p$ D    tag_t
% b( N9 ?, ^3 o  D1 m( b- m        view;
- m( s4 q# Z3 F% N7 I  S    char1 P, {2 P$ A3 {. n( p) i
        msg[133];
( v# D/ R5 i8 j    double
- l$ L4 y3 e9 o9 P- r        on_arc[3];3 h& |6 E1 ]- m* ^

6 W; Q% m6 i$ h/ B; y# ?( u( ~7 G    sprintf(msg, "%s center", prompt);
1 r% ~9 R9 z5 V( d& h- _    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,2 J0 I: l) a, b. H+ r: B" H# }' ~
        the_data->arc_center, &view, &resp));
+ [! ?" L: _3 `- b1 p    if (resp != UF_UI_PICK_RESPONSE) return FALSE;7 N- \0 T6 u8 s7 y( t$ t
2 B( v0 I' F% @3 k# Y
    the_data->matrix_tag = ask_wcs_matrix_tag();
9 R! ~1 ^5 \" w2 M; m4 o, ?- \6 v    map_arc_center_from_abs(the_data);) }6 x2 ~; e/ {, Y5 d$ v
: j- N  a* m) \" _/ P) @
    sprintf(msg, "%s point on arc", prompt);
, I1 s' I6 v: P# w. m+ m    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,! Y1 t' \1 P7 j) k& B1 t
        (void *)the_data, on_arc, &view, &resp));
* E8 }! ]3 X7 ~: X# X6 _    if (resp != UF_UI_PICK_RESPONSE) return FALSE;* q' O9 U3 [( }% M" i! F0 j0 `3 ~$ ?
- g% u. [( F0 K" V8 |( E& \! D
    map_point_to_matrix(the_data->matrix_tag, on_arc);: ?, r( ~( @' }8 w% r
, @9 j% ]7 n% i( C2 ~
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
/ J8 K0 X8 t0 |3 i1 f, E' r' r8 F2 a3 ~; p  H' q
    return TRUE;- G! @6 x" ~" v4 p2 T( A- c
}[/mw_shl_code]
: U4 h5 y' P7 ]: f' U6 @' H
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了