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

[二次开发源码] UG NX 二次开发中关于 ufun向量的使用教程合集

  [复制链接]

2014-7-29 12:03:47 4183 1

admin 发表于 2014-7-29 12:01:13 |阅读模式

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。( l+ O* _" W. g) o3 O8 O
源代码如下!2 {! Y* p0 m: r+ o- j& b0 l7 B

& Y( m# l; M/ X( H% p" e2 i5 v5 L% |* K5 f
  1. 2 A2 v% k0 t' a" `  a9 F$ S
复制代码
$ G' v) L0 M# u8 s7 h2 a8 ]; d. m

( }. l5 K" a5 \' r/ v' xchar msg[256];
% ?+ Z( ^" G, P# r# F6 Y8 k. i% vconst double vec1[2]={0.2,3.4};( u& K7 u; j! {
const double vec2[2]={1.5,4.5};" s% Z1 M5 X7 o
double scale = 1.5;1 ^( e2 I9 A4 V3 \+ K( z5 {
double scale1 = 1.3;
: `) r) k% m6 M5 f* C7 R1 o, s7 ?double scale2 = -1.1;
) X/ |5 S0 `; gdouble sumVec[2],vec_comb[2],vec_perp[2];
0 h' b3 W6 S* S' L$ adouble oscale1,oscale2;
* H* a0 w3 }* ?. j; T- q, Jdouble tol = 0.0254;
' N8 Z+ F8 y% E. q' E1 Wconst double vec_src[2]={1,2};" O9 C/ P: o! V4 W# r' R
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];7 n- o2 B7 k5 Y9 X
double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];
0 m+ [# D3 r- Jint isEqual,isParallel,isPerpen,isZero;3 s5 u8 Z$ |& a/ e& q: p
       
: w3 D+ Z8 U0 ?& j0 Y6 ldouble parameter = 0.5 ;9 G+ k5 ?( P6 V+ R
double pnt1[2] = {0,0};# Z7 U' V) W( N: F" Y; S
double pnt2[2] = {2,5};
# t- @+ O* y) B2 x' Udouble pnt_on_seg;& s) T: y6 t' e# G0 v1 m  X

! ]' o( t/ F. V; F" C6 s* ?
- p; ]% Q+ M% M( I//------------------------------------------------------------------------------
6 u% }, }7 s6 H// Do something& B5 g9 R' \) w' G& w! I
//------------------------------------------------------------------------------. s% p4 x% f8 l, Q0 O, j

5 k! f2 y  B! @; P# m7 M+ T7 w
7 f  u  b- w( R8 n* J- A- wvoid ufvecTest::do_it()
2 c6 h" Z" B3 O+ w{
2 z$ I5 [( W2 n8 U7 \5 l
4 e. M- [- O! d( Z        // TODO: add your code here
( I' y& p8 A1 w6 z       
& X- R4 F; M- D$ B+ n% F' @. z( D1 h# T       
* Z" f7 y/ X4 \        /*
. M# E8 Z1 `6 ?4 ]4 H& K        ======================, Y9 ^# \; W& O/ A
        1 UF_VEC2_add : 两个向量相加
! v2 g) M3 b% J  \5 L6 Z  a        vec1 + vec2 = sumVec
- L) j" Z' l- G- _        ======================
$ Y+ t' w4 v; n! R' k        */- s( O8 f" Y0 T! h5 Z
        lw->Open();! s/ Q9 H' J% ^0 T+ T; W" O& R
        UF_VEC2_add(vec1,vec2,sumVec);
+ X# z  c) B! i) O        sprintf_s(msg,sizeof(msg),"vec1{%f,%f}+vec2{%f,%f}={%f,%f}",vec1[0],vec1[1],vec2[0],vec2[1],sumVec[0],sumVec[1]);
9 o8 e7 g6 P- I4 {2 G+ j        lw->WriteLine(msg);
( X' k% i# K5 c0 t4 b
$ X* S" M( v$ o* W7 J        /*
( {! \( l: K. i        ======================# N- G4 f5 @9 `6 I& _, \' W
        2 UF_VEC2_affine_comb : 仿射变换4 f& Q4 J1 S8 U; Z7 K0 `
        vec_comb = vec1 + scale * vec2;* P5 U' V0 b- @2 u* t
        ======================) Y5 v# j6 W" b5 \6 h
        */
9 A7 A5 I# v5 f# n
# c6 l+ {& a$ U6 C' d        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);' X' ~: H  `1 M5 V9 q+ g2 E
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f}+%f * vec2{%f,%f}={%f,%f}",vec1[0],vec1[1],scale,vec2[0],vec2[1],vec_comb[0],vec_comb[1]);
9 K6 j  f. w0 ]7 P. A  o9 k) p        lw->WriteLine(msg);1 f- T/ j) u$ H
, @5 Y" c* D( v# s& y0 H- b1 g
        /*
) v$ s9 e* B' E3 t        ======================
4 y/ `' Z! H/ o' N        3 UF_VEC2_ask_perpendicular : 求出垂直的向量
' ^( ]. g2 q& c. r0 r, _2 I        vec1.vec_perp = 0* z- {1 W8 H  E0 H3 O# Z! X
        ======================) T$ d4 E9 `0 j* v# J$ d+ }
        */' O, @! P( A9 x

/ k3 M8 u) W/ L0 X3 H5 E: w        UF_VEC2_ask_perpendicular(vec1,vec_perp);" x( d0 M1 v! W1 _% Y. m  I, _
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);5 Q5 Z6 `9 s2 p  A6 d" O2 g
        lw->WriteLine(msg);$ q" a2 o, H" `4 a- c  G
) b; }6 p2 _  h4 D0 t1 \
        /* ) j: ]. s( [  G3 a& y! a( c8 c
        ======================. X, \& y, A2 v, G
        4 UF_VEC2_components : 求出垂直的向量
% A9 d( i9 j; ]5 Q5 \* ~        vec_comb = scale1 vec1 + scale2  vec2
) }  j' x/ E$ P        返回: 0 可计算 1 平行& F( ^7 b5 s3 w+ H' c8 T' `
        ======================! v1 `4 _" W- v  f+ G' s
        */
  g5 W9 _3 T4 C  H
4 Z, A- t  Y" ?/ c- q) l+ a        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);8 p( g6 x& S1 f; x5 f- t$ m
        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);9 {' n& R3 G8 V% y& N# i
        lw->WriteLine(msg);
0 j! ]8 s( j1 y" @! b6 e% @/ N; a% N1 s; P
        /*
' D: i% J8 u3 x; i* f- p: R& m! r        ======================
  i0 C9 q3 h( X- j        5 UF_VEC2_convex_comb : 计算点在直线上的位置
5 F, I7 b3 F3 O  p5 R7 U        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
: e5 b5 \* K* [# o' }        ======================8 K) d6 B% {: E$ j1 R3 ~
        */
7 x1 S4 J* U& }# I6 F5 U
8 m1 n3 A9 m1 x6 V3 I2 p- a4 O. i- p7 z) H1 a( r: c
        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);
% I6 I$ v/ K$ S( l9 S$ O/ t        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);" `+ z& t# r( x
        lw->WriteLine(msg);3 a) N+ L' u  h4 @2 q7 B
# c) _. _& a+ X1 h8 g/ P
                /*
5 ?! ~* Y3 ?& N2 k; L6 T, `# b        ======================3 Z( o/ v/ U/ u5 Q- r5 [! E
        6 UF_VEC2_copy : 向量拷贝
5 F0 x3 {0 N2 L) {' {. O2 d! \$ U        vector (vec_dst = vec_src).
/ L5 r. O2 E4 G! H        ======================( P2 Q9 E8 }; O+ h
        */
! H& Z# h& N) m. ]3 w2 k0 s/ e: |4 L

  I& ]# t, x% }% x! y6 A        UF_VEC2_copy(vec_src,vec_dst);& b  P8 [# D8 ~) W  E6 _
        sprintf_s(msg,sizeof(msg),"vec_src = {%f,%f}\tvec_dst = {%f,%f}",vec_src[0],vec_src[1],vec_dst[0],vec_dst[1]);
9 {3 |7 t8 ^' k, S% a- _$ E" _* r        lw->WriteLine(msg);
6 M- ?0 ^! k5 P' N( R9 u
* Z: N- u( w8 J6 F/ ]        - {; E+ i2 K6 d
                /*
: I  k8 B; s# Z  I6 ?  b$ ?        ======================( C* {! ^  s: Y( e$ M6 o9 P
        7 UF_VEC2_cross : 向量向量积- V9 ?! n' N; ~' ~: C
        cross_product = vec1 x vec2
1 {7 g9 T7 x5 X: v' [        ======================& C" H8 X) [4 d
        */& ^# U! s- D; k7 M! v! u5 Q* @

* R5 O0 m' u* Y" M4 C; }$ A# K" m& J2 J: Y$ b( N
        UF_VEC2_cross(vec1,vec2,&cross_product);
$ O% K/ l) k% Z        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
. G4 A9 K9 ?/ a" u' @' z( ]        lw->WriteLine(msg);4 s% i: e1 l5 U
& L& S' P9 S  r: }& D
* [2 W* H' s6 L* W" E8 v( F+ b
                /*
3 @/ j7 V: |, x# W# O        ======================
; S+ i$ R  t3 i7 k4 ^2 {        8 UF_VEC2_dot : 向量数量积
5 S" U4 W1 A0 p0 A, h6 D        cross_product = vec1 . vec2
6 n/ ^; K, R, a        ======================
' G2 q- a$ f& z3 {$ L8 `( w        */$ O: ~# G. d* w* W7 O; m" W2 U

+ S5 O' s  d5 W8 ]0 P: s; I
# R0 M. A6 T; r, x        UF_VEC2_dot(vec1,vec2,&cross_product);% `8 q: c8 d9 ^. {6 X
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
* S. @  F9 A# F/ \7 s        lw->WriteLine(msg);
: ^9 z1 ?$ l+ E4 Z$ q; K% ?
6 V( e/ ?, k: j: }
8 V1 C3 f# `: w2 v  v+ Q& g. h" H8 d: A        4 v' }, s# L& L* _
                /*
$ g& Z, y) C6 G$ p9 [- I        ======================! U2 A% p# Q% S$ U9 d3 m) Y2 X
        9 UF_VEC2_distance : 两点距离
) w* H2 a0 h5 V/ m) b        (distance = ||pnt1 - pnt2||)
6 V  S' A6 k4 x9 o        ======================
! E- n, c2 q) b6 L% p& r        */
  i4 h* T7 W3 e& N  g. O
2 P7 [0 ~0 {4 C1 A
( ^( I) C" X& M* W! i( X1 S$ P  O2 e8 |        UF_VEC2_distance(vec1,vec2,&distance);
7 k7 A# o5 j- n$ S% Y  K) }        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);/ o% q% N+ O7 E$ \3 [: P2 u
        lw->WriteLine(msg);! T# g! z+ |: v
0 i) V8 j2 D" a( ?# h
        /*
- ^# Z, U$ e* p, i* d% @' ?        ======================7 ?- p, |* _3 M$ a* ^% a9 s0 F) q" S8 Q6 ?
        10 UF_VEC2_is_XX : 判断矢量关系8 @. u- x3 z" a( i
                0 = false) s6 H1 @; C; n5 D
            1 = true
( m0 ]) |! W5 B1 D( O" @' n        ======================
6 c9 ~: A, s; J: M0 v        */
$ ~# }3 H! a- k8 t/ D2 S  H$ w% P/ C6 C
  r, k3 }. C+ G( j/ i4 g: Z0 o. r7 K7 E; u  B
        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等7 ]- x! {5 [* P# i7 l2 ?
        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行% g5 p! C6 [" O. J0 W6 ~( ^, B4 q
        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直- c% q) x1 _5 d* {# Z5 `) d
        UF_VEC2_is_zero(vec1,tol,&isZero);//为0
4 A2 f3 v5 m' R3 \" }! D
+ i. j  B0 W, R4 \, H        sprintf_s(msg,sizeof(msg),"vec1{%f,%f},ve2{%f,%f} is %d equal,%d parallel,%d perpendicular,%d zero",vec1[0],vec1[1],vec2[0],vec2[1],isEqual,isParallel,isPerpen,isZero);
1 O7 ~7 R, P' d# m7 Q$ U: C        lw->WriteLine(msg);
% V; `6 n+ Q& ?3 e% \+ O. V
. X+ H4 S" b5 v) G. C3 N        /*
3 g: [" Y; ?/ f        ======================# ]! a9 o& T. ^% U6 `
        11 UF_VEC2_linear_comb : 线形组合2 o8 m) A* Y7 P3 c) Z' q5 J* n0 j
                vec_comb = (scale vec1) + (scale2 vec2)
! n3 W' }, W0 {& l; B( `        ======================
- Q8 E9 J4 w1 r( }" X3 \6 w) I        */
& w6 P5 [3 h5 T) @+ Y) t0 f' q' V- ~) g. W2 p
        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
! a' ]& T. C6 {
; L5 B7 X& t9 H$ C; _8 E$ w        sprintf_s(msg,sizeof(msg),"vec_comb = (%f {%f,%f}) + (%f {%f,%f}) = {%f,%f}",scale1,vec1[0],vec1[1],scale2,vec2[0],vec2[1],vec_comb[0],vec_comb[1]);
7 t7 l( X1 O/ W  j: M        lw->WriteLine(msg);
& u% p- V9 M; p, I1 X7 h8 z5 m6 R. q
                /* % M" a: T- O+ K( m- O; L0 H
        ======================6 V7 Q% v+ J( g3 I" O) o+ n( Y
        12 UF_VEC2_mag : 向量模! d9 ~# r- H2 J4 x! G
                magnitude = ||vec||$ @8 n( p5 M7 ^2 X3 c9 `5 a, M
        ======================6 h- c! e; U7 {2 A. r
        */
7 j. `+ G% h  X% {  y3 q: `0 b( e# _! n* |1 S% ?0 w, T# f' m
        UF_VEC2_mag(vec1,&magnitude);1 y- u. I) J6 N' u' }  `3 x- r; T
( ]) e$ A7 x$ m. i$ l! [
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);
. l2 l; \5 t, m1 P        lw->WriteLine(msg);: j% z# l: J0 K+ U8 G5 H% M
' ?- D+ n& r  O: _- \$ r
                        /*
& ^6 q& v/ }' z* _9 @        ======================* T- ~3 t+ R8 ]; O
        13 UF_VEC2_midpt : 求中点 ( t# Q4 w8 a7 n3 l  E
                mid_pnt = (0.5 pnt1) + (0.5 pnt2)4 b& e2 @# ~" c+ x0 {+ q5 {- x
        ======================  [4 P$ e: M$ C0 i( g
        */
) H8 {- I! f; S1 l# i1 o1 c. A# L" {4 ^! Y4 I
        UF_VEC2_midpt(vec1,vec2,mid_pnt);
: |- Y  X! S0 ]. l+ L, I# Q% ^' i: u- _; d* u+ q' q$ |! t
        sprintf_s(msg,sizeof(msg),"UF_VEC2_midpt = point1 {%f,%f},point2 {%f,%f} = (%f,%f)",vec1[0],vec1[1],vec2[0],vec2[1],mid_pnt[0],mid_pnt[1]);
3 ]8 f3 ]1 e% M8 W+ t& H7 E0 V        lw->WriteLine(msg);
& F: ~2 f' @% |& j' r9 s& a
, Z; e) w  ~3 h  F6 h7 u- `        /* ; b4 ]* J1 p& a0 \+ D, i3 [
        ======================, }1 m' L1 W* G
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划& }* x  ]% R- S* t  w6 H8 |
        9 g! d' z/ ^0 }5 l/ C& H
        ======================" _* x  g" S, E; t0 S
        */
6 L# K& j/ x5 ~! |  H! z% i
5 p) _1 d( P4 D6 L2 n: Q        UF_VEC2_negate(vec1,neg_vec);; a) Q  b& c6 `6 _0 [; ?
        UF_VEC2_rotate(vec1,2,vec_comb);
, |1 p% |  B% m8 d/ a        UF_VEC2_scale(scale,vec1,scale_vec);$ R- L3 l* [( I" b9 f
        UF_VEC2_sub(vec1,vec2,sub_vec);2 J6 _! D4 J6 g9 c
        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
! j4 N* c3 x3 l% ?3 }) K( G, Z& A" P$ k2 Y. q+ n1 d
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f},vec2{%f,%f}:negative(%f,%f),rotate(%f,%f),scale(%f,%f),sub(%f,%f),unitize(%f,{%f,%f})",vec1[0],vec1[1],vec2[0],vec2[1],neg_vec[0],neg_vec[1],
7 b" r: t) t( ]                vec_comb[0],vec_comb[1],scale_vec[0],scale_vec[1],sub_vec[0],sub_vec[1],magnitude,unit_vec[0],unit_vec[1]);, X" d' |. o6 @& H7 D
        lw->WriteLine(msg);8 y. j# E% M% Y
) _! C$ m' l& Y7 U+ A6 W3 h
       
$ B+ M+ r$ t+ p! E}; N; n6 Z7 l+ g& y4 d

* ~5 [; y3 _+ h, R. m& E! A
& O/ S5 U, h0 R) T7 I
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

admin 发表于 2014-7-29 12:03:47

admin 沙发

2014-7-29 12:03:47

原创 教程  顶起!!
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了