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 6301 2

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

admin 楼主

2015-2-9 13:45:19

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

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

x
! H' y5 X- P) G7 q& f3 x$ ~
NX二次开发源码分享:动态画圆,指定屏幕点和向量相关用法9 H8 ?% T: z6 e. \) V$ U8 {3 ^6 A

% W! B& J2 ]8 ~" O. S' c1 H6 L

6 g; o: {5 r! Z( O5 i这个案例很不错的,分享下,程序运行的结果是指定屏幕,拖拉即可动态绘制圆圈!) @$ ]1 g9 B% k0 K8 A: @! S1 M$ {
* X7 D2 ?: k4 |5 d
#include <stdio.h>
. R8 d8 }, o- U4 A  R#include <uf_defs.h>$ U! H9 I! {4 i3 L2 X6 t( K& t% H
#include <uf.h>
& v2 P2 _# t- \3 u; |! M#include <uf_ui.h>
8 G4 J* `6 {3 i) y2 R6 e' s. g#include <uf_csys.h>$ z$ c7 {8 _9 ?
#include <uf_vec.h>2 O8 i* X+ h( U0 D
#include <uf_disp.h>
. A/ U/ g- d" G" {' I#include <uf_curve.h>
( p8 T5 L7 s% r: d#include <uf_mtx.h>9 @% q# ]8 h) g- V0 ~
#include <uf_obj.h>
3 i+ q+ a0 S3 q! D) F- ftypedef struct  j, q# _( B9 i+ u- ^1 u  X
        { UF_CURVE_arc_t  *arc;0 C: e/ Q  d8 i8 U. {
          double          abs_ctr[3];
/ x) x% y* y6 q          double          matrix[9];* |5 V4 s! s$ }# S. _; L' c4 _
          double          x_axis[3];6 H8 L# D& e4 |- t* y
          double          y_axis[3];
3 u( k% i) A& ~# z) C" |9 J/ m3 M3 G        } my_motion_data_t;5 J( d7 U5 x1 G
/* Define a motion callback to render a visual representation of
6 Q' A7 m6 A4 x  l1 M7 M * the circle to be created, along with a bounding box around the4 O9 g  u) O, a2 o- w
* circle, an arc of radius 1.0, and a "rubberband" line from the
# Z9 {- y! |' Z6 R * center to the cursor position.: f* u! f: K$ ?+ D( m, @* ~+ y$ Z
*/0 `* Y4 P2 s* v' b' @1 m. x
static void motion_cb( double                   *screen_pos,
! \2 [/ P( ~8 C6 c" f! a                       UF_UI_motion_cb_data_p_t  motion_cb_data,. [  w: J) B0 ~  A! l' P' M) S
                       my_motion_data_t        *my_data )- J' Y3 a. c, q( t
{
$ Z+ s0 q; s; v( \( B& s    double radius, pos_array[5][3];# m9 n! K3 S8 ^" D" x  ?$ r
    double xrad[3], yrad[3], x_y_vec[3], x_ny_vec[3];  B/ ?( L$ C7 G$ A
    /* Calculate the arc radius:  the distance from the arc center6 `0 F2 U! p! P
     * to the current screen position.
; R) {( W) @; x- ~. H     */
; n& P' X: z6 E    UF_VEC3_distance( my_data->abs_ctr, screen_pos, &radius );
% u$ `% v' P, |) g- k% P4 d+ n    /* Map the arc center to the "csys of the arc".4 L0 }7 ]* ?  Z( _  O
     */* s  G1 e; |0 q8 p, ^$ L1 c% P
    UF_MTX3_vec_multiply( my_data->abs_ctr,; n0 R% U" h) C* I; J8 y( F
                       my_data->matrix,
. N# n: G  f: g# d- f; S                       my_data->arc->arc_center );  m/ m$ U# {- {" `9 G
    /* Draw a circle and an arc in the view of the cursor.% V7 z- F- q* L% ~
     */
  }$ N/ m8 N! c$ F6 \! M    UF_DISP_display_ogp_circle( motion_cb_data->view_tag,
( G* q3 C* x( I% w                            my_data->matrix,
( E0 |' H1 c. S, C  c" j5 O) {                            my_data->arc->arc_center,
% \- @# i$ K/ q. y                            radius );
! p2 W9 @' ?8 |5 z    UF_DISP_display_ogp_arc(    motion_cb_data->view_tag,. j2 H! ]( q! Q
                             my_data->matrix,
* R) C9 z1 p/ H( F( w                             15.0*DEGRA, 345.0*DEGRA,
9 d) `1 Y4 A! k& e; S) J6 X                             my_data->arc->arc_center,# H2 ^# M( h) L. E# \! j
                             1.0 );! Y% F. G' G) ^( A* p- a4 j
    /* Draw a bounding box around the circle.( [5 p" I$ N9 M4 j! B% s' R" n5 z3 Y
     */0 u; [5 X, J( i' {2 x) ~, J
    UF_VEC3_scale( radius, my_data->x_axis, xrad );
4 c, e! |3 D3 @0 p* \; q, t    UF_VEC3_scale( radius, my_data->y_axis, yrad );7 v9 K% O  {- {4 h. B6 l  e3 X
    UF_VEC3_add( xrad, yrad, x_y_vec  );
  g/ M$ A2 {& O  c    UF_VEC3_sub( xrad, yrad, x_ny_vec );
5 I+ V  A/ e7 @, |* Y0 G9 L    UF_VEC3_add( my_data->abs_ctr, x_y_vec,  pos_array[0] );
0 _) y& `6 J5 X5 }0 l    UF_VEC3_sub( my_data->abs_ctr, x_ny_vec, pos_array[1] );' @, C7 }, G6 i" E! c+ n$ I1 }
    UF_VEC3_sub( my_data->abs_ctr, x_y_vec,  pos_array[2] );, S3 V- r2 y1 n$ s% u6 C, K+ h5 u
    UF_VEC3_add( my_data->abs_ctr, x_ny_vec, pos_array[3] );
; H# C0 [5 A* h7 `    UF_VEC3_add( my_data->abs_ctr, x_y_vec,  pos_array[4] );
9 h( ]' k; a/ w8 ?7 \    UF_DISP_display_ogp_polyline( motion_cb_data->view_tag,
9 l) d4 N9 E8 F                              pos_array, 5 );# R# q& E9 l: E- X! o  B9 l
    /* Draw a "rubberband" line from the circle center to the" T- H4 I1 ^/ Z8 e8 t+ \
     * cursor position.7 K" b" h) Y. j1 F& q
     */
# M6 q, {! D# ]. R" U) K5 X9 t, e    UF_DISP_display_ogp_line( motion_cb_data->view_tag,
2 v. m2 J  d' _  R6 k9 s                          my_data->abs_ctr,
9 g# P- _3 P6 N7 ~3 r  S4 }2 u- t                          screen_pos );" u; x: P' f8 F
}# x6 J( ?$ i5 ^% S* k: j- T
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
6 W( Q0 K1 ]" U8 rstatic int report( char *file, int line, char *call, int irc)
4 h. V; N& l5 L! z' \5 g# o% J{( e) w* F% z% a% f4 y5 Y% q
  if (irc)3 v/ y1 z( j; L* ~
  {
9 [& ?( ~6 a. M- N( j% J     char    messg[133];
0 V. m# p8 t2 u     printf("%s, line %d:  %s\n", file, line, call);
1 z: t5 L% l; y! n% j2 z/ v7 c: g     (UF_get_fail_message(irc, messg)) ?
& h) W- D( d+ L! K2 E: g       printf("    returned a %d\n", irc) :
3 J# T! ~: O; F* Q( k       printf("    returned error %d:  %s\n", irc, messg);8 F" l6 z( d6 l
  }
, \5 h+ U% v' E. [, k7 y6 l  return(irc);
2 ?+ n* E: ?8 X9 ]! h+ u}: _1 p9 e. ?/ L+ ]  S. g3 M% t( O
static void do_UGopen_api(void): `3 {( v3 `$ k5 p& a) E
{
, e' u" k( |2 f8 F+ q    int               default_plane;/ X4 \" Y" k# }3 e" @
    int               plane_resp, ctr_resp, pos_resp;
2 _( W& Y% g) X, e# v) U, a: }  X4 q    tag_t             plane_tag, saved_wcs, mtx_id, csys_id,; w  v) Z* G6 F( S2 q/ U% x7 n, w
                      arc_id, view_tag;
# B/ r& w4 g+ I$ b, ?% N/ `5 V    double            plane_matrix[9], plane_origin[3],
, Z5 ^5 ?4 Y9 P' S* f) F+ ]+ C                      x_vec[3], y_vec[3], arc_edge_pos[3];2 P0 A7 c' Z+ j6 R, E
    double           root_origin[3] = {0.0, 0.0, 0.0};
7 [  }- ]7 K9 r5 V    double           work_origin[3];% N& v3 a1 ]8 C$ C9 L
    UF_CURVE_arc_t    arc;' U* Q8 x" a' g. n2 m
    my_motion_data_t  my_data;
! F! @. l. X% y3 e$ q4 Q, ]) w/ _+ A  o# }. A: H: v# |6 B
    my_data.arc    = &arc;
4 ?- U: r  K9 P  H; n2 q4 _    arc.start_angle =   0.0;5 c- M8 l3 G* w7 F! k
    arc.end_angle   = TWOPI;    /* Create a full circle. */% R7 i# }9 n" X; U& @% U
    default_plane   = 5;       /* Default plane = WCS */
& Y# Y6 R* ~3 G' x7 p1 w3 _) D' a    do, K4 k) _( a) A( q3 k
    {
  Q) I$ y7 [  ~2 z) M5 ?        /* Specify the plane on which the circle is to be created.: }( |$ m$ Q. ^4 u4 i  L4 \/ U
         */
  R: d4 `  {8 q$ H( o  d+ P        UF_CALL(UF_UI_specify_plane(
3 s2 f1 n. A) Q                         "Specify plane for circle creation",
2 j. @% l: d7 z, S2 E0 A                         &default_plane,
! }) _/ a% ~' t2 G: s( M8 `0 G, s$ y                         1,
1 ~5 `3 Y  J/ A7 J& a4 Z                         &plane_resp,
4 E) A! @! }4 y% L* W/ F                         plane_matrix,8 D) j- i8 h' F6 D  q9 F
                         plane_origin,' u+ h0 d, o2 b6 c
                         &plane_tag ));
$ d2 N2 @( {5 k        if (plane_resp ==3)* I* Y8 k. [+ O1 _. p
        {
' H! e& K9 Q- [! n9 Q+ M6 ~$ v            /* Save the current WCS for future restoration.
1 L0 {& H+ P7 Q! m             */, e7 }; q9 U% y+ @% k4 M
            UF_CSYS_ask_wcs( &saved_wcs );4 n; ^+ ~$ y, {. N
            /* Move the WCS to the specified plane. This is
' B* E9 c8 p" M3 R) f& W             * necessary because the position passed to the motion8 v; T5 ~, c3 r9 ?% p9 f' j  ]5 h
             * callback, and the position returned by
, Z8 C. R7 a6 `# R' r) F+ u             * UF_UI_specify_screen_position, is the screen6 K# s8 v: O5 \
             * position projected onto the WCS XY plane.2 V( R, H, \/ q  M- I
             */
% l, m, D, z( y/ w' |1 ]& a            if (default_plane != 5)
# J  g% H; M, O# {$ A            {6 t- \0 n) G7 _1 [3 d# ^
                UF_CSYS_create_matrix( plane_matrix, &mtx_id );
3 x- u1 t2 G) w                UF_CSYS_create_csys(  plane_origin, mtx_id,: _) B1 n* C1 R8 w/ h9 E8 G
                                   &csys_id );6 o" L+ w$ @* `& Z5 s. u/ t% R; s
                UF_CSYS_set_wcs( csys_id );
, A/ R3 B0 ]& h$ I            }
- w+ n$ r5 m6 B& D# G2 V, w            /* Obtain unit vectors and the arc matrix relative to
: m! H! e) L4 Y% `             * the Work Part coordinate system.2 K& C& U" V& ~3 N0 l
             */- B) {+ s! J3 ~  [% M/ @
            UF_MTX3_x_vec( plane_matrix, x_vec );
. d- P) E6 S! C" @( K            UF_MTX3_y_vec( plane_matrix, y_vec );
- I( y$ \6 l( h( x            UF_CSYS_map_point( UF_CSYS_ROOT_COORDS, x_vec,
3 Y* K5 g" a* d  m' X: Z; k                            UF_CSYS_WORK_COORDS, x_vec );( ~1 e. k* G: L  A' N' o* r
            UF_CSYS_map_point( UF_CSYS_ROOT_COORDS, y_vec,
9 g1 e& W3 c. p7 P7 y- q                            UF_CSYS_WORK_COORDS, y_vec );5 N" s8 N0 x+ P2 U: K$ P7 f# M: ^
            UF_CSYS_map_point( UF_CSYS_ROOT_COORDS, root_origin,
3 ~4 {) D7 a2 h                            UF_CSYS_WORK_COORDS, work_origin );
( Q& b0 n. b( N9 x3 h7 |, \" j: C            UF_VEC3_sub( x_vec, work_origin, my_data.x_axis );
4 `1 j) s2 Z' C2 `& N            UF_VEC3_sub( y_vec, work_origin, my_data.y_axis );. V& z/ m0 }- \: t' i
            UF_MTX3_initialize( my_data.x_axis, my_data.y_axis,( F; ?/ s9 z7 X1 o1 j9 E
                             my_data.matrix );* Q6 W; k: j! ^0 J/ n; g
            UF_CSYS_create_matrix( my_data.matrix,* e0 D% N* i( J6 P) S/ h
                                &arc.matrix_tag );5 g4 a( w2 k$ V
            do
( p4 ^8 o# ?: A            {
) Z: ^( ^9 P, {$ k8 W: e                UF_CALL(UF_UI_specify_screen_position(+ q: ?; I5 V$ Q2 U2 V7 U  K/ @. l* B2 s
                                "Specify arc center",
5 g$ `% |& q& h8 n                                NULL,
# T5 j9 w2 a. P0 i+ ]                                NULL,  z2 k, M9 n5 Q$ P9 r( J! D
                                my_data.abs_ctr,! d$ k2 ]0 H+ o8 u
                                &view_tag,
9 w* g, R' [& {                                &ctr_resp ));
) U4 H" E) ~! I3 P4 P  z) c( J! s                if (ctr_resp == UF_UI_PICK_RESPONSE)  l" H) b4 B# S# b/ }& x
                {
$ _3 X$ c) M7 A9 J, \% D                    /* Map the arc center to the arc csys.5 E! A% [/ T* Q' P0 l
                     */
$ i. g$ J. o8 u1 I" O# G# F                    UF_MTX3_vec_multiply( my_data.abs_ctr,
+ n% {% J" b# r" K8 _                                          my_data.matrix,6 M+ y7 P$ O1 }$ F$ E9 R6 B7 {
                                          arc.arc_center );
1 p) \2 i/ p) |  S& G4 [                    UF_CALL(UF_UI_specify_screen_position(
! ~. v! R; W8 S7 j3 z) ~                                    "Indicate arc radius",
$ E0 v0 D: v9 r' z8 F7 U                                    (UF_UI_motion_fn_t)motion_cb,
8 w* _: _, h0 P/ I" L4 O9 v                                    (void *)&my_data,
% \9 K5 t. S0 i% ]: {" e3 f3 `5 H                                    arc_edge_pos,
6 k/ L) e  S$ {- q                                    &view_tag,8 Q& s3 p; A" D& D% U8 \$ N! h! P
                                    &pos_resp ));
) [% p& m/ a! J  d                    /* If a position was obtained, create the) _& _& D5 s3 v6 F5 @" y
                     * circle.3 y  b) t2 ^: d, A: l8 }9 t5 i
                     */
0 J9 c$ N- @0 O. D                    if (pos_resp == UF_UI_PICK_RESPONSE)1 _% t' l: M0 g
                    {
; M2 O  ~1 ~7 v6 }% l: z                        UF_VEC3_distance( my_data.abs_ctr,3 D* `) a) E6 ?) m: j- ^5 G
                                        arc_edge_pos,8 r& Y2 Y3 H7 Y3 @8 n4 y
                                        &arc.radius );6 q$ ^: Q2 W9 C! i, Y) g( `8 I
                        UF_CURVE_create_arc( &arc, &arc_id );; F( o7 M4 O# [' h) V5 V
                    }
& _! ~0 s, z$ ]8 B/ G& D                }  R& n& H- W) J& S( y% X3 J
            } while ( (ctr_resp == UF_UI_PICK_RESPONSE) &&0 ~! P5 y, I% H! c
                     (pos_resp != UF_UI_CANCEL)           );
4 v; G" [8 d  L+ O: Z: i* v            /* Restore the WCS if it was altered above.
$ `! i; l8 ?  x             */
7 U- l3 E6 Z: ?/ {; @# B) R# l            if (default_plane != 5)% @/ A  z. k) N" J
            {
+ p1 A1 _1 Q8 Q! z4 i- G2 t                UF_CSYS_set_wcs( saved_wcs );
+ i! p' v' V1 g                UF_OBJ_delete_object( csys_id );
8 }7 F. R$ R: h1 `& n8 J- o            }: @% J3 v1 R+ w: I8 Q, Q; e
        }6 s& A, V* U$ X, \0 c" R
    } while (ctr_resp == UF_UI_BACK && plane_resp == 3);2 Y. y& ~8 I4 e+ e% O8 `! C
}" c" p8 l5 f, Z' m# J* Z! t
/*ARGSUSED*/1 k& z9 t) ~* n* j/ ~3 H9 O' ]
void ufusr(char *param, int *reTCode, int param_len)
# v$ a1 x/ r+ d; f3 `! I% @{$ ~/ K7 `9 j2 D7 g. E
  if (!UF_CALL(UF_initialize()))
( y( s3 |6 q9 J$ T" V% g  {4 s# f: _' L5 n) s; K; x
    do_ugopen_api();6 x2 x4 S8 C* w: N. T: e2 s) L
    UF_CALL(UF_terminate());
( L/ E! a' W( I, |  }
; O8 T$ O) E7 b}/ _6 t8 K- I/ m9 C* ]
int ufusr_ask_unload(void)( R) k8 Y) {* p0 M# d; x4 c0 _" |+ Q, L
{
; T8 |; p& e  m. a& T# F: p" |7 V  return (UF_UNLOAD_IMMEDIATELY);/ m8 A/ Q  B  w& E+ `  D3 F
}% W' `1 x/ q% A' f. R7 I- k! U

0 {7 W: E7 G$ a' ?/ F6 V; w
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了