PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2018-7-12 11:09:03

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

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

x
: D6 W0 N: r' V6 ~& d
, f9 ]* d# {# Y7 d6 x+ {$ J) C
NX二次开发源码分享】Specify Circle 指定一个圆选择屏幕点+ y8 S5 o1 _, t0 N, |4 f& c! D
% I! q- N, {; N7 v; f
[mw_shl_code=c,true]static void map_arc_center_from_abs(UF_CURVE_arc_t *adata)
4 y: W5 O" P- {( I2 z$ q{! w9 f% _% J' N( v, P
    int3 b5 r+ A: l" {/ b, \7 q! K
        irc;5 [: B+ \: U: L2 r
    double
4 \( q& a" J8 X4 h5 J/ K' s4 F2 ]        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },1 q# q1 n6 q& p& F7 C3 f1 k. m4 g' X
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},* ?5 v" X6 J3 j+ x* R  M- \9 r
        mx[12];
& i6 n5 V  }8 f7 g
! E+ T" ^: {  B) e2 ?+ X+ G    UF_CALL(UF_CSYS_ask_matrix_values(adata->matrix_tag, &csys[3]));1 D( l% p+ w  w! C: I2 H  ^
    FTN(uf5940)(abs_mx, csys, mx, &irc);9 y- ~6 ]5 B6 Q. u/ t
    FTN(uf5941)(adata->arc_center, mx);
& V  Q  Y( @+ U7 D}
# u2 y) @/ }2 e; [. K* R2 c% |+ x' n) ^4 C6 G4 F& R
static void map_point_to_matrix(tag_t matrix, double *pos)
+ U# _8 _6 }. p% v! _0 G7 n5 k{
# V5 l& s& \' ?* U    int9 O# P4 X# y: s8 }5 }
        irc;
. D6 D9 B& U& p, E+ N% f( }1 s    double: b  g, X% ?2 O( m
        abs_mx[9] = { 0,0,0, 1,0,0, 0,1,0 },+ c7 y) k( F" ~
        csys[12] = { 0,0,0,0,0,0,0,0,0,0,0,0},: T' i) h0 e' @% g7 |6 C% Z
        mx[12];+ v+ v6 b8 Q. x

, X+ _6 ]  l, f7 a" f1 m9 J    UF_CALL(UF_CSYS_ask_matrix_values(matrix, &csys[3]));
/ n9 G* d; b1 ]) K  Y    FTN(uf5940)(abs_mx, csys, mx, &irc);0 S  F$ k0 {2 a
    FTN(uf5941)(pos, mx);/ `* _2 u% k) R7 j. c% P  z
}$ u! x0 ?  ~2 F3 _7 x# k

. l* u: L% T1 R/*  This motion callback emulates the rubberbanding circle seen when; v1 s2 O- d' [# Z. M
    using the interactive option Insert->Curve->Basic Curves...->Circle  */
/ ^. h0 q: `( K6 e4 w. g
, J5 ]& O* S" t4 U4 Fstatic void rubberband_circle_cb(double *screen_pos,6 [5 x- E! y9 i. A7 k
    UF_UI_motion_cb_data_p_t motion_cb_data, void *client_data)9 R( g" I; W( S+ o' w# G
{
6 J5 ]: p; Z# \, R+ r' D, G    double7 v# r& o6 _0 {
        axes[9];
& Q+ s6 c$ b/ _5 Q( A8 w+ l    UF_CURVE_arc_p_t
6 E& ^! m+ _4 \' z; a        my_data = (UF_CURVE_arc_p_t) client_data;
  k2 q( Y  a' r/ \" R( P  z9 y
0 N5 ~6 w$ L# _1 ^3 l    map_point_to_matrix(my_data->matrix_tag, screen_pos);
, ^0 K% j0 _  G1 W9 x    UF_VEC3_distance(my_data->arc_center, screen_pos, &my_data->radius);/ o& E( F/ ^9 i! {
2 L" |: O$ _, y- I& y; _
    if (my_data->radius > 0)6 m1 F/ Q% R) y! M9 V
    {
: d0 ?4 r  h( f  w7 ~) P* c        UF_CALL(UF_CSYS_ask_matrix_values(my_data->matrix_tag, axes));
8 P: W- A0 i  L  W
' @! L& ~# d: y        UF_CALL(UF_DISP_display_ogp_circle(motion_cb_data->view_tag,
* }! d2 g9 A& i6 h$ e# ?) I            axes, my_data->arc_center, my_data->radius));& B, k( c/ k2 c3 U8 c# ~! q) j
    }- O! k) r- k0 f+ V% W3 s! O$ i# L
}
2 ]! L$ N  H2 n0 u6 y$ n5 `
; w0 i; M9 R# t" _static logical specify_circle(char *prompt, UF_CURVE_arc_p_t the_data)
5 d1 U+ h7 \5 g. j3 p1 K{; y- y1 K1 N$ I; u: ]) d  K7 s
    int
/ z  ~* H9 ~- Y5 s6 X        resp;2 Y% f, A2 G4 g9 y5 {, O4 i0 S
    tag_t# x  Y9 v; c% u5 d; X4 N4 s
        view;
! ^+ X: x# r- q7 a" N5 K    char
- ^* d/ n, _7 g# m- B+ G3 b+ E        msg[133];; F! y! _+ K, h$ T7 s* N
    double
7 ^* p" A! d9 g( s( I- H7 x+ T        on_arc[3];
( N* P$ t: r2 k4 D0 ?1 O- v+ e- ?) R0 P) N
    sprintf(msg, "%s center", prompt);
9 _* K1 R$ X6 X0 Y, g    UF_CALL(UF_UI_specify_screen_position(msg, NULL, NULL,
+ p) v1 E) |3 s& z+ |! x6 C        the_data->arc_center, &view, &resp));; C/ r, J% s: ~4 C% {2 Q. @
    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
' W' ~" ?1 l) u" E; R- F
2 B2 i+ I' W4 [4 D2 J2 d: `    the_data->matrix_tag = ask_wcs_matrix_tag();
  H4 c  }0 y# y    map_arc_center_from_abs(the_data);. [+ D; l7 \# D0 [$ G. g! L& _

* `! b6 Y% k% w( [: r$ B* @' X    sprintf(msg, "%s point on arc", prompt);! C4 j5 h* d3 Y& V
    UF_CALL(UF_UI_specify_screen_position(msg, rubberband_circle_cb,
) r: C' `6 N. x2 D2 y# k2 ~! q( o. T        (void *)the_data, on_arc, &view, &resp));
& m, p$ E1 n( l" r9 ^    if (resp != UF_UI_PICK_RESPONSE) return FALSE;
" S5 ]) i* {8 f/ c1 m( }5 c/ M  [  \
    map_point_to_matrix(the_data->matrix_tag, on_arc);
+ I# ^! I" M- Y# `. i, F/ m) {: m5 ~7 k  W2 N* P* s0 u" \% Q  n
    UF_VEC3_distance(the_data->arc_center, on_arc, &the_data->radius);
: }# T3 |) W+ V% p- I5 p) {8 C8 N3 o  {3 y* k# i
    return TRUE;
& k6 o) `8 F' |: y7 i: D}[/mw_shl_code]
9 Q- v$ H7 o% q7 k& S3 D
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了