PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

  [复制链接]

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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。$ e& b2 n4 V( S
源代码如下!+ e. R9 a( Q" H1 ~
' }  w9 f2 t  a0 r1 ]9 P5 s
  P3 k4 S: c6 z; \+ |/ E& I) w
  1. 7 d$ X, s5 ]! g6 i: h0 E9 e
复制代码
( E& N/ X( N- r5 K) J

& f+ `1 f4 g& `  Y, @char msg[256];
7 f; k6 f% c# h- m% m- iconst double vec1[2]={0.2,3.4};
/ e  g* F6 s5 E" Kconst double vec2[2]={1.5,4.5};! F4 A0 T4 d! i2 s# |, T: T' }
double scale = 1.5;
3 e# v, z# k+ r$ w( B8 G4 Adouble scale1 = 1.3;
* h5 n. P7 {& udouble scale2 = -1.1;2 w, ]: W9 N4 Y1 A
double sumVec[2],vec_comb[2],vec_perp[2];& }2 S- n4 S' t2 l
double oscale1,oscale2;6 ^- }1 X" Z9 W' O* A
double tol = 0.0254;
& j5 H& ^! J7 w2 c4 pconst double vec_src[2]={1,2};4 A$ h! R* P. i0 F8 t# N
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];
3 ]: P, m: U4 `9 K7 S; tdouble unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];
' j! w7 y6 ?0 Q, `6 H/ J$ Lint isEqual,isParallel,isPerpen,isZero;5 @1 z' P/ e+ w1 ]. ~9 g5 @% w
        8 u, Y# }* ?1 j' Z/ v6 N  O& ?
double parameter = 0.5 ;( b" ]+ t' c9 g9 @) A+ G% E. U# ^' `
double pnt1[2] = {0,0};2 F0 ~/ N  V& o/ ~
double pnt2[2] = {2,5};
( r; b' o( l# V  Tdouble pnt_on_seg;
: E" x* e' h1 L  O: `/ q( S) f; y0 }+ u0 |" R

3 b6 U! p) q0 W//------------------------------------------------------------------------------3 y5 [  G. S; ^3 p9 W
// Do something
3 M% B+ e8 P5 F: H! s+ x//------------------------------------------------------------------------------
& ?& W# N& L. m; m. R7 `) I0 c6 a
. C9 o0 \8 `- G; {* x' V$ _1 C% N1 G$ L
void ufvecTest::do_it()
4 Z/ [/ s3 v# h7 e8 d6 u{
  y2 L; r7 D! u6 C/ ?: a9 |5 c; Z3 N( G$ x5 K# `+ U$ h) j* K6 p' W
        // TODO: add your code here5 a, F' F( E; g" q, V. `# x8 q2 u
        ! M1 Y5 [7 t" ?4 e) j5 w
        ( _" @4 G" k! M- D' ^8 K) X
        /*
5 B! ~% E. {. q8 ]* _        ======================
. c% {3 f2 v* K, _9 o: O: B: j  Q        1 UF_VEC2_add : 两个向量相加 . G% o* L% l8 x8 W
        vec1 + vec2 = sumVec
: ~, j" z/ o  }5 r2 x3 v! }        ======================3 o7 `5 I7 M6 [
        */
) K) R7 X6 b7 Z! a3 W1 ?        lw->Open();
7 y% Q9 g: s$ P( m        UF_VEC2_add(vec1,vec2,sumVec);
# G1 C* l8 e; J( A: z2 V+ h        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]);; Y* i6 a: G( E. X* L+ S5 g
        lw->WriteLine(msg);
% c( G3 W5 q9 Z; l# g( f" X' q
        /* - H; Y" z: p( g% H( w
        ======================
8 k) w7 t" A0 V2 ?7 B        2 UF_VEC2_affine_comb : 仿射变换( k. a5 R0 a) M# o  [9 D
        vec_comb = vec1 + scale * vec2;. ^% s* T. ~8 C* G- A- ?9 z: C
        ======================# j; W/ F% p8 M- w. F
        */) k, d) ?! Z* l1 ~. \+ Z- c5 U

  Q; n/ v* M6 O/ ]        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);. D, q  K# j% }3 U
        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]);
