PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

[二次开发源码] NX二次开发源码分享:动态画圆,指定屏幕点和向量相关用法

  [复制链接]

2016-9-17 10:11:08 6262 2

admin 发表于 2015-2-9 13:45:19 |阅读模式

admin 楼主

2015-2-9 13:45:19

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

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

x

' R1 I$ O+ _5 s: B; m+ X5 J  sNX二次开发源码分享:动态画圆,指定屏幕点和向量相关用法
& y, A5 m; S( ?& s" v8 ~! R, c1 e+ n+ |. \6 m( X

) u3 Q' I! S% V5 d& _7 J+ M6 b这个案例很不错的,分享下,程序运行的结果是指定屏幕,拖拉即可动态绘制圆圈!. x/ z5 ?& v, x8 E8 W5 r- ^
  q' D4 d" l2 }; r4 r% }
#include <stdio.h>0 l' m* f2 e# W1 o  p. g) b
#include <uf_defs.h>
" V* X6 X  A1 h" p5 ]/ M' u#include <uf.h>* [2 a, @5 H! ^" J( V
#include <uf_ui.h>
5 q1 E; D) |3 [2 p: D#include <uf_csys.h>% ~; l, r% Y( ]' }" {. R
#include <uf_vec.h>+ Z+ E4 }) a# a- x
#include <uf_disp.h>7 x1 `: j3 Z+ S
#include <uf_curve.h>
: n) b4 j. T5 u#include <uf_mtx.h>
( g3 B5 V. B& Y" P8 L% c5 v#include <uf_obj.h>1 s* x$ X& [) c) o$ P  ~$ a
typedef struct% Q- u( \0 V% d' `" N; o  u
        { UF_CURVE_arc_t  *arc;
9 X4 V" H0 k. M2 e: n& r- D2 g          double          abs_ctr[3];
$ X+ x4 j" L1 k, j  g' t5 M7 u          double          matrix[9];
* k: T* H, t3 Q  n$ ~2 |* E          double          x_axis[3];
: c# Q' v! D" j) l: G          double          y_axis[3];* \( D! Z) k3 o6 W- `: |8 \. ?
        } my_motion_data_t;
  |3 }) C% ~, {! f/ x/* Define a motion callback to render a visual representation of
: K+ ?3 n! B5 R3 Q$ `0 m * the circle to be created, along with a bounding box around the
& `8 C! Y( D) [  ~" O * circle, an arc of radius 1.0, and a "rubberband" line from the
. c9 ^+ X) F- n: P * center to the cursor position.
. W# |) H. {, F */  H1 V7 U/ n1 f3 {8 B% |
static void motion_cb( double                   *screen_pos,
+ L9 K/ ~6 w  P, J1 |( D                       UF_UI_motion_cb_data_p_t  motion_cb_data," J% l" B" e( ?2 l9 j
                       my_motion_data_t        *my_data )
# Z( i2 ?, M+ r/ }& ?! X, ?{; z- Y5 C: n! l+ {: Q! L; q' Q% o
    double radius, pos_array[5][3];, r" G. t) B) K6 ]6 ]& H; n
    double xrad[3], yrad[3], x_y_vec[3], x_ny_vec[3];
* B0 j. j6 x* i% \  g    /* Calculate the arc radius:  the distance from the arc center
+ L" T( A; o0 h  M6 O     * to the current screen position.
' [7 t% O- Z1 \' v( t9 z     */8 y6 y, P5 G1 o9 v' O9 b( A
    UF_VEC3_distance( my_data->abs_ctr, screen_pos, &radius );
! g' N. Z) {; Y) x' }    /* Map the arc center to the "csys of the arc".
7 \4 f8 n' q9 z5 j: f, c     */
& N* n+ k2 P: m/ p- m    UF_MTX3_vec_multiply( my_data->abs_ctr,
" Q9 Z# `$ p8 ^3 ^" D) c                       my_data->matrix,0 L3 }! a% Z6 l+ \9 p/ u
                       my_data->arc->arc_center );# i0 @9 [' K( J) @: i
    /* Draw a circle and an arc in the view of the cursor.. s5 I7 a# T1 M
     */8 [  B" B- g8 _$ Y3 z$ A$ |
    UF_DISP_display_ogp_circle( motion_cb_data->view_tag,
4 G8 U1 a4 ^3 ?2 z  Z' z                            my_data->matrix,
7 f  D# \$ l% Y3 E& ]' |" o/ J                            my_data->arc->arc_center,
4 N( \# t/ U& u* j                            radius );+ V* z) n6 j1 K) ^
    UF_DISP_display_ogp_arc(    motion_cb_data->view_tag,2 _& A  r# R! Y/ ?1 p
                             my_data->matrix,3 V" X& P& d! `3 a
                             15.0*DEGRA, 345.0*DEGRA,
/ ?+ a* K6 W% p# I                             my_data->arc->arc_center,, F9 A# V$ r( J
                             1.0 );
5 ^( M3 N: c1 P: c8 n6 f    /* Draw a bounding box around the circle.
! _( F6 g3 m- F; f. k" d5 B3 |: Q     */6 ^# `: B& N4 `9 w0 o- T' @
    UF_VEC3_scale( radius, my_data->x_axis, xrad );
9 W0 e4 W; y! n! O  t% Q: i  E    UF_VEC3_scale( radius, my_data->y_axis, yrad );
- f$ K/ c5 r8 L# b6 \7 E8 v0 A4 e    UF_VEC3_add( xrad, yrad, x_y_vec  );
) W6 d; y2 g) N: f$ g    UF_VEC3_sub( xrad, yrad, x_ny_vec );
6 }% _) b9 B% L9 t* C    UF_VEC3_add( my_data->abs_ctr, x_y_vec,  pos_array[0] );3 y- h1 T. M- _8 G8 L8 s7 M" C
    UF_VEC3_sub( my_data->abs_ctr, x_ny_vec, pos_array[1] );8 g. C9 N& T- a5 l$ z# u$ v
    UF_VEC3_sub( my_data->abs_ctr, x_y_vec,  pos_array[2] );
