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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
% p% A) T2 |- D" Y) B
4 U9 h7 h! s9 c  Z9 Y* R6 F5 W3 f
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
  B( [4 d9 o2 s2 t( V  h3 s: d& `) f. t3 s6 S" P
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)! G5 I# j. w2 n- v
{
3 I8 k# T6 |8 ~2 p/ X3 x3 @% K    int
2 L# d/ S6 ^' S2 u8 X( G2 n3 M        irc;8 x% ^, d3 p! A
    double7 ^" X3 n8 y0 s) M
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
6 i1 v( j+ `6 }9 ~) d* T) h        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},* Q6 L' g) i( L3 a
        mx[12];1 G) |& w. Z" ^5 g" S; H

$ T" ^8 k  c' I' w    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
2 S" \- M/ I: L3 y( ?) q% A    FTN(uf5940)(abs_mx, csys, mx, &irc);
; @  C" J5 V5 P9 x- u3 ?  W9 _    FTN(uf5941)(adata->arc_center, mx);: h/ W5 K( i- y+ Q8 G0 Z
}
/ U9 w! ]9 }7 ~5 u7 \/ Y
; h' P0 v! _( _  a) _. m" Estatic void map_point_to_matrix(tag_t matrix, double *pos)
* S% B) q9 p/ B6 v; l2 O6 z{" V  W, X6 o6 m
    int
5 U8 i# L) Y) c) W1 q        irc;
- w) p* d4 h! m0 o    double
. ~, \, _% |# a7 ?0 _- [. x7 R! n        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
5 _1 K, e  M8 k  y3 {        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
# X/ }# H* h2 }6 B, F/ P' r9 E! }. L        mx[12];" l7 S& `7 Z( U

: V- T/ {6 Q/ F/ k' _: m    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
) W8 n0 [1 o# j9 Z- q, b    FTN(uf5940)(abs_mx, csys, mx, &irc);; u( ^; v/ c& W
    FTN(uf5941)(pos, mx);# ~* ]  b  L# [9 o( b( M
}
* [  H' ~# {# j: ]0 E! ^
- T4 k) F2 n2 o, D4 i/*  This motion callback emulates the rubberbanding circle seen when9 E; \# e% m) ~# \; y
    using the interactive option Insert->Curve->Basic Curves...->Circle  */+ v1 X* \0 y0 G4 {: L* i% ~7 C8 y+ ]
2 O9 Y" N' f5 D$ d0 Q' r
static void rubberband_circle_cb(double *screen_pos,
; L  A  l! U  e4 {/ ~1 o& A- Y    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)2 q0 p( c4 ^  _/ C2 C5 q
{
% v1 g0 [+ R- x3 F1 g. P    double2 r- Q: ~6 A3 f0 W# Z* X* R
        axes[9];
+ I# F9 h! O& p, }; W% p1 A    UF_CURVE_arc_p_t
& y2 O; a0 V  J% h9 y# m# ]        my_data = (UF_CURVE_arc_p_t) client_data;4 C1 p* o7 ~2 [: {6 g2 X& u. Q

6 I) K3 O# J. Q" o& F    map_point_to_matrix(my_data->matrix_tag, screen_pos);
0 b0 Y  Q( N, O% S    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);( T* i/ }3 U9 X1 x
, ^& p  _3 R( g' ?
    if (my_data->radius > 0)& y0 o" T& j: j, P
    {6 P9 S* z# v! C$ G; h) d
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));6 B6 \2 K9 w+ F3 U  D

( C8 F/ f; J$ k5 ^2 f- m        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,4 z$ V. `8 B5 c( ^4 ]# s9 v" M- H/ ^
            axes, my_data->arc_center, my_data->radius));
) w0 w8 i2 j6 {9 z/ v% x    }2 g% G/ D, `# x4 j: M) G$ T3 B6 ]
}
$ ?. W7 ], v4 J: q+ T' b& B# B% s$ |$ L+ _
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
- M- k# V9 |3 D& x. S, x{
) U! h0 ?% a$ M) u" ]1 z    int
5 S8 ^+ M3 x/ y' J/ X  c" x        resp;) L& g8 }2 e) q  V! ?' C3 C
    tag_t
4 M; ?$ c" M! [; S) I2 r        view;6 n- W0 I6 n7 P7 t. R' h
    char
# E5 h" M  m) B2 K0 C& v        msg[133];
' q7 l) i. X! h2 B- @    double
9 l, x. V5 L5 ^; G  j. y  m& E        on_arc[3];
8 ?- y1 D- J1 L+ @2 l4 r
- e+ t7 i9 o. w: _& F6 l4 b    sprintf(msg, "%s center", prompt);3 N$ o2 r0 E* r2 a8 f- Z
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,5 d: `$ w" [3 R; `; m0 j# x
        the_data->arc_center, &view, &resp));1 b- [% Q% [' J
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;: u2 a1 Y" n  ~7 f

& D4 h& \- p5 U* `    the_data->matrix_tag = ask_wcs_matrix_tag();
% S" t& K6 q3 u. p( E3 m    map_arc_center_from_abs(the_data);8 |3 |& {; T) l1 ~6 Q8 l, D
& c, p, a- A0 I4 l6 b: s
    sprintf(msg, "%s point on arc", prompt);
" x/ J& u& l0 d- ]7 ?, n- e. s    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
2 Y# e/ S% O& k" |. b3 {4 [        (void *)the_data, on_arc, &view, &resp));
" H- F" k) h" z! ~4 D    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
) K$ i/ X1 K/ r3 F9 s
1 W" o% A1 [! S    map_point_to_matrix(the_data->matrix_tag, on_arc);
" j; _1 Y& ~" Y
5 z( ?5 p- H# G& [9 F1 N# _    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
5 B7 M6 }1 o8 E# {/ _2 U# e# ~# b2 n! t
    return TRUE;
) u2 U- q& @4 {1 T3 c- w! A}[/mw_shl_code]% S: U" {/ @6 b6 @
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了