PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
7 V) K) m4 J. L  h

  j2 g# k8 U& y# w8 s$ B/ }$ d, @NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点2 v# U' J3 i! s2 P, b1 a

- M+ k! G5 N3 A  |7 s8 |4 p8 C[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)9 |$ O7 M3 c* Z* \0 x4 i
{6 K! G  g" l3 d* A3 s% w. H8 X
    int
! n/ I& k  g" O: _0 X4 o+ z% J        irc;0 F; J. h! s$ X# C6 \
    double
  J! |  C6 u: q& {        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
5 D1 a$ K" ~1 _$ s0 v# R' K- O        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
; C3 d- g  K( o        mx[12];; _1 _" z. W9 v' A; q

; z8 O) k  _! Q& C- d    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));% y; X' ~4 p2 K, h  R, a6 o3 k2 B7 r& Z
    FTN(uf5940)(abs_mx, csys, mx, &irc);/ Z3 @! \7 ~) L
    FTN(uf5941)(adata->arc_center, mx);4 Y( d( R6 q0 t4 ?$ T! H
}' W5 H* o- o' J2 G% z9 _, b
% Y. X( D' r+ b5 b
static void map_point_to_matrix(tag_t matrix, double *pos)6 \9 `" G, ?  N. n% w4 Q% L+ x- T
{/ f9 m5 }" D; s2 A3 B; i
    int; G- r; m! M8 Z3 ^* `$ [
        irc;2 q. z  T0 K4 ^* P: A" i9 W; `
    double, M+ S; r. m1 g/ x
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
7 B2 K* O6 M6 V( U% ], I+ s* h        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
: s- j6 y; X7 s) R, T# ?        mx[12];( A# j4 I, M  D* H% z
+ |4 U4 n" f, |. y  W3 g6 Q0 }
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));  e$ T" z4 u: ~4 C& o/ ?
    FTN(uf5940)(abs_mx, csys, mx, &irc);0 r2 F, r  e8 ^/ E6 i( ]2 V
    FTN(uf5941)(pos, mx);
3 L; x' k" I' u0 u" `, N}
! m* `2 a# `. x) a  [+ m* T+ f" Q# o% g9 \/ h' D
/*  This motion callback emulates the rubberbanding circle seen when
0 d1 X( g2 Z& z% b! L    using the interactive option Insert->Curve->Basic Curves...->Circle  */& l  n5 b' C$ I  T* c. J

6 c: O% b& P0 [( |' z2 E6 lstatic void rubberband_circle_cb(double *screen_pos,
: \4 @3 w! t2 r1 i( B: ^7 t4 h/ s    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
) c) f; O7 T, E" Z' @7 P" N9 c{
+ Q: W1 \, z( w. D0 v  b' E    double9 ^! p0 {+ K2 F- F0 a
        axes[9];0 _0 {4 E: ~1 f5 @! ]
    UF_CURVE_arc_p_t+ L- R) M8 `  L
        my_data = (UF_CURVE_arc_p_t) client_data;
; m5 |- G0 W3 @+ p/ ~" y" {& }6 K  m0 R9 g: X  b, O2 i
    map_point_to_matrix(my_data->matrix_tag, screen_pos);2 a: b( Q4 }; o, f9 V; r) K
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
9 g$ b8 a2 W. N
6 P, `% Q& G. A( a! @$ o    if (my_data->radius > 0)  ^$ `9 T$ ]; j7 C* s5 j
    {+ B" _' I, I. n: a# |6 u
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
- B. x- m& s! r7 J9 P/ {) ]2 `4 `- C; {$ g
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,6 F6 F# ~) D1 C4 i" X
            axes, my_data->arc_center, my_data->radius));
0 W3 \& X' k9 {) {, ~9 }6 }    }) Y8 `- c. r7 F% ~7 @3 {9 \7 Z
}
5 q# m7 ]+ r- j, R- r, g) z0 D( _4 v  O4 w3 f* T( @  }
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)8 b6 D5 P* f! }& e
{
; G# W. L% c7 H: z) l; O% |    int
2 z& _5 b3 L( S2 Q- r/ }        resp;/ f6 Y% A" m5 T7 }9 x# _5 p
    tag_t+ T9 `4 L$ s3 D
        view;
& D( `; A7 P% w$ z3 `5 R    char
7 x- R) q7 S& D1 t2 g' W        msg[133];6 e) t. Y. W+ I2 l, k: C% J7 C8 E
    double& ]4 g0 c( o. s0 f
        on_arc[3];0 u/ L$ v2 D( f* f

" |' ^! {( C7 H; w7 T    sprintf(msg, "%s center", prompt);6 e* t: Q2 E: i2 h
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,+ H% G$ L( {( y( B, g( c: f) |5 R
        the_data->arc_center, &view, &resp));5 T9 H) d0 r" ]& }2 O, X* @, I
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
/ @: q7 |* o1 j# p7 e! j# k3 z7 ?! s& S. v# R  w; v
    the_data->matrix_tag = ask_wcs_matrix_tag();
* K, y; _  r( V' B6 e$ H4 V    map_arc_center_from_abs(the_data);: ^: S4 S- J$ x

  s! \4 t+ W8 }+ u    sprintf(msg, "%s point on arc", prompt);
; Q& @, q  x5 {5 a    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,8 E/ b! m5 R' }) G
        (void *)the_data, on_arc, &view, &resp));; c% F8 Z& D" f( @
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
, l5 o  P" b6 `( C* |. c$ y0 o6 M& L- {$ X. K1 l5 E' O! q
    map_point_to_matrix(the_data->matrix_tag, on_arc);8 d: d/ s- P) \& D

4 U6 u6 e3 k8 R; u) T6 e    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);) x8 M1 a$ m$ R8 y- K7 U9 E  N
' s3 T' E% M1 k
    return TRUE;
* K. M, \& W' G1 X# b9 B}[/mw_shl_code]5 Q: R! f) v2 L0 B( `
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了