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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x

) m% p+ M! y4 V/ @8 \" R
, Z8 P8 h1 _5 l% K  W% j8 {NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
; Q3 A. c2 d1 \( k" I8 @" a$ ^; A2 \) s' h/ v, H
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
* t6 w2 o$ B+ h6 ^$ {2 F$ I{
* E0 D7 s6 B' f+ M# V3 x    int# v. }! _6 ~( [, |+ n0 E1 G4 m! T
        irc;
* h3 C, Z9 X/ s: W    double/ ~+ `- y' M* _, \0 C
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },, y! d2 X* G' K! j, B9 w. [  K# K
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},+ T9 y' r& C5 L  h* u
        mx[12];
% {* _$ b2 H3 l
: o0 |# o7 T3 s& a. r9 Q5 p    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));+ b5 r8 B! p/ S/ |7 |
    FTN(uf5940)(abs_mx, csys, mx, &irc);" R" _/ A. W7 l8 _) X* }$ c/ V
    FTN(uf5941)(adata->arc_center, mx);8 |$ _2 p; ~; l$ c3 |+ n
}. W8 ~  T1 u1 L9 I
9 k5 o; B3 O' I6 ?& p5 i7 M; w
static void map_point_to_matrix(tag_t matrix, double *pos)
6 |- e& _$ L6 @# B& P7 G{
8 g7 D/ Z' m7 W& q    int0 k  \2 W. d; ^( Q$ ~
        irc;
+ ~, m* e4 U/ e    double
; T) r& Z$ [8 t. S7 O% f$ |' \        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
* P- Y& w7 `" {        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},3 w6 |6 F, m" s  s) e
        mx[12];7 s" }3 M( }" T/ }
  o  |: y# x, i9 |+ s6 e3 ?
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));; Z0 Z) H' C/ T) w$ D/ t
    FTN(uf5940)(abs_mx, csys, mx, &irc);7 ?: y  j2 |9 C& L! D
    FTN(uf5941)(pos, mx);( {* i; f% O" f2 X
}
. _/ @* P% z! I) @
# H# u5 ?# u# W  B/*  This motion callback emulates the rubberbanding circle seen when
$ ~. i' j0 {0 k  j4 q2 q3 ~9 x0 W    using the interactive option Insert->Curve->Basic Curves...->Circle  */
  G3 F4 |1 @/ G/ H9 c  f" z
: A( a; v7 G0 B5 f3 Fstatic void rubberband_circle_cb(double *screen_pos,1 F  i, L; k9 i$ N
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)$ g4 f6 f' P! H% u
{
3 K+ s+ d& [- b    double
$ _4 h7 [. n8 H/ J) h        axes[9];  c) v1 j# p3 T; I
    UF_CURVE_arc_p_t
) Q9 P: n5 m: G7 n: \        my_data = (UF_CURVE_arc_p_t) client_data;1 ?0 D$ @! \" h& c0 l' f
) X- R4 K3 _8 d: G) }, P( J
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
* R; {5 X; ]" [" F9 U    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);/ B/ W. y8 W" Q  c# B

% f+ B: c. s0 S2 e$ A9 A    if (my_data->radius > 0)' G! L! o1 |: U; f, C; c# u
    {
$ [7 `2 @4 Z3 @$ v- g/ f8 J        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));4 t7 {9 F9 m& _  ^

. ]5 y* `/ ?! Z5 y1 ?, I        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,3 S, _, C. b& b0 @+ H
            axes, my_data->arc_center, my_data->radius));( t% D8 h  H! Y' E! Q; d* Q1 o6 V
    }! k' z/ u" l7 V0 j
}) A3 @: ~/ q4 ~# F/ M  Q0 n5 i
) Z! }  x! g+ |) ]0 @
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)4 j8 ~6 |# U# a7 Y( t% R0 c
{
! ^2 I8 Q* {" X: z1 e% R/ \/ R& g    int5 D6 @8 E% H2 Y6 `
        resp;
7 H& c5 f; U: `! S5 S: a    tag_t
, }( g2 Y% `1 N3 m5 q! l$ {        view;
" e7 M( n; U. ?( {9 W2 w- G* ?4 M    char3 I$ q- M# h( z
        msg[133];! \. [5 q5 h7 C- u. c) j, M
    double
6 b' ]8 f( T5 G4 }. e. ^/ t        on_arc[3];
5 `5 `9 s! C) q/ X% B
: b$ f4 @8 I. j+ E' N4 G    sprintf(msg, "%s center", prompt);
$ q+ i2 F3 ]& b) V. F    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
1 `" t! W2 p( F! B' R, N        the_data->arc_center, &view, &resp));
0 R# q3 Y6 r; }* Z: B    if (resp != UF_UI_PICK_RESPONSE) return FALSE;9 f2 b) V2 A7 a- g9 [- g) G, D9 \

9 ~' g# s. N8 {5 k$ w( V    the_data->matrix_tag = ask_wcs_matrix_tag();
3 r" G  C# F  E+ l4 D1 a0 X7 s    map_arc_center_from_abs(the_data);, G2 ?) G3 z; c& y
6 V. b% o2 s4 o5 ?7 _: j, b& q) ]' R
    sprintf(msg, "%s point on arc", prompt);* y! a2 |) ~1 Q* E+ a4 L
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,; O# S  ]& U+ O9 r: \
        (void *)the_data, on_arc, &view, &resp));$ X6 K8 f/ d1 S8 A" P+ F8 t
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;) @6 N' c6 s& Q+ B

" d1 ?  h, M% k. D5 o) b1 b# b9 p    map_point_to_matrix(the_data->matrix_tag, on_arc);- @0 S/ ~4 C3 Q" `
; c/ k% s7 |5 ^( S
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);  V) R- l7 D( ~; w& J
4 ~) q, r9 Q" t* L2 [
    return TRUE;$ o2 i+ N% d. k. o
}[/mw_shl_code]+ T# s. g( p$ r0 E  Z+ q6 k% c) T
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了