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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
- X! y, H0 e& n2 s4 ]. w+ u/ q
$ o7 S7 O5 {( @
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点0 ]1 q! i& q$ ^4 Y
% t. B5 q; b5 i
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)' J0 n9 R0 ]% G- X* v8 W. s
{
" W* [, r9 \5 x; C    int
: `* M0 `4 J4 Q0 W; c. p- T        irc;
/ n" z" S1 p1 U* z6 b    double
7 H3 j% }: e0 R' t        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },; ^! E) I- |2 ^% F. l/ i7 a9 \1 t
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
+ F0 v$ O3 ?6 Q- X' \( S        mx[12];
+ Z0 N# Q6 F7 d" q8 Y4 K& d/ F% O8 ~% |3 i
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));$ o2 f0 d  d1 `1 j/ A8 l, m
    FTN(uf5940)(abs_mx, csys, mx, &irc);
5 A* R: E, F0 E: b    FTN(uf5941)(adata->arc_center, mx);( g; P% O7 |3 F; b$ ~
}8 f5 `+ H3 S# n! Q5 V) g
6 ^5 W( N2 l9 i8 M  g( A& ?
static void map_point_to_matrix(tag_t matrix, double *pos)/ x; ?" f. x* h6 z5 o4 z
{1 [+ Q2 i  O) ?1 }5 W
    int
3 J2 ]6 X& Z/ b5 D$ ]7 ?        irc;( E+ q/ Z' l' m5 B8 G
    double- g! }4 y( S, S5 _" o- Q# {) z( [( A
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },  L: y- l+ `) E% T  q- G. L
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},+ h$ u  \7 c; P3 M+ S8 k
        mx[12];
8 g. Y6 M- Y! X2 b( R. w4 }* M9 ?& Q
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
/ L: S% x0 D& E) l    FTN(uf5940)(abs_mx, csys, mx, &irc);- V" X# B" ~4 O; i, q( O3 V; c
    FTN(uf5941)(pos, mx);; \$ p- A- w: k8 S2 R
}" `( U( T. J% {( ?! O9 U5 O1 O: g
$ G  X9 f" n2 g$ d  `: `0 f
/*  This motion callback emulates the rubberbanding circle seen when
) L$ e6 Z/ i5 P0 T) Q, V    using the interactive option Insert->Curve->Basic Curves...->Circle  */
, S5 ^3 l0 O/ t+ V% s+ J- a# w  z- p/ \! F! q8 k
static void rubberband_circle_cb(double *screen_pos,7 w; K# y1 w& w, ^9 K& N
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)6 u8 d$ U; x' F# F
{" a* D7 k8 v% p1 S. G
    double$ |4 C% D/ `1 o0 E
        axes[9];
# J' b. P9 _6 b    UF_CURVE_arc_p_t
6 L) m3 }3 X) J        my_data = (UF_CURVE_arc_p_t) client_data;
  d# }4 c& I0 T4 u& P
  N0 k  q% A9 ^9 f    map_point_to_matrix(my_data->matrix_tag, screen_pos);7 }. `4 ^5 o2 K% L8 p) S- G$ W0 ~
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);1 u9 p/ N% ]+ h/ y

" R! {( {4 L) [/ a    if (my_data->radius > 0)/ v; v' h, a& Q& ~
    {
0 D0 @3 N6 n4 @1 h        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));) Q0 @! v: c. g+ L: V
# q( ~: V  J4 w
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,9 \$ k1 X) b" y2 q+ X
            axes, my_data->arc_center, my_data->radius));
6 J  j4 N" J* X7 q$ I    }
% q- ~) s% ^5 _* q5 ^}
! r. w8 F2 T* h- F5 l. X' o/ C# X$ m4 I' z  L$ O7 j: d, P6 c  f
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)* h5 [$ r0 ?, \4 ~' q5 R
{
8 q9 V. M9 c4 c( \7 _: a    int+ Z' }( @3 ^2 n  ~8 S
        resp;
4 @! S. z7 \7 I7 A! I7 d" J- L! I    tag_t- {8 m2 G4 p  [6 u+ S
        view;
* [1 z& Z  f, T2 E3 d    char, r$ T: Y# T8 ^+ S$ K
        msg[133];
* b7 r: N3 @- \% H/ C: N: k; ]    double4 L7 ^- U% |- o/ l8 o) T
        on_arc[3];
& ^4 {. a6 @1 E, c0 i9 ^# a
# P" K+ K9 j. E) z$ f    sprintf(msg, "%s center", prompt);' U* i5 ^) t% _* z6 l( {
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,& w0 B, ~4 W7 Q6 D8 ~( o* v0 a. ~
        the_data->arc_center, &view, &resp));/ g. S5 s  Y' D' y5 _9 w) W
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;* M0 `' y& y0 W1 y3 D! c

% P+ ]' d9 G0 V4 L" J% X" a    the_data->matrix_tag = ask_wcs_matrix_tag();9 }- ~* w% r) b; X5 k5 d
    map_arc_center_from_abs(the_data);9 l- q- j: i# i9 _9 C6 E

; w# |/ S2 A: ~- P    sprintf(msg, "%s point on arc", prompt);
5 D1 F+ i: M! R. V3 T    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
& e: x1 z# u: u' J" h) X        (void *)the_data, on_arc, &view, &resp));$ \% K4 |9 _. r: E5 l' Z1 y
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;2 O" }- W" Q% O+ p" |9 Y
7 u2 C0 o$ T3 A' P1 w2 X1 P
    map_point_to_matrix(the_data->matrix_tag, on_arc);
2 n) r! Z( ?- M8 B0 k7 l: R# _/ Y' J; d" H5 s0 N
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
6 t$ a. d& h, H8 O. _; w
* f" d& ~7 z' W1 g7 }3 J" Z    return TRUE;
2 s' s7 {9 O1 K' A( G3 Q" b}[/mw_shl_code]
7 F8 B2 A3 r2 b/ ]* r9 o9 D& ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了