1 a! K9 }+ H3 P3 W8 u9 ~        lw->WriteLine(msg);% l; B& X" r+ Y0 z9 I" Z
, ~; q: N) ^% t9 Y) G0 c( e, K. f
        /*
! w: G- ~# b& U( f0 V        ======================7 v  w% i( k7 q( V2 D
        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 5 U6 ~; k% u+ @+ R3 ^
        vec1.vec_perp = 0( c4 i* Q8 ]0 ], s
        ======================
: z  d# t( J8 p, B% q; T        */
4 O4 \: R" n' m0 E
. W& W5 d4 Z* ~. r  Z2 @9 m        UF_VEC2_ask_perpendicular(vec1,vec_perp);
- l# P& U6 S* U        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);
9 Y0 @9 w! _! K2 M" }        lw->WriteLine(msg);" v( D' W7 V2 e1 P9 K2 ?; I4 L% J9 x0 Y
. t, G5 D7 F& O! i& s% ^
        /*
$ Q- T! Z7 S( R- W% U+ p+ Z        ======================
$ u; s: D! l& s, x3 u( F3 L8 D* t& L( T" o        4 UF_VEC2_components : 求出垂直的向量
/ |1 r8 l% ~% t! L( Y3 T        vec_comb = scale1 vec1 + scale2  vec2, A1 q4 n  h. o( D$ j0 }
        返回: 0 可计算 1 平行
& a! |9 W3 a  t        ======================
( J' d, _% t# i1 m  p9 p8 A        */
) N3 U: W! k  Y' M6 m
! A* a$ }' o/ C        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
" I; r5 o: E) q# v        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);9 @# m, B  q2 d- E  X
        lw->WriteLine(msg);: K) J7 L5 K% y# {; Q) f& v$ y

