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

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x

  B8 Q  I- y5 U- s9 M3 u, E
( ^$ O) k8 s: J+ RNX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点/ N3 M* U( `* f
5 Y, g" Z* b6 G, S
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)& P8 a% j& V& Q+ ]2 h" E1 }3 l
{! B3 h9 l3 p+ R9 l  i
    int
0 i& k0 R1 L8 e7 S/ J1 J& |- n        irc;% l3 W: r* h! F2 u; m
    double
& x, U* F/ S/ ]3 G$ H        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
0 [3 f) ]5 {8 J" W- w; j; @2 R: `        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},, P3 E5 C  R, ?/ J: ]* }  @/ }# p! x
        mx[12];: g; a9 q" s' ?! u" G+ P
9 X" X+ Q+ B7 ^8 W2 @  u  D. {
    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));) s: \* [7 M) d  e. q
    FTN(uf5940)(abs_mx, csys, mx, &irc);
. I0 Q& ~1 i: C0 `. i    FTN(uf5941)(adata->arc_center, mx);9 p, ~- m( \8 H8 ~6 T
}4 a7 a- k, B: B- u9 w' x
2 V1 Z+ V2 ?: _
static void map_point_to_matrix(tag_t matrix, double *pos)% k7 K  C9 @" [
{
$ t2 u6 i4 A% L' n& D) Z    int9 G2 I( T7 R. W* {! C8 j& x
        irc;
( r5 _9 F; l; f; I8 [    double
6 s+ x) G1 c. r# Q9 A7 ]        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },
, e8 a% e9 [0 {        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},
9 ]* ?& f7 P' t6 K/ t) K        mx[12];* N' }7 m; N  m% T

! R3 n# f7 j! O; m+ @) C    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
6 F" D# z( a: E5 z+ }, t    FTN(uf5940)(abs_mx, csys, mx, &irc);
% ]) N( v. A" V    FTN(uf5941)(pos, mx);$ G# C8 M" I" _4 P' I" p; w
}
9 v1 ?! |* I  y
: m, d# \# k1 {# K1 W/*  This motion callback emulates the rubberbanding circle seen when
) h0 U/ ~5 s) \) y    using the interactive option Insert->Curve->Basic Curves...->Circle  */( {4 m, d+ C# s

9 e7 j; s4 e* f9 ^6 B& Ustatic void rubberband_circle_cb(double *screen_pos,# O  v# T" G7 s6 x# M* }
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data), t3 V6 d; U3 |/ |  g
{* v$ t* P' y7 H5 D" R. ]
    double1 K1 k9 X0 [* c! @- N/ \
        axes[9];/ l) X/ H4 C( b0 X; Q
    UF_CURVE_arc_p_t3 l7 ]1 G5 w$ e/ \" ?- S3 j% K. p
        my_data = (UF_CURVE_arc_p_t) client_data;3 K: a% O$ d% x5 u
. ?, {/ n6 `. H: Q$ ]" h% o
    map_point_to_matrix(my_data->matrix_tag, screen_pos);7 W6 N2 x( r/ {( i, ]+ B
    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);
& z, i* e: m) Z+ M
$ E% e" G$ }7 |- y5 N0 E+ R    if (my_data->radius > 0)7 m: T, M$ y1 l) m% k7 M5 [0 q
    {/ ^' q5 x0 Q* S" q/ G* }7 K
        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
$ s( |- b8 D! h' k
7 p6 l$ m) d7 o        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
* O  \# z6 T' T9 H            axes, my_data->arc_center, my_data->radius));
* y) o% B' d4 |1 z1 s2 Q    }
3 Z3 w2 }5 |2 ^7 ?. b! W}7 `) x7 V3 ^4 F3 \

9 `9 g# y, o  K$ [' ^8 hstatic logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)+ c" b% r1 I; x3 n3 ~7 S
{+ m5 ?9 u( A# W( j
    int
$ d0 [7 S  w4 ?% X/ X        resp;* Z- F/ i7 `# Q8 Q3 e$ z$ ?
    tag_t3 v  D" M$ c& V4 |3 Z- ?
        view;
8 }/ j* t+ K9 T; ^: |5 o& \    char8 ^* j" z) H& u0 F4 `$ \4 ?1 ~5 b
        msg[133];
5 `" L3 Q" b2 x7 @( J1 p8 {2 l+ X1 q    double/ |* W( Q) Z1 F1 A) E5 \. Q
        on_arc[3];- a) c7 d& y( {
2 U# ~8 P5 X5 S* R
    sprintf(msg, "%s center", prompt);
- Q$ {  d0 L; j  `) u    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,  a; V  M6 L2 J3 W3 v
        the_data->arc_center, &view, &resp));0 j" c; i& s" t0 P( d
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
: ~; F' l. \! N3 x+ [( D. ?+ k% Y/ V7 |3 W+ L1 t7 j
    the_data->matrix_tag = ask_wcs_matrix_tag();! ~  i4 h5 Y, C. a' K2 c0 J
    map_arc_center_from_abs(the_data);; |0 |, H4 ^+ e  f% M7 I- ]; r* Q
. y- H0 b; N  z8 S
    sprintf(msg, "%s point on arc", prompt);( X/ `6 r+ D9 h3 Y- \. u1 c, Z; @* T
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,6 f5 w% s% y# n# U" O
        (void *)the_data, on_arc, &view, &resp));
, x# j9 L  X- K, D& W$ ?    if (resp != UF_UI_PICK_RESPONSE) return FALSE;' r8 y  i' w% g( e

7 ~6 X/ |9 T( m5 R& G, m    map_point_to_matrix(the_data->matrix_tag, on_arc);
5 \3 T- n# @$ I& S& _2 D! N% S
6 P+ J9 _% X. D  T    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);. d% w# T' l6 a3 e1 j  I" p

$ p$ C9 c, k' ^; V% ^    return TRUE;  x% {" a3 Z* ]$ }$ S) H$ {; G
}[/mw_shl_code]4 o; W- _8 j0 m9 g) E) X3 Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了