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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
* ], n' H$ M- e- C, k
5 U- {) s1 U0 l
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
& ^+ U" f0 e! X8 D+ l7 ?9 E
% b3 X- J7 n: i1 J7 F[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
4 V; L5 T5 J* _6 A" N4 Z$ u& v{0 B) f/ }9 G- p
    int
6 T$ F" x! E2 S  N8 f) F; y        irc;5 U# v: x2 b! a
    double
7 F' w; f9 e" t0 Z" |- }' P        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
) U3 _% g2 ~' w+ j$ T& C" d        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
' h2 o3 l/ J" P+ {/ x( L0 d% D* U        mx[12];
+ H$ `. _- n( G9 b( H* s8 X
( I' a2 g6 N" a  P    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));
; y6 Q! C6 f/ S+ m; x9 h& D7 X    FTN(uf5940)(abs_mx, csys, mx, &irc);* o+ h( E/ u/ v5 y5 P4 q
    FTN(uf5941)(adata->arc_center, mx);  h/ x8 w" L5 O- D
}0 Z6 Z& C$ U6 ]
4 M3 P0 @2 F" q2 p! _  s
static void map_point_to_matrix(tag_t matrix, double *pos)
( k2 k& S) d# W0 {2 i/ U( o: d7 l; s{* M! _/ e2 b+ g" C5 g* Y% _1 l
    int
6 g8 R4 n0 i+ M' ]* A        irc;. j9 R2 u, t6 F9 r- t5 V
    double. j  v: I" L. x3 U- v& Y( ]8 r
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },/ q% v; S# \' {- R: Q5 A; i
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
: \+ y8 q) N8 ~. M* a' P( C2 ^5 S        mx[12];
% L& p/ s, V8 z0 ]7 M# l
7 u* t9 A  I4 K    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));, N9 K( s# d, \6 g  T/ h
    FTN(uf5940)(abs_mx, csys, mx, &irc);' m" O8 a9 U8 f- W, L% r, R
    FTN(uf5941)(pos, mx);) _" k" F* V2 V
}1 n6 a* X. x. M
# B, X0 w4 l2 D/ H8 I) n" }3 S
/*  This motion callback emulates the rubberbanding circle seen when
1 L7 v: G+ D) \3 |+ V    using the interactive option Insert->Curve->Basic Curves...->Circle  */0 m! ]" O: s, x4 l8 N) y
; v3 O/ p# ^& |+ R
static void rubberband_circle_cb(double *screen_pos,
& m5 m: @, L6 G' w+ y: C  X% r0 j    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)" Y- L8 Q8 ]) i4 `* l5 k
{: q# s. v# U, w8 d& m
    double
, k) V$ p) k' T) J        axes[9];3 U2 x7 p/ H9 V( ^2 \7 G
    UF_CURVE_arc_p_t% C' O$ C5 w9 A& F6 @, N. d
        my_data = (UF_CURVE_arc_p_t) client_data;, u4 [% u3 h* U2 G0 `

( [' V, O/ F/ G$ ?; G    map_point_to_matrix(my_data->matrix_tag, screen_pos);
& e" A. |$ w7 c1 c9 l    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);3 [) P0 R1 U6 L1 [; @' j' k
# E! Z# ?) _: z  g8 ?
    if (my_data->radius > 0)
) ~* n/ D2 s7 r/ e  g2 |) c0 h    {9 o  m9 ?, o( _) J
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));6 v- ^- j9 A% k
2 B4 M# K) X7 ~
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,7 S' o: b; ^) m( d/ P
            axes, my_data->arc_center, my_data->radius));* R! Y+ u1 G9 p! R5 B
    }
, J* L7 d: p  y- X9 ?3 p}3 N6 \0 T" w$ x& i: K

' p+ x: {/ @# Rstatic logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data), l" c% q0 y" }( {- _
{
% F2 b! ]1 e' A2 ^! C) z  e    int: r7 ?+ Z# W3 v' {, l
        resp;
* B. q0 ]( h* Z  }. b    tag_t
! ]3 k. {" r+ Q4 s9 v8 A        view;7 S' g# g2 Q8 ^
    char
! }) D1 D2 L7 m6 L7 n, B) A& l; v- Y        msg[133];
2 _1 s7 C0 k8 o) @3 u6 G% ?; e    double( M- v  `6 Y* R6 U+ w6 ?
        on_arc[3];! C  `& E; p$ x0 A) |
9 Y$ `# x+ m/ x" i
    sprintf(msg, "%s center", prompt);
) y: W) k  B% W8 R# C1 H$ i, {) R    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
) U( N+ v0 D$ }0 Z: c" T( P  n        the_data->arc_center, &view, &resp));3 K" U; B( }% i; w: R8 a
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;' m8 ?  _7 R+ m: o

7 C) O; J% K' K/ b    the_data->matrix_tag = ask_wcs_matrix_tag();% H) _" Q2 \9 ?5 c( _" Q/ Y2 |  q
    map_arc_center_from_abs(the_data);
; m& \5 [0 V+ a! w- \2 B& M8 x6 k+ L5 ]1 H  r, Z* r) _
    sprintf(msg, "%s point on arc", prompt);
1 t0 t" u. H, x/ H! F    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,* G' T) n! Z; g$ @
        (void *)the_data, on_arc, &view, &resp));/ C. Z( b/ g! `# T" Z' X
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;9 I- O6 e. Q2 G. c1 V! _# T- U
6 N* O( L7 {/ N
    map_point_to_matrix(the_data->matrix_tag, on_arc);3 }, l; O1 F# F. P. j9 M3 G5 X2 X

7 N  ]7 O2 T  V7 F% L" l    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);3 E+ B  l! f, x! F

# G0 W# q4 m* [5 C, W' r    return TRUE;
6 n' ?3 n* ~$ P}[/mw_shl_code]0 k& s+ L) E. _
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了