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 3980 1

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。" o/ n8 ~/ M  m( `, X2 K8 T
源代码如下!$ u6 t8 \0 j% x

' W5 V! X9 l+ S$ P, S
9 _" b4 e3 L$ ~2 ]9 f7 G7 d
  1. 8 g) q' b  m& ]  }# ?7 \& ^9 o
复制代码
/ d7 D7 l  h; T% M
0 _) `# T+ y8 S
char msg[256];3 e! _6 X3 a. m. p
const double vec1[2]={0.2,3.4};
. N! Y! a+ k/ e% w6 Dconst double vec2[2]={1.5,4.5};
  H2 J/ h/ s. x% i. y+ w0 tdouble scale = 1.5;
5 ], J5 w  c* G& |# ?" D9 ldouble scale1 = 1.3;2 m1 j5 m' Y1 Q5 L
double scale2 = -1.1;
9 z. j9 l7 j" D, }; N8 N) Q& k) _# [double sumVec[2],vec_comb[2],vec_perp[2];
# `: o$ H; [! T/ c5 t7 f% Xdouble oscale1,oscale2;9 j$ z+ \+ N. \
double tol = 0.0254;
3 ^. c/ n/ }/ e, S' k9 Z" Aconst double vec_src[2]={1,2};+ F) E- {- T% R4 v5 _) l. J7 m' D6 h
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];2 U* a: |/ M( K) ]& }) x8 ?
double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];
' i4 e% Q2 i  k' U* S7 U  j3 wint isEqual,isParallel,isPerpen,isZero;
2 g7 |7 y8 ?6 b/ u       
( n- }" v9 E- D0 T( Y5 t, gdouble parameter = 0.5 ;
8 n1 s1 A( h1 d; q5 i- H  Jdouble pnt1[2] = {0,0};
) P% f2 f7 t$ z5 J: E# p/ Ddouble pnt2[2] = {2,5};- A. c0 }% Q! f$ S( C" l
double pnt_on_seg;8 E: \  h2 A8 m" [
  B7 p( V) J+ e* Y0 N6 f& [1 D
1 r7 U/ s; o1 u2 {- C5 I0 u
//------------------------------------------------------------------------------" e- M4 p1 s6 ?
// Do something/ ^% h( U8 i) d" X" W  B0 J5 a
//------------------------------------------------------------------------------$ R1 o) Q$ h# ]9 a3 t
% \9 R! `  ^2 F! y. N; p3 p

" E- b' \3 q( ?void ufvecTest::do_it()" `; T* l$ N# @' _& h. L$ _
{
# ~4 I" h, [, b# S/ H
" ], [) M& Z! G% M        // TODO: add your code here
5 T& @) y: j/ O! B# q- d       
3 ?& J) s9 y; }( H7 V8 s9 A- B       
. F2 k/ i( e' ^7 y) w" y8 l        /*
1 H- i7 E) G; l9 |3 W, i( s* a        ======================
1 Y; J. _, Q0 U4 x: F        1 UF_VEC2_add : 两个向量相加
3 }+ M( z: e5 t3 y2 J3 J% l        vec1 + vec2 = sumVec0 r+ u5 B* W3 x. K4 F: m$ X2 W
        ======================
* E6 W% ^' D) n; W  e        */# s, C- [6 m2 t' R$ y5 s# f
        lw->Open();% G0 F% P8 R) ]" g/ _% J' l
        UF_VEC2_add(vec1,vec2,sumVec);; l" m+ H# h7 o2 Y4 Z# K5 k& |
        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]);* W8 a4 E9 r6 T. ]. G
        lw->WriteLine(msg);
* o7 p2 [& O( Y' E) S/ q# X+ n
. {( U( P4 u4 W        /* 2 n  y" d! f: U, @
        ======================
4 A  k6 t) h" {& Y9 y) H        2 UF_VEC2_affine_comb : 仿射变换
# f! ?7 s4 x; d! S3 U0 i        vec_comb = vec1 + scale * vec2;
4 |' ^: m) i, Z8 p8 ]+ u        ======================, a0 T1 M+ C. ^0 K* r4 Z0 `' @1 W
        *// d9 w/ z$ m' v

" Y- `$ E" z, A7 b5 q' e) [% g        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);* o5 i) M4 e. M7 b$ s0 B' Z
        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]);
" \( s) M0 J! m* s2 h2 i        lw->WriteLine(msg);
3 Z9 Z, z$ v' l8 l9 w1 k# n
: [- Z, j! Z9 v- D        /*
  [  s5 o9 `- z: u% h+ F  U        ======================
! u+ X8 G7 _& X3 B# g' ~: {) v        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 3 ~5 W" Y% a5 C; P3 K" S- z7 Y
        vec1.vec_perp = 0
; T1 w; o/ `, l! D0 J. i1 y        ======================
( G1 G* A6 ^' V; m        *// U% [8 j0 ?. L( M/ k, O3 A

; W8 l" L" [2 Z) ?/ j5 A        UF_VEC2_ask_perpendicular(vec1,vec_perp);5 l" x; s" }) U5 c
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);
/ {' u. t0 ?0 J1 N+ z3 [        lw->WriteLine(msg);0 A0 j! h; J3 @

/ l7 J, H) A( c& f/ W2 V1 i        /* ) g! K$ d& s9 U/ N
        ======================
$ c" Q9 ?5 x0 o- c. ^6 P* b1 ?% a        4 UF_VEC2_components : 求出垂直的向量
. P+ D% j! M$ o1 ]) A        vec_comb = scale1 vec1 + scale2  vec2
! D5 p4 z+ n3 U6 s1 R        返回: 0 可计算 1 平行
5 M9 P& h. e6 M( q3 D5 z        ======================- w$ x6 B" x8 Y; S
        *// D' h" T4 H" [, \- C7 Q* r) }+ r

# O: \  |5 u( p5 o3 M) {" F        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);7 U7 P4 {, T2 _
        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);
/ s, s% T. }# g2 B, U        lw->WriteLine(msg);8 `* C. B& x* P! b$ J- l  Q
) b' A% F& Z* r/ O; m6 d
        /*
  _* E$ j; {3 v9 e        ======================) t" u1 o/ @. }
        5 UF_VEC2_convex_comb : 计算点在直线上的位置; w/ \2 j0 e7 {: z3 O
        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
8 T6 I  ~! n1 i. b/ {# O        ======================
9 S$ m: U; b! D4 T0 F- f0 S% |        */1 I: S: r" t( U5 ^

$ v6 y- Q" v; V$ w  O9 B+ z( ^, W, x! f
        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);
