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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
5 N0 J% l0 J& S) ^. K( T3 q9 y

9 R. n+ f% j' P7 b2 e* kNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
; f6 }3 @8 Y+ r: e( q) k% @! Y6 ?# {4 m+ t' k) ]& r# u5 D. g
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
& y) O( O9 A/ \{
) k$ s; \5 N7 X, a* O8 F5 Y+ y    int
# w! H& Q- p1 h* \3 q        irc;3 K0 g: {9 u! k9 ~& C0 N$ r
    double
5 o" S$ K! f2 k4 J+ n: a- Z        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
+ w+ v$ _! T$ j+ ~+ u7 P4 z4 [        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},& w, o3 P1 o$ h, K2 p, c. w
        mx[12];
4 ]/ C" h4 h# I+ h+ G* a: a, j) e; M  S4 b1 C: s3 T
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));+ y# u% i& e$ a% I0 v$ d! A
    FTN(uf5940)(abs_mx, csys, mx, &irc);6 }; u8 S( K2 z; k" }' }/ g
    FTN(uf5941)(adata->arc_center, mx);
1 G$ j* [+ L9 h1 n}
5 t+ g. x. l$ L& g% N
& ^0 n; ^. S) i8 `, J$ k( C- n- Ystatic void map_point_to_matrix(tag_t matrix, double *pos)- C8 R+ F; T+ {. f2 U
{
8 \" Y) h5 G' e    int! I" E3 L: f5 j% P' ]. D0 Q! W* Y
        irc;
& l; n) e2 _3 }; J, ]# H  ?    double
2 t) m, s4 k% F) ~* Q        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },% R0 a  e4 T- r0 Z& k3 @/ a# `0 i
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},3 g" `" E: x+ q. \" N
        mx[12];! M* V. H; ]7 m
' O1 Y8 P# y: R) C$ p
    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
8 `/ C4 @" B0 K8 }    FTN(uf5940)(abs_mx, csys, mx, &irc);
) G3 \- w% [9 m2 k. O$ G/ K/ a) u& k    FTN(uf5941)(pos, mx);
9 m7 w" x" j& ~2 S6 V- L/ K. X- }}
( g3 \7 t+ H' W4 E: O% u. v$ U( I- S, M# A/ y  X) ~
/*  This motion callback emulates the rubberbanding circle seen when, X6 q9 u& f" B0 G4 Q, q3 N' h
    using the interactive option Insert->Curve->Basic Curves...->Circle  */
1 E$ @3 j. O: x) Q! \. G+ Q4 T* V( q# u7 j' T7 I
static void rubberband_circle_cb(double *screen_pos,
# e9 g& N8 |( j1 s: u6 W! ?8 h    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
8 T* C3 O* F7 i{
+ r( U! y! I( L5 {8 W. j+ H' J    double
' C3 u- J5 y, k; O/ H( z        axes[9];- y. ~! K& g$ C3 B
    UF_CURVE_arc_p_t
: z( A/ o1 ?7 `4 C( x+ B/ @        my_data = (UF_CURVE_arc_p_t) client_data;( o* v5 Q; f3 D8 b% C% K/ w6 f
/ u- z. d  I2 C
    map_point_to_matrix(my_data->matrix_tag, screen_pos);& ?+ T; k: x+ n' T$ p, q
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);8 c  }- H- {! H& U% ~1 |

8 i1 U! ?  D  s1 p2 ~2 K7 y    if (my_data->radius > 0)
1 e; v6 g# S# ?3 ], }    {  j+ d7 K# Y7 m5 f$ G8 z' M/ Q2 f
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
( G5 {6 V  ^0 B; e* s! R
7 {$ ^1 O9 j( ]7 O        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,0 U# \6 I' b' {) M
            axes, my_data->arc_center, my_data->radius));
$ V9 w, ~  _+ n7 u) n; d5 G1 M    }
: X0 O5 Z1 T) M}
5 M( `; C! c' V! B/ u7 I( R
$ P; m9 b: L, d2 Y6 V2 D" r) {static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
. z" V" _1 b: G! S  d3 S( u/ l{$ X+ @& I1 F2 g9 D  {  V+ B
    int: J; r+ N3 A5 h
        resp;1 |/ @, Y1 R! i  G$ u, q  a9 n
    tag_t* i3 k* o# u: ^8 _. x, l6 y
        view;0 X: N" J/ V/ H% [
    char
8 N! @6 e6 X; z- Z$ J% w% X        msg[133];6 R% d$ G; H9 L+ I2 R3 U
    double
6 P( @# q/ ?9 v        on_arc[3];
. U$ R! P3 Y, u; Q0 ?1 Z2 {  {; l. D
    sprintf(msg, "%s center", prompt);
: |. h5 Y1 U; x$ w# E    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,4 W! ~6 x, ^3 r7 W
        the_data->arc_center, &view, &resp));
5 y  n% F/ T  T* O) G    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
8 z7 p) _2 z: P9 t; I. J* O$ {1 z( x+ W% ^# S& a1 m! p8 c
    the_data->matrix_tag = ask_wcs_matrix_tag();! J. l, l/ r% w
    map_arc_center_from_abs(the_data);  d! w7 E# z9 m" X$ C) h: i
+ }; X+ N, [3 `6 U% d. z
    sprintf(msg, "%s point on arc", prompt);
3 V& R. _$ x, u/ ~0 g    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,6 f% k3 }, z2 V
        (void *)the_data, on_arc, &view, &resp));( X  J& n+ K$ f6 ]
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;6 X$ T. T8 @% q7 ?9 V

" f$ {  m8 ~/ P    map_point_to_matrix(the_data->matrix_tag, on_arc);1 ], ?5 \" x# J; k! [+ y$ C

( [; T5 J% ~5 F    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
7 c/ H5 Q! K4 [$ A- f" Y8 C/ k
2 W% j' @) w* e! D. U- C    return TRUE;5 z6 f9 D7 l5 f& B& \
}[/mw_shl_code]: `, [5 |+ Y+ d& c; A
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了