# [7 v6 x4 M) c: v$ t3 E$ c    UF_VEC3_add( my_data->abs_ctr, x_ny_vec, pos_array[3] );) j5 @# }7 n$ a$ i# z2 W2 e6 @. D
    UF_VEC3_add( my_data->abs_ctr, x_y_vec,  pos_array[4] );
* s  _$ x/ a+ _8 a    UF_DISP_display_ogp_polyline( motion_cb_data->view_tag,& ?6 M+ z% I/ D% ]4 }5 i; ?
                              pos_array, 5 );
6 D, F* i; u1 n    /* Draw a "rubberband" line from the circle center to the2 a, ~  l' I' T- c3 q1 }
     * cursor position.
% S+ O1 j( ], ^/ [  C     *// s- Z- b$ y2 j6 l) D# N
    UF_DISP_display_ogp_line( motion_cb_data->view_tag,
0 ^7 Q* i0 b+ `* _; g                          my_data->abs_ctr,
# s  H1 F0 q% Z0 f" u                          screen_pos );- O  M) g6 s5 m4 ?: X
}
* h8 F5 z& B" p  b- U2 j5 u#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
! a$ k  V1 q( v2 S( `2 d5 `static int report( char *file, int line, char *call, int irc)
& P: g+ k  d6 x$ [2 H& ?& ^{; |: P# ]/ t" m+ o  }) v- ^
  if (irc)
+ j8 y3 a2 h# {+ E) `& I( \' h7 c  {5 }( i6 n) |: {! F; G, }
     char    messg[133];% C$ R* ~2 M9 c0 I0 @8 ?1 b
     printf("%s, line %d:  %s\n", file, line, call);
. N+ n0 C, W1 C     (UF_get_fail_message(irc, messg)) ?8 x/ m  }) M4 _6 t) E8 A" I3 k, |
       printf("    returned a %d\n", irc) :5 G' a" j/ e/ |
       printf("    returned error %d:  %s\n", irc, messg);/ ~# x$ S  l3 z
  }