+ ]. w  o  x5 ~& O        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);
. Q! X+ q& ~- R" s        lw->WriteLine(msg);1 a9 e$ ?9 z* l) w
" C8 x5 r. s& C' U2 ?' Q& U
                /*
+ }, n3 R3 n6 K, `. k        ======================
3 O4 o9 O$ _/ ]  u4 }        6 UF_VEC2_copy : 向量拷贝
5 M1 r7 z$ p5 W; ]% c        vector (vec_dst = vec_src).. x' W9 a5 `, \
        ======================, t% n' A3 P: W" V5 B( _
        */
7 c, H6 V0 y. d
) S, w! h/ J6 p4 m, P4 ?$ r# `" {; ], F- S! E1 r
        UF_VEC2_copy(vec_src,vec_dst);
8 @# |3 E  m- L$ P        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]);
1 M. y/ `% |0 Z1 R: N! v/ b% U7 D        lw->WriteLine(msg);* J( {" R7 d) e

% s& R. v' V4 g        ' u2 |" }( |' V1 d1 O0 ^
                /*
3 k3 t! e, w7 H) f        ======================
4 Y: |1 i5 K. B: Q4 B        7 UF_VEC2_cross : 向量向量积
' L- t2 o1 d, q# J4 P) b        cross_product = vec1 x vec2
  Y9 K5 L, o4 r3 s# Q        ======================' H; F5 R" x! B
        */
3 M+ c! o: U) a) y; Q
1 H! ~/ X, `, p1 w) B7 o5 H+ a( @0 M5 q. ]
        UF_VEC2_cross(vec1,vec2,&cross_product);# ~$ L( j. `  l7 h
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
8 ?% c5 P5 ?  T8 T# k5 z7 H        lw->WriteLine(msg);! r% n& _9 m3 S. }
) V; D) I% L; `" s
' F! s. D3 r; ~  j- ~- Z
                /* 3 S. [/ S3 y) }3 `
        ======================
/ D) L- k/ A8 F" ]        8 UF_VEC2_dot : 向量数量积) `+ ^5 `& l/ q; _6 [
        cross_product = vec1 . vec2( e' V1 _' |6 `% [) v* A
        ======================
3 P( k3 I, Z. h6 f. H% L7 M        */9 K1 N/ }1 ]/ D8 H

9 W" m0 T2 E7 n0 f8 d/ Q: k. v- h- i9 r" y. u: H& G
        UF_VEC2_dot(vec1,vec2,&cross_product);9 k# \/ ?$ u# q# P& y
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
  H- V$ L7 F$ ~7 k        lw->WriteLine(msg);
& j$ y: ?" ], q5 e7 i4 y: F8 C4 }/ c( B* c; `# d
. W2 n) G+ o* O, P; O) ?
       
% V5 s5 [, M7 M7 x' Q+ Z                /* 3 C* Z1 ]/ p4 |7 I5 z
        ======================) D9 J& ]& D1 s! d9 e0 Q( z$ @8 {
        9 UF_VEC2_distance : 两点距离0 c# p" m- _  O; U; l5 @6 J6 [& A
        (distance = ||pnt1 - pnt2||)! A4 m7 s$ m" ^! ]
        ======================; T7 w) @  W9 h& h( E
        */
5 v" B4 P2 M: X" f$ D. S  }7 k9 `$ W- l3 ~$ q
; ]& D. S( }$ @. V0 ]
        UF_VEC2_distance(vec1,vec2,&distance);
& q, O6 \( n8 C% S& O7 m9 Y2 |        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
2 z) G& O% H% [" D( `% j        lw->WriteLine(msg);& p. ^3 `  t1 A6 u3 Q1 D! d. @

; e) S+ D2 n2 b' {        /*
6 \! K, D! a/ {7 P8 e2 K        ======================
3 D- l, H* w) [; g* `        10 UF_VEC2_is_XX : 判断矢量关系
& y) Q3 ^: `3 z1 d                0 = false2 w, v$ ?! \0 T- D+ G/ O) _
            1 = true
+ i# u$ P( m6 M        ======================0 ~. l/ ~4 ~4 \/ U
        */
! m) ^1 D" U& o; i# j. v( i% o& m& }2 E' E
/ _8 z, l% @# Q+ R' K3 `
        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等' T3 K7 c: Q0 Z, O/ b  j
        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行
