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

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

[复制链接]

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

2471

主题

1276

回帖

8万

积分

管理员

PLM之家站长

积分
82193
QQ
发表于 2018-7-12 11:09:03 | 显示全部楼层 |阅读模式

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

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

x
  t8 |& m+ ?) A. ^" ^

) f" b  Y. Y" \NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点. Q: i4 c6 V$ p
2 _1 U9 }2 m# `5 G; C1 p
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)1 n5 T, r+ \9 I5 a) \
{
3 T8 A% H0 @0 z* d* o    int
' Y0 {! A1 {$ O: Q& {        irc;: ?1 y) b/ q; }( ^6 l; D# @
    double
! ~* T& [# |5 t6 V; H; c  z        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },0 i2 W( e! h+ ?4 c+ a
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},( Z7 T- E8 F! @! [8 E, E
        mx[12];( w) [* }9 m  o$ O

, m6 }0 p+ O1 y    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));5 [2 Z' b0 L  D$ x4 A# L
    FTN(uf5940)(abs_mx, csys, mx, &irc);
, m6 |$ n/ ]8 x    FTN(uf5941)(adata->arc_center, mx);
2 \8 g) P* {+ A" d$ B4 d}
) N; [) y6 z: W8 n. e% a' t
) l# W" k: \  k9 Q* T1 Ustatic void map_point_to_matrix(tag_t matrix, double *pos)
. Y0 w% J; k; I3 C' e5 B# u9 S2 Y{
  x. Z8 b! }9 C  d    int
5 E% g9 [( P, g/ ~  j" u        irc;* a( p: H/ Q5 s1 A& F. y$ a
    double
/ l9 g- H3 S% c& D( F, e        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
/ h  |8 I8 T& }  Q% H: N: q: c. k        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},. I! Z7 B% W% L$ z6 t3 H
        mx[12];
6 {# B$ D1 N. {. d  r$ [
1 \$ w; i, w7 @+ P    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));/ ]) r* m  X) g0 @0 x
    FTN(uf5940)(abs_mx, csys, mx, &irc);
, c: M' C, D, Q  e) w6 v& p0 ?    FTN(uf5941)(pos, mx);
$ B0 z5 {+ n" L/ r: ?: o}
+ B  S5 f  n- c" s# G. o& c: Q  g& t* L; q
/*  This motion callback emulates the rubberbanding circle seen when
) b8 q- K9 `0 q8 N7 D2 N    using the interactive option Insert->Curve->Basic Curves...->Circle  */
# ]6 A9 `! k  W( O: @6 t$ \% ~. I2 U5 {  s6 C& {
static void rubberband_circle_cb(double *screen_pos,
) o- g7 q, u$ |3 K5 c$ Z    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)! {# k/ T. i6 w* ~
{
0 R  l. f7 C, ?3 r( f    double
: f" i2 b0 _# z        axes[9];
8 }* b1 `# a- F    UF_CURVE_arc_p_t
9 z0 k3 T. |- o$ b5 l        my_data = (UF_CURVE_arc_p_t) client_data;
8 _* b. [4 B+ \6 }0 E; V  f
- \: i- Z' G& K, y- J  O0 U    map_point_to_matrix(my_data->matrix_tag, screen_pos);
) y# [. w% }) G: ~6 a" e* L    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);9 X6 _6 p' d. U: x' I! X

; B: j! Z, Y( ^& A/ B" m  f' b    if (my_data->radius > 0)/ O3 T8 B+ p1 j7 l
    {1 S' E! H! K2 D  N' h
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
" B+ j1 L! r+ J% s7 u4 x' r2 ^/ W! ^+ D" Z* P' {# f
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
  i& n' K2 a0 c: d8 g: |/ T/ K" G            axes, my_data->arc_center, my_data->radius));
$ O& c! Z6 g- z7 I5 k    }
. J( O0 Y/ d8 w8 Q8 L}
# o2 M/ W. G- W& S
& J. [( x% }0 @" B$ \static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
. P/ p* t1 O7 J9 q{
/ I" l! o4 ], ?8 C, ?3 @    int. k9 A. f' e9 w. w) |3 a) p# r2 R4 l
        resp;
1 N* \0 F2 l% j( {3 K4 r    tag_t; q7 D, J& L6 U1 _8 E5 c4 y
        view;
# w5 Q  s+ |% k- k# q0 c    char  {; d% Q1 F3 m
        msg[133];
, z4 T% f6 W3 R" _% w( O    double8 V' C. j# l% c6 P
        on_arc[3];/ x; T$ H/ N; A' v. o
$ z" H1 r( d" Y
    sprintf(msg, "%s center", prompt);$ [9 P& w  U( ~. c
    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
4 F$ |# D+ l6 E$ B3 K. }4 _. p        the_data->arc_center, &view, &resp));( Q$ n& Z5 v4 I$ r/ x# l# t5 ]% J6 m
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
/ ^9 L8 u/ N# g' y' [5 M; T4 ~2 {
9 w9 U$ G9 S. h8 `/ A" d2 E    the_data->matrix_tag = ask_wcs_matrix_tag();( w3 `9 k1 c/ y8 O6 h
    map_arc_center_from_abs(the_data);
' b& }) K6 F( b: ~6 k6 n4 h( L
! n/ f9 `1 p" e    sprintf(msg, "%s point on arc", prompt);
5 N- M  p0 d3 K    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
- y% G" v2 `! \1 {% E        (void *)the_data, on_arc, &view, &resp));8 S5 N* S+ n( Y" b( P( E
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;- v& R4 Y8 e& P& w% V  S; m5 \) G
3 ]* C+ O% a& r, {9 b
    map_point_to_matrix(the_data->matrix_tag, on_arc);& P; E: _/ i3 }( u7 z$ j- m: v
9 S% ]3 s( h) Y# R
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);* K) t* @' s! n  ^& ^8 E2 F
4 }  l$ |! ^& B+ g2 C8 l8 O; W
    return TRUE;
- D6 L( r: k6 z}[/mw_shl_code]
4 e1 _2 b. R9 E
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了