# j8 d6 W5 R$ Z9 o: K8 V, ?6 w  return(irc);
1 p0 v/ O: J' A3 d9 g9 y}: ?5 L1 ]) f9 b, b
static void do_UGopen_api(void)
4 _6 ~. L8 T! ]' a  [/ h8 A% E% C1 @0 @{
+ t3 @2 w! V& K% n- Z3 Y2 g    int               default_plane;
- Y9 f6 ]: }! y0 l. j- T- R    int               plane_resp, ctr_resp, pos_resp;% c5 c' _4 |' x# B2 W
    tag_t             plane_tag, saved_wcs, mtx_id, csys_id,
# D' c" }4 L& u$ L; I                      arc_id, view_tag;
+ J! {. m4 q  s1 x    double            plane_matrix[9], plane_origin[3],0 |$ v, g% f( D1 `2 S' u
                      x_vec[3], y_vec[3], arc_edge_pos[3];# A, b9 v2 i& a- F+ e8 P5 j
    double           root_origin[3] = {0.0, 0.0, 0.0};% e/ B1 s' u$ A: i. k
    double           work_origin[3];
" v6 a. C  i& l7 }8 H1 d4 q    UF_CURVE_arc_t    arc;' X) ^3 r# i( {. N& L
    my_motion_data_t  my_data;! T; v# ?$ o3 [4 G

+ Y3 b. }/ d8 E& x9 x    my_data.arc    = &arc;
/ n; [. k3 a0 k; L0 }* k2 \! V    arc.start_angle =   0.0;8 m! O' c/ }: E1 t3 r# u* \* H
    arc.end_angle   = TWOPI;    /* Create a full circle. */
) g& b: W5 C, G% R& h7 s    default_plane   = 5;       /* Default plane = WCS */
0 h7 |8 t! v* o  }& v    do
- p- B; ~5 k/ u- h& F; H5 h7 |    {& @: v! }! I  i4 i1 H5 K
        /* Specify the plane on which the circle is to be created.
  j' O7 k6 _( V# t! F         */
+ L! r1 V. D6 p% P" L: ?5 u        UF_CALL(UF_UI_specify_plane(
: n' w8 `6 I8 g7 M                         "Specify plane for circle creation",
. \8 @$ \; h  V                         &default_plane,6 A6 ~6 g" P- X7 ?: t
                         1,
) X* V4 w& s4 h+ z, c, H& e                         &plane_resp,' q/ Q2 B( ~  X
                         plane_matrix,: v$ _- X) r4 H& N* }
                         plane_origin,