6 `/ P6 k5 C) m  p% P  n        /*
. B+ B4 @9 S6 y& ~        ======================3 P, o8 [/ t8 t! z. J0 `. Y( E9 z% Q& ~
        5 UF_VEC2_convex_comb : 计算点在直线上的位置
* \. |% s+ g' V+ u        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2). 8 o6 N& Q: @% s% [& ]
        ======================
, Y# N0 F- H$ m        */5 d% }$ i2 r! y8 \% A8 B8 S/ g1 j- f

, v; R0 G/ E5 }0 x
$ U& V. p6 Z) K1 ~: y0 l        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);" v$ n% @" `1 y* s
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);
) |+ J+ O( z6 h        lw->WriteLine(msg);9 h; l& m' W7 u3 O1 d, r% D0 y

* E# \/ D2 L: W" p                /* * S  Y8 Y: P/ j5 p' i
        ======================5 V2 j2 X0 G9 h" e
        6 UF_VEC2_copy : 向量拷贝  g/ f3 c& F! l4 J
        vector (vec_dst = vec_src).8 X- D, \' D, M  M; V3 E9 v
        ======================
- ?: M3 P  C& r7 v5 Y        */
1 |% `9 X5 _9 [* f2 t, f' l2 e6 P3 I. ?

+ e8 i% ^9 w" d: @; ^; L( H        UF_VEC2_copy(vec_src,vec_dst);
8 R" m$ U0 @9 F. h- m+ t' J2 g        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]);
4 `3 m/ M7 @) ]1 d7 C1 E        lw->WriteLine(msg);4 G* U* z/ P- p- Y+ [: n: {9 D1 b
% f7 A4 x) t+ |
        & |3 L4 c1 R) k
                /*
3 Q, e  v- Q# q8 j        ======================
3 _& U2 W8 P7 J/ m8 B        7 UF_VEC2_cross : 向量向量积9 O6 U/ B& U2 ~7 N5 L6 Y4 }
        cross_product = vec1 x vec2
# x9 h+ T. K9 e" d        ======================
4 G( M, q- V2 h. i+ U        */
& o# w: u- x% p7 N. ]4 C) ?, }) [0 V
8 v, Z! V- h& |1 X6 v
        UF_VEC2_cross(vec1,vec2,&cross_product);
% F4 f/ V" }3 k' o/ K, E        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);8 q4 A- n1 b& e/ y) j( A: M% f
        lw->WriteLine(msg);
' W- @- j9 m$ ~8 t% X; _
3 j' r  Q1 _4 R  |/ r% B% ]
& j# k7 @  u3 C. l                /*
9 k, Q6 |0 y/ c3 b% M        ======================
9 p: j" R4 F' [. G        8 UF_VEC2_dot : 向量数量积
( h& v! p' x% a7 L# {5 p6 T        cross_product = vec1 . vec2
+ z4 A; [/ }+ I7 M        ======================/ M) }6 h! E) X: e
        */
1 Q8 w; k* Q7 ~3 A, k1 q/ l# M* E! Y6 I

1 K+ _$ M, U% g% D7 ~5 ]4 c        UF_VEC2_dot(vec1,vec2,&cross_product);
0 k3 ~1 U4 t) a6 E3 h0 P        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
5 z7 x/ r9 v$ Y3 ]        lw->WriteLine(msg);% d. c  B1 ^4 j) i

' }' k4 I4 {& a- ?# K4 k: B9 K$ q1 y/ E0 y4 F; ^
        ) P1 ?) }9 ~( f3 Z. g3 B
                /* 0 i7 ~9 N. B6 D
        ======================3 Z6 ?; R1 n9 x. Q$ u2 f# n  Q! n6 Q
        9 UF_VEC2_distance : 两点距离
3 m* \/ U* [; ~3 g& s        (distance = ||pnt1 - pnt2||)* m0 w+ W( h# C6 Z. O
        ======================
4 ~7 ~' Y! G7 f; _1 W8 W1 t9 D        */' {, }5 b7 d* p' u3 @4 X
" A- E* v1 P: n2 b* S: `1 H

( M2 l, V& q. k5 c3 d" \        UF_VEC2_distance(vec1,vec2,&distance);
3 C# s; W! g; [, l1 B1 ~# L        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
4 e* S9 z- |8 a) o+ s0 C        lw->WriteLine(msg);
4 J0 S/ `; G2 B6 M0 {3 ?7 i/ q- E; \3 G. u
        /* ( s6 p) E6 P4 Z
        ======================
$ W* H2 s0 U, K! }4 [. Q        10 UF_VEC2_is_XX : 判断矢量关系
3 o5 o6 V0 J' M% k, U                0 = false
5 x# G# P; u# ]            1 = true/ Q, X: y# _& D
        ======================( L3 Z1 [# C) v1 G' a2 z, `
        */4 J2 Q1 M, ]: U! N% F- r

& |9 s  k; d* ?1 q) x
% U* S$ T. Z/ L! D$ A& M        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等
$ Y5 K! z6 X- @' f# Y; h        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行
7 p1 ?6 B  S, T! T        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直
3 N7 B  i) O/ W3 l/ L        UF_VEC2_is_zero(vec1,tol,&isZero);//为0( q1 N8 ]# W+ H

) k6 A/ Q" r& ]! p) U& R        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);! U2 l4 Q# `3 y# [5 G$ M
        lw->WriteLine(msg);
