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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
* u3 E/ E; m) I% ~
6 T: R2 @- G! Y8 T6 s; j
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点
8 S% e3 {$ t) O. I" `6 ?0 c8 ^, v! Y- `$ X" h! w* _& Z
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)* C% s3 |7 {  `: Z2 r/ ?
{
% W/ t) f9 W8 D    int) R4 b  d! C% p/ C
        irc;
! v9 B+ u+ l' C$ {    double
- k) Y& q9 o2 u: I4 P0 X* T* E        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
- {6 J! a, \2 v+ _# [0 ~5 G& ^3 m        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},$ P; v3 K) K9 {8 S$ J5 \
        mx[12];7 Y0 R9 f+ N8 T" P4 @7 I( n

- D, c3 j+ _; @) c* \: _  ?# }    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));4 M7 g" ^) Y" }, \
    FTN(uf5940)(abs_mx, csys, mx, &irc);
) b* @+ f1 {! X8 `4 T- U    FTN(uf5941)(adata->arc_center, mx);
5 b5 y- R9 p$ f, X}
& u/ G4 c6 G7 d$ A  A: |' T! |: \% w( b. j0 p! ?' }
static void map_point_to_matrix(tag_t matrix, double *pos)
! ^8 x, b% p5 J' [) y7 o1 O) `{5 Q( A! c# G( p- `4 O
    int
; Y/ n; Y6 d% y' j        irc;. }5 B) H$ D$ ~  F9 y
    double1 p; K/ [0 ^7 M
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
: E* B- k2 r" U  L( |1 Y2 b        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
' Y& y% f4 ]  k4 d9 q        mx[12];
: {0 V5 Y6 d8 Q7 U- L! E) F
$ R4 s; ]& ?5 V0 r    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
5 z- a# H" P, w8 O, C* ^$ U& T- B2 H" r    FTN(uf5940)(abs_mx, csys, mx, &irc);6 A3 }: S( L* o1 ]  [
    FTN(uf5941)(pos, mx);, V) {  ?( Z3 O: ^1 e
}3 l3 d+ q6 h$ ^6 d
& E+ K- l$ w6 R. U, Z
/*  This motion callback emulates the rubberbanding circle seen when( O$ R, j- N3 m2 |& ]
    using the interactive option Insert->Curve->Basic Curves...->Circle  */
2 [. x' E9 o! B) }1 `; g
* p- k! i) n4 l; H  T7 y  s0 sstatic void rubberband_circle_cb(double *screen_pos,
: w* x0 A$ d4 Q3 X2 m- [: [7 i    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)' _8 v2 {; @2 L. ]; v. P; ]7 X
{# U6 T+ D) ^4 j8 [4 K9 u- A
    double/ d& p$ L2 M4 C0 e: w4 h' v2 ?
        axes[9];
. ]  z! c  L# ]  P9 \$ L" w    UF_CURVE_arc_p_t
! H1 Y) |( N  t- }        my_data = (UF_CURVE_arc_p_t) client_data;2 m1 {+ t: y1 G% K0 A) y

- G2 t/ W4 q4 u& N- g9 C    map_point_to_matrix(my_data->matrix_tag, screen_pos);
3 O3 K; i- A. Y: j    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);3 x5 s7 g" ]* @( U1 j5 ~0 @

. i# O$ b6 r5 {! r9 Y) @3 {    if (my_data->radius > 0)
& M+ y6 K# c" J7 x( K, r    {1 V1 ^/ d0 \# p) _; s
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));  J1 J7 H3 m) X4 B  r5 p. Q
8 X! d% {* J6 U& e, J2 m; o
        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,' p. Z1 E9 p; f" t8 o+ }/ P4 O( F5 [
            axes, my_data->arc_center, my_data->radius));( n# w. H" f" F8 E' C' D
    }
+ n0 q6 N, K* e& e5 R# g}
# \. D$ ]5 A1 C( P: O+ h) U  B6 `/ O4 O9 `  T
static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
, k% h: S  G* i5 [5 v, a! q{) r5 R5 f, f) x6 e/ K' r
    int
3 Y7 q( B- G2 F3 B# s0 E4 Q        resp;
0 e  @5 ^) [8 p- R& r    tag_t& C: c$ ?5 u: f: m0 u+ B/ E
        view;
) l1 J$ ?4 R$ }' t* _- b+ E    char! z- b; P( m! w' z& B2 d; d: v
        msg[133];  c8 K/ Q, n, N) j  e- ?' a7 o
    double6 H  _) w( F6 t* }' r/ F
        on_arc[3];
1 V0 Q4 V4 ]* T" i  I
" t  m# w* u2 [3 E    sprintf(msg, "%s center", prompt);
5 S) ]  d+ L5 I! _" a    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,- J: {& F+ J( ?( H0 i1 Y
        the_data->arc_center, &view, &resp));
, D& D0 ?3 D+ a; F    if (resp != UF_UI_PICK_RESPONSE) return FALSE;. I8 n( D8 m% C% V- k: C( R0 _1 J

% K6 U( N% R( Z+ z/ _    the_data->matrix_tag = ask_wcs_matrix_tag();3 L/ R$ H4 F! w$ {5 {
    map_arc_center_from_abs(the_data);. @, b, ^2 a# ]' ~$ E, j* r
, J6 h5 {) G( f7 M6 j& g
    sprintf(msg, "%s point on arc", prompt);
% e" [7 b% w  [6 D8 p    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
' Y# |( |) Z+ Y$ h        (void *)the_data, on_arc, &view, &resp));5 p+ R* `4 J& j3 J1 W) {+ O
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;  E* p# X4 m( p5 {( e9 J# A4 ^. W
- W, [$ v+ x4 b. A7 _* s
    map_point_to_matrix(the_data->matrix_tag, on_arc);- ^! H& b2 @! {, u

5 g% W# b! A  a; H6 M/ w: |" E* N, d    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);3 G- ]1 H; O9 U6 R. Y: P: a; d8 _

, C/ k2 C$ K+ V+ v  k    return TRUE;, P8 h/ \" C9 N* _' V
}[/mw_shl_code]
+ J* r8 W, y. {  j" l
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了