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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
6 `% g0 ^( A$ J7 x) P1 M7 I

& n1 G9 R* T" a8 p% K: ^% NNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
, a) G& T# w( {, h$ \" q% j5 H* @) H$ j* c2 z
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata): C$ @8 |- U+ G  K+ d
{
! ~  U, U; D) }0 A4 _    int9 Q- y. B3 h4 a3 I
        irc;
: V9 n8 [; J; l7 w- i; j3 n    double
/ I  P0 r: z8 J9 T+ _        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },* u2 g6 Y6 q5 P& W' ~% k4 V" J
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
. a" w- {, X/ }& {* t/ d        mx[12];
: ]6 U) p$ |$ g: }6 L5 D. |
1 y3 y, _& m2 l+ @0 T, x    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
  ~7 |$ W' S; T. Y& Z    FTN(uf5940)(abs_mx, csys, mx, &irc);; F/ @7 m6 i5 w0 _2 C
    FTN(uf5941)(adata->arc_center, mx);
! n# e# T9 [" K}
( u: ?$ I+ F$ G! v  O" a) ]1 k/ u* @$ |+ J3 B8 H
static void map_point_to_matrix(tag_t matrix, double *pos)
' o* _- m5 W: C2 `# U3 z{
; ^) e) x1 h8 ^7 z: o. R$ c2 n+ A6 `: K    int  x( r: B8 P# y8 ~$ @! U
        irc;( y9 C1 x) @$ Y9 |9 L
    double
- F. i8 C2 G8 n7 p: G* \' a5 s  Q# Z5 _        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },* ?9 c+ @& r7 `, J4 @9 X2 Z
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
$ t6 R8 d& C4 j* S2 m        mx[12];$ f! v! \2 @. k) p, j3 B

$ h3 a4 c/ N/ J! K, ?& z    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
' K; V  w" A, E- y4 m0 F    FTN(uf5940)(abs_mx, csys, mx, &irc);
* U- R4 a7 l. v* r    FTN(uf5941)(pos, mx);
" b) d: ]; _8 V8 P% V! P}5 o4 b* c3 F# S% g+ {

' H; K8 D! G; \/*  This motion callback emulates the rubberbanding circle seen when; c# k% O. u7 B
    using the interactive option Insert->Curve->Basic Curves...->Circle  */4 N/ J- k& t5 J6 K: k, T

; H: \' l! Q9 ]3 nstatic void rubberband_circle_cb(double *screen_pos,2 x0 |- ?  d; q1 K' K
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
& j# ^  j2 h( Z" y1 Z5 g* m{! t, D. ?  {$ T6 I; X9 V/ H
    double  Z. l5 X, q+ i" l. f; K5 V
        axes[9];& j3 W" L7 @# E3 K9 d
    UF_CURVE_arc_p_t5 c, B, n8 E6 d
        my_data = (UF_CURVE_arc_p_t) client_data;. _8 d0 J# T" {

" @0 L# U5 Y/ ]    map_point_to_matrix(my_data->matrix_tag, screen_pos);# z% ^5 }( F. b$ n* M
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);" A$ X) z1 l8 ]9 H6 ?6 Q6 P

0 M. B- P2 B/ r; ~, i0 G3 \    if (my_data->radius > 0)4 H# n, C- ~4 I
    {# K+ ^4 z9 i0 {* l9 {4 v! ]
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));, A% ~6 e" B: p# N  a" ^

  Q7 \3 }' ?" o: Q! e        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
) ?" K/ y* B* h            axes, my_data->arc_center, my_data->radius));7 Y; j+ [1 n7 G
    }
5 b6 S0 O' M, x* T; m, S4 q1 y}
" \% @) F  d, R" O- m, ~* C$ N0 W& b4 h" d
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)" N& H. T" q5 x6 Z
{
* c: [& G- Z+ Z) C: B' M    int  H4 U# [! @2 z
        resp;
( X6 C$ N4 y+ o8 S* ]$ [2 B4 C    tag_t% Z3 K1 ?0 ^2 }4 r/ t
        view;
' l1 C! T4 B2 f    char
$ S5 Q: h% ^$ \+ Y% Y        msg[133];
9 o+ H' Y* [: i9 l/ c  }0 G    double, b8 f- N( u" C
        on_arc[3];5 E+ Y1 R) b  l. E- X* Y8 R: I

( R2 |/ h- g% T! |* G, \1 V1 ^    sprintf(msg, "%s center", prompt);2 ]! o' W8 e3 b7 Y2 z
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,7 n1 {& m1 A. Q% |
        the_data->arc_center, &view, &resp));
( C4 @  \; W7 K* }3 f  q    if (resp != UF_UI_PICK_RESPONSE) return FALSE;/ h1 r$ N6 O# j7 Z
- d0 Q, R3 }/ X2 b2 g; ~% \; v) i
    the_data->matrix_tag = ask_wcs_matrix_tag();
' u5 T2 j! C" k' c# j    map_arc_center_from_abs(the_data);
" i  \. w, y2 v8 m- V+ e$ Y
: x% o. `  f5 o# s, ^9 X+ M9 u  G" A    sprintf(msg, "%s point on arc", prompt);' t! Y. k* A1 q& Q
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
/ l' v3 M6 h9 i" q        (void *)the_data, on_arc, &view, &resp));
3 H: W  ~8 o0 ]' w7 F2 p    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
& U- R3 i3 P7 c2 Y1 O$ X. K# U6 ~# R. q8 {
    map_point_to_matrix(the_data->matrix_tag, on_arc);& _8 D! i$ v; k5 A8 ~

7 M) a  O5 C- t. d    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
4 s) g2 C% x9 ]  _0 N. |8 h8 ~1 I' r
    return TRUE;* ~* f, A! D% `( f9 D* N+ v& m* g
}[/mw_shl_code]
/ c4 |% [, b$ s7 j
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了