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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
+ Q) v& f5 W4 C1 F: \; n
! ?0 S/ V# R0 R! ?; h: k
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
0 [2 [  W; l# d8 Z
+ i3 B3 L) n3 |9 v[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
9 C: j/ x& X2 ]: m{. E! b0 O( A* U! n
    int9 x3 O8 i& u4 i0 m2 Y' ?) H
        irc;8 B1 h( P# a* l% f
    double
- x3 C  u" J( y0 k        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 }," B; A+ _, u0 O. D
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},1 Q6 `% X; O+ Y9 y/ s4 w
        mx[12];
, M3 l4 g! Z" A; b# }4 E7 j( \& O2 k4 U: n6 e1 s' B8 y
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
. I$ D- o2 [2 B# K; l2 K3 I  @    FTN(uf5940)(abs_mx, csys, mx, &irc);. z& |6 _. @7 k
    FTN(uf5941)(adata->arc_center, mx);
$ C# h; [$ Z7 d/ i5 G}
! k: A) G8 c/ T: V$ o0 \" U9 f* b% j% e0 W: |
static void map_point_to_matrix(tag_t matrix, double *pos)! U9 |- t+ G1 ~& q% q8 o1 c# _
{* R7 V, j' I' u' W7 m' t& j  I
    int/ y9 l$ s* Z5 D: u& h6 g" T
        irc;
$ U$ Z& l4 O! C9 v4 E2 L' \+ n    double" {% T0 [0 T: _7 k+ R( q$ O
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },/ u4 u7 x. w( ^; u. j
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
4 d8 F" E: L/ v        mx[12];
0 A! C# @7 x3 }5 ^9 o1 z3 b# ?  l
5 w9 @" Q. C& E1 }    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));7 N( l& k' W& z4 n  {
    FTN(uf5940)(abs_mx, csys, mx, &irc);
; P; ^# h+ I; b    FTN(uf5941)(pos, mx);
4 I7 S: c5 j6 w7 @}+ G9 E# W+ V" J9 i: N

& V; h; M* o; q$ J9 j1 n. s/*  This motion callback emulates the rubberbanding circle seen when. b! {$ e6 V' P
    using the interactive option Insert->Curve->Basic Curves...->Circle  */0 d- [/ |. t( \7 q" z0 C
" i7 V9 t* M% \4 b' |/ d" {# r: q  M, Z
static void rubberband_circle_cb(double *screen_pos," y1 J; _2 \! \
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)
  x0 _) A: y! ]0 P# j5 A  ^+ y{
, t# ?" r: c1 t/ v/ @    double
! a5 d/ k  T' C- Z9 e% h2 f5 `        axes[9];1 E9 A7 P; R9 y
    UF_CURVE_arc_p_t
3 h5 E7 i8 e  _1 {& \8 I        my_data = (UF_CURVE_arc_p_t) client_data;& @8 b: g6 s) R4 T
3 W% O7 \1 C! a  \3 h3 ?- x' g
    map_point_to_matrix(my_data->matrix_tag, screen_pos);
- p' N9 G$ j; G1 O  D( u5 i    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);5 f# i. w; w9 w) m

& F7 e; z* T8 G6 v) w    if (my_data->radius > 0)
' n% w5 Y* c3 C- x, H    {
9 t  B& s- f+ d3 X        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));) D% ?5 d9 B0 D- s; X1 @. i3 Q6 y
+ `5 Y/ X; A( Z( {6 m  O
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag," c) \' R( L0 _& q. e; `: J
            axes, my_data->arc_center, my_data->radius));, R- S& \& t3 A; |
    }
+ {" E+ k6 {& Y0 B. F}5 ^; z0 L7 {% F
, ?  X, \/ ^* J' g" }4 |- e
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)2 |; u  i8 g( f5 X% O
{
/ P6 d* f7 w: a7 l    int
4 A/ @3 t* T# l- H        resp;4 i2 F% C9 f5 R5 H2 c9 L+ ?
    tag_t
1 L- j! G, f$ ~/ _        view;/ _$ y& K5 r/ ~! H* d6 M
    char5 w; s5 c% ^& `) R
        msg[133];
& r7 L3 Z1 Z  [& u& m    double
) ~: a) m& q" c: I        on_arc[3];. a" J+ n; Q8 S" u9 c7 O) J
, V) w8 T: D4 r5 R9 C# k
    sprintf(msg, "%s center", prompt);' z/ O# s% S7 |. |; |& `( b
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,. b  l* N' f6 L7 N, d7 n
        the_data->arc_center, &view, &resp));2 L7 U5 \* C8 ?% {0 p  N8 s
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
' t' P; {+ D6 p$ V. x( b5 g& X0 a4 R
- ]) k  a8 Z/ }. M. {- t  h    the_data->matrix_tag = ask_wcs_matrix_tag();. h; j# X$ o& ]+ w& }2 ^3 Q
    map_arc_center_from_abs(the_data);
1 h! K8 X( Y7 W8 ]0 c
! X. ?+ b7 z% ~+ i& l! t1 ^    sprintf(msg, "%s point on arc", prompt);
/ n  d* ~( c8 y; D: T% M* z  S    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,- F* Q& {# p: X/ F! x. S
        (void *)the_data, on_arc, &view, &resp));
% F& R3 L7 W) B; z) [    if (resp != UF_UI_PICK_RESPONSE) return FALSE;% O0 N3 g! u1 ^; u9 F

; U, R0 J- y, e    map_point_to_matrix(the_data->matrix_tag, on_arc);. h" L" F9 U) ^& B7 E

: t% }. U' ?' S  L4 r/ |    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);7 z4 ?, }! v- t) I6 }0 Q

8 ^: {' y/ B, f3 B/ O+ N; v    return TRUE;% m& ]: Y* ~8 f6 @+ R/ g
}[/mw_shl_code]" {# ^* A2 W, C1 g- ]& t. 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二次开发专题模块培训报名开始啦

    我知道了