; U) l2 A  K2 E9 S1 @  m5 k                         &plane_tag ));
) q( L. n5 x" l        if (plane_resp ==3)
/ W! T3 Z/ B7 u2 c9 z        {8 E0 T$ B* [0 C- W* r& g. F/ S8 V
            /* Save the current WCS for future restoration.
/ h/ G+ N3 h; _& m, ?             */
6 G! c" g. d% H# Q) n3 F2 e            UF_CSYS_ask_wcs( &saved_wcs );
9 Y' r8 ^& k. |6 Z( J7 m            /* Move the WCS to the specified plane. This is
9 C- t8 s2 L2 u4 n, A             * necessary because the position passed to the motion
& m/ R* s# S* u* P2 }8 o* c             * callback, and the position returned by3 K  b& F3 I/ t2 t. ~
             * UF_UI_specify_screen_position, is the screen1 V( I" u2 l1 F5 h1 e& J8 v. d
             * position projected onto the WCS XY plane.
+ H" s  p6 O. {+ e% n             */
  ?8 y8 H) p$ `7 k            if (default_plane != 5)
, p. z  z+ s6 p! a  Q! p& Q            {
3 J& K1 i& p( n' r3 J                UF_CSYS_create_matrix( plane_matrix, &mtx_id );
# W0 l6 J" r  E# p$ W                UF_CSYS_create_csys(  plane_origin, mtx_id,
7 }8 \) o" X, }- V1 V% L                                   &csys_id );( o) U: F+ m6 n1 P+ p' a& O
                UF_CSYS_set_wcs( csys_id );% d' w( @- J/ a
            }
; W5 M! `) m5 B            /* Obtain unit vectors and the arc matrix relative to
, Y! a* m' e1 [2 }, k. B) Z: Z             * the Work Part coordinate system.  ~: O) d: f) R# i& b
             */1 l# R' S# ~1 ^' K+ D. U
            UF_MTX3_x_vec( plane_matrix, x_vec );# h0 y' D; E* @7 O, U! `/ ~- Y) `
            UF_MTX3_y_vec( plane_matrix, y_vec );* |' I- O2 l4 P% z8 `- g, v
            UF_CSYS_map_point( UF_CSYS_ROOT_COORDS, x_vec,
# m5 h/ i6 R3 [7 Q6 Z  `% S. L                            UF_CSYS_WORK_COORDS, x_vec );5 F' Z8 K6 G% z9 ]# D4 C2 b! D, E  q
            UF_CSYS_map_point( UF_CSYS_ROOT_COORDS, y_vec,* x# m3 l! U$ N8 |; w. a
                            UF_CSYS_WORK_COORDS, y_vec );
$ m% ^1 q/ O3 V+ P% t, r            UF_CSYS_map_point( UF_CSYS_ROOT_COORDS, root_origin,, g/ G/ ~4 z# z9 _* @
                            UF_CSYS_WORK_COORDS, work_origin );
* s& I- c4 ]% }& W4 R) z8 _, z            UF_VEC3_sub( x_vec, work_origin, my_data.x_axis );3 K0 e) y2 Q  Y- ]$ ]
            UF_VEC3_sub( y_vec, work_origin, my_data.y_axis );- p" ?) A/ ]( D$ Z- C/ Z0 J
            UF_MTX3_initialize( my_data.x_axis, my_data.y_axis,
$ e2 R  e4 T9 L' P& ~2 f5 v; F                             my_data.matrix );% f' B1 h1 ?3 {" ~9 x% S2 M
            UF_CSYS_create_matrix( my_data.matrix,( A: Z  \) Z/ E# r
                                &arc.matrix_tag );
, Z0 \( ^; L, Y9 V' ^+ x& x            do1 b& t- Z9 P4 N; u
            {+ \. i9 U  n$ d: r# {( M  L
                UF_CALL(UF_UI_specify_screen_position(
9 d; H% z% K2 E4 u% m                                "Specify arc center",/ h+ B! H7 Y7 \/ q7 T2 Y
                                NULL,
( ]* Z7 i! v( y, h' o                                NULL," ~8 Z1 w/ u1 R
                                my_data.abs_ctr,
9 c. i0 z/ ?0 j* D( y                                &view_tag,
- ?6 g0 k7 d8 e) d8 D8 U                                &ctr_resp ));
: K) m, w4 [% c/ P9 ]! M+ ~9 o                if (ctr_resp == UF_UI_PICK_RESPONSE). w. Q) @, A( d& _9 W
                {
; O  @% Z* s+ S* j* L                    /* Map the arc center to the arc csys.; i+ G4 _& `4 `; S! s1 F$ H
                     */9 [# S$ D* ^5 @0 f
                    UF_MTX3_vec_multiply( my_data.abs_ctr,
+ l, [1 s% H: a) Y                                          my_data.matrix,
: }$ T5 R+ g' {; a: Z0 k                                          arc.arc_center );+ G5 E4 V9 q% _4 O) N; e
                    UF_CALL(UF_UI_specify_screen_position(% [! O0 p  b5 _/ q6 E4 m
                                    "Indicate arc radius",' u1 F1 b: t, V
                                    (UF_UI_motion_fn_t)motion_cb,0 O$ H8 _: y# H4 m2 ~1 G+ s: [3 I
                                    (void *)&my_data,7 ?; C0 J% [! b, v6 l6 ^
                                    arc_edge_pos,
3 w& F1 j, W$ W- ]( K: \1 w                                    &view_tag,& n. F4 s0 x2 M& E) W
                                    &pos_resp ));
5 p; r! h7 w0 t  t1 `1 E' Q                    /* If a position was obtained, create the
. [, M4 E. m# [" V                     * circle./ K" j' F4 q. w6 |
                     */- \1 C# Z4 C' K
                    if (pos_resp == UF_UI_PICK_RESPONSE)3 f+ F4 c) L  H  e5 U9 I
                    {+ l) y. ]2 s9 K8 h, [
                        UF_VEC3_distance( my_data.abs_ctr,
% y6 ~! B" S* ^% f                                        arc_edge_pos,
) }; }0 R3 ~, i5 ~                                        &arc.radius );
# B) \  Z6 a7 m* d: a* I6 i                        UF_CURVE_create_arc( &arc, &arc_id );2 ?4 H" r; B5 P( C3 m5 l/ q; {) C
                    }2 y) m& ^/ Z; B! `- A! x5 Y
                }" E7 q9 F% Q+ ?5 G
            } while ( (ctr_resp == UF_UI_PICK_RESPONSE) &&
4 d8 C1 L  M* S+ C6 R# R5 z# ?                     (pos_resp != UF_UI_CANCEL)           );0 Y( W# A- e& R% g0 j
            /* Restore the WCS if it was altered above.
- n7 \" b2 T( v: x" v5 `* P             */1 E# D  Q. {, N
            if (default_plane != 5)$ a. q' Q$ ^  W  |
            {) `( g0 R- s2 \" O
                UF_CSYS_set_wcs( saved_wcs );# E* N+ u) t+ I- k  y& D
                UF_OBJ_delete_object( csys_id );
  A9 j, y: ~5 d- P            }
) o  g3 f, J/ i$ c1 d        }0 d  _' x6 o6 L7 P7 d- `
    } while (ctr_resp == UF_UI_BACK && plane_resp == 3);
6 R* A# x( I% W4 @' Z7 c}
  e* x" g- d6 P/*ARGSUSED*/
0 ]5 n5 ^. @/ ]! Z+ |& B# \void ufusr(char *param, int *reTCode, int param_len)/ N& S! \$ @- a2 \- W. X' E
{
9 x1 E) b& W& ~3 [- g  if (!UF_CALL(UF_initialize()))% F" Q7 c# z: `; n
  {- P7 X, T; U  {8 B' [5 B* Q0 z5 c
    do_ugopen_api();3 Q" J, Y$ B  U# i' u
    UF_CALL(UF_terminate());/ k; `/ g3 C8 N- T; q, P
  }4 |5 O" o; P; J4 z5 c; x1 ~; ]
}
1 ]- U( P& I/ H9 p6 H6 c  oint ufusr_ask_unload(void)8 A8 [8 X- m0 d
{
! T* d: H. ^5 ?0 {! L' x2 S  return (UF_UNLOAD_IMMEDIATELY);
, j  v. H( |- w3 |* v+ z; i}
# M1 `( W# ?' i$ H' t  \1 t: n/ i  \+ F" K4 @* C! l' l+ u4 J
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复2

yuleihz 发表于 2016-1-8 22:21:57

yuleihz 沙发

2016-1-8 22:21:57

老师来个NXOPEN的耍耍
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

wu150060 发表于 2016-9-17 10:11:08

wu150060 板凳

2016-9-17 10:11:08

学习一下,顶( }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了