9 ~, l, [/ m- m& c( {3 u4 B6 G& e. O3 V+ U
        /*
+ x1 ^2 N& _( o' o; G        ======================
5 T' U. M# i6 \# n% s, [        11 UF_VEC2_linear_comb : 线形组合
! ^; x6 W, n3 w/ R$ ^5 W# k+ x) C2 l                vec_comb = (scale vec1) + (scale2 vec2)
' ]0 q$ ^' p! l- o. Q; ^" j        ======================
1 d5 {  @& w( X; b& N        */
6 |0 B* E+ G$ V2 o. A& ]( w, F; ]9 O: F5 o$ J* t
        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);, Y: V$ H3 I$ z8 |( f  r
5 t$ c% {$ l  I; m( b' e
        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]);
# n6 ^+ x- W( T. J        lw->WriteLine(msg);
9 Z) O/ u6 i( P1 C/ M3 M7 a$ e  f6 o3 i5 u. u/ Y$ ]8 K
                /*
2 e' s- O: ~& y3 ~6 L- i* g  @7 H        ======================# P2 ~: u, U0 v0 G
        12 UF_VEC2_mag : 向量模
& }1 s& J. V' A8 j! e$ N                magnitude = ||vec||* K4 K5 W( Q/ f/ C8 `
        ======================2 b7 \6 X8 X% M) w! x, Q
        */
3 Y0 r( P  ^2 M9 k$ C& k% q% N/ W1 Z) c( `4 o8 a0 U
        UF_VEC2_mag(vec1,&magnitude);
# _7 T% C5 `; Y3 }4 ]6 M# }* |& t0 I! y
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);% `  u8 _8 t; q2 U
        lw->WriteLine(msg);2 ?4 p0 H+ q! n

- ]5 {- i0 Q4 E+ C* N                        /*
2 Y1 v+ V( q/ ^* Y6 W        ======================
( j, Q) _4 e7 _        13 UF_VEC2_midpt : 求中点
0 G$ ?4 C- \$ S; ~                mid_pnt = (0.5 pnt1) + (0.5 pnt2)
1 |  q- B" Z2 Q1 M9 Q; @        ======================
4 }1 y  _; D/ h5 n        */' ?; y& R1 }6 e6 r3 m) [& N

1 o3 I# [# S; ?& u! P        UF_VEC2_midpt(vec1,vec2,mid_pnt);
& M3 U7 y- q# R3 F7 u6 j# ^3 ?
4 H9 K% o' S4 u& U5 x4 g, M4 J        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]);! L. t* ?) E! A9 S: l1 x0 Q8 y
        lw->WriteLine(msg);4 B  J! @, i) r; n/ B; \$ Z4 y! s- b
- p2 ~( C0 K1 A! t+ I6 t+ ^+ g2 Z
        /* * h0 `1 ]- M* @3 F/ C8 n
        ======================; c2 i, k- L9 Y  C1 a) o
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划" d+ h! i* _' V0 [" m5 @
        ! c1 ]9 |& K4 J7 D) O8 @" S
        ======================
; p) b5 ~5 d- \# E* @5 c5 t- e: F& X        */# K. }' X2 K  u7 {( y. E3 a3 U/ F
6 B- t9 {) o6 N* [/ r) |# O; a
        UF_VEC2_negate(vec1,neg_vec);% M6 u$ A& R1 a! Z1 I- l5 {) D- ]
        UF_VEC2_rotate(vec1,2,vec_comb);
2 S; s  s7 y( p' h* q/ A  s' A1 ]- Q        UF_VEC2_scale(scale,vec1,scale_vec);
& r4 _* C. P2 R& a' A4 D+ ?        UF_VEC2_sub(vec1,vec2,sub_vec);' |7 t, Y! ~$ v* J, |. N
        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
& U8 ^0 N3 s5 W9 _( K1 m
# z0 q' L, C. B% `9 e9 R        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],9 I7 W* M$ l! y& g8 \1 j6 K
                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]);
% ^# E4 }  ~2 D* e4 Z1 [        lw->WriteLine(msg);% J5 p5 e) `3 J$ Z8 X3 C$ s

6 X1 B8 {$ @3 V* v$ d        & C1 i* P4 B8 d4 M
}$ S/ a+ v! h# m+ E

- @0 }7 ~, W( Q* M1 ?0 r1 L, n9 }8 I, N( c
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ 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 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了