; t5 F1 Y' Q2 b' Z. }        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直, H& {+ j& K  [0 H7 N5 F
        UF_VEC2_is_zero(vec1,tol,&isZero);//为0( \9 X; G8 e, S3 G6 H' H& T5 _

2 a, I) `2 d* i0 R8 ^3 ^        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);
" M* b. a7 c- q8 B# Q  O% j        lw->WriteLine(msg);7 e0 C3 B! C1 P* r! I3 W) R8 J
; k+ A  k# S5 ~
        /*
/ g9 U! ^# I3 ^, V- \: h        ======================+ R) z9 y' X/ I
        11 UF_VEC2_linear_comb : 线形组合% [3 I' M6 p; p; k: j3 d) z. t
                vec_comb = (scale vec1) + (scale2 vec2)( d2 x5 @3 i/ f! Q
        ======================* |' T6 m! F+ W- x& f
        *// ]) q6 I5 e1 [3 Q+ H" @5 ~9 ]

" S1 W3 Q0 u3 Q8 I, A( p        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);. o, ^9 C5 x' f$ r0 s" z0 j1 g; M
$ J1 ]* O4 E, F# F! Z5 v
        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]);% I: B' P5 L2 d
        lw->WriteLine(msg);& Z* w# ~7 C* \# a

2 b5 D4 N/ o" F- A' k4 w& R                /* + ?. F4 b4 J9 f7 H8 Z, X! f7 Y
        ======================: a9 T2 B7 k! c& S) v& p
        12 UF_VEC2_mag : 向量模
3 c. |/ c7 f. A                magnitude = ||vec||4 x& v$ T+ E' Q6 w5 f: O
        ======================
- L& u  _  X  c        */
) H( V% j( x+ D5 N
7 k/ V' @2 _* c/ u& X: b        UF_VEC2_mag(vec1,&magnitude);
. c( w3 M* ]- ^
( i. q" L& @1 w) T" i        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);% c! [0 P9 W7 Z$ H* d; d9 k
        lw->WriteLine(msg);& U3 W9 j9 |, R1 u
& r  j( @% Q1 I3 c7 Q0 i: J
                        /* 5 b/ P3 j3 w3 X6 Z, w
        ======================" Z& S1 ~# d( o$ \) t& E2 N
        13 UF_VEC2_midpt : 求中点 0 P8 S8 y' \- `; C$ L8 T$ S4 X
                mid_pnt = (0.5 pnt1) + (0.5 pnt2)
& ~4 B& Z- k& [" W" S0 v' f' n        ======================
! g- A' z4 c: u4 S        */
4 M- N! |. n6 K' W) j& A- ?: C( e5 x  V& S
        UF_VEC2_midpt(vec1,vec2,mid_pnt);& j$ M( a5 u4 _8 }

" h' r# T+ s- W  c1 i  |        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]);0 U6 B! H. X( H: ]8 ?, A& r, k) b) n
        lw->WriteLine(msg);+ ^+ h, T0 Z9 X: H% I' t( z

2 o2 U6 N; F$ S% ?* h        /*
. D( W% [; A3 `' u- D0 S! F        ======================% q; y; E! j9 z, P3 S2 F
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
) W  _* l7 D0 M) {4 l; b        9 x2 Z0 }0 V) v6 |4 O! X
        ======================: }& v9 H4 x/ H% ?( q
        */
9 ^/ @# \5 J4 A, _- F7 s" ^% N4 K: F' R
        UF_VEC2_negate(vec1,neg_vec);
2 J) K9 o/ e. E        UF_VEC2_rotate(vec1,2,vec_comb);4 C& u  K, q7 X: Y
        UF_VEC2_scale(scale,vec1,scale_vec);6 ]. U+ V- f& Y. ~* b5 A5 a
        UF_VEC2_sub(vec1,vec2,sub_vec);
1 K5 |: i3 a6 p1 M        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
) Z. o( v% x% `7 g. I8 d0 \/ Q$ C& }) s& j( a( u
        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],
- T* m0 q: y( u7 L( |                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]);. I* G# p1 F$ n
        lw->WriteLine(msg);
* }* t$ a3 s! J  N+ f& U6 k/ X
$ X6 q/ U- U( |! A0 {' u0 b+ U       
  u3 W5 R* F3 P& S/ V}
) z/ Q7 z+ U9 E" |+ q  F+ e$ R( [& v- |8 S6 W  ~

$ R& ~# E0 J: |2 z/ u5 ^
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了