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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。
: Y8 p6 Q: l4 t  C  z3 }3 V! e源代码如下!' \2 p" y  U5 k8 D3 E0 d0 c. P+ J
5 G- C. |1 h; i' L) z- ~
1 J/ O7 d, O; r

  1. & r( E$ P, K* }! h1 M
复制代码
. j' _' _, K8 b$ G7 j
+ G! I& L. e7 ]* l6 h- ^4 i" }
char msg[256];
* s; F7 l* ?! m& a! Wconst double vec1[2]={0.2,3.4};
* q- c, F6 E* {; b. W. Hconst double vec2[2]={1.5,4.5};. ^( v: V- X1 A
double scale = 1.5;
: @& o* O4 k8 w4 B* Ndouble scale1 = 1.3;
, Z5 d, a% q- B* c. qdouble scale2 = -1.1;7 V  j$ e: ~) Y& N
double sumVec[2],vec_comb[2],vec_perp[2];0 g& B% T7 d1 D5 j6 o& y( j
double oscale1,oscale2;
  Q+ Z" D0 ?8 H6 Wdouble tol = 0.0254;, W3 h, S5 G4 v/ z6 o
const double vec_src[2]={1,2};  R6 c  P% W5 ~4 y5 _6 v& N: p/ e# R% r
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];
3 S8 @3 B' U5 s1 C8 u/ Jdouble unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];, o5 @$ i2 Y4 u2 w, X; l6 f6 a
int isEqual,isParallel,isPerpen,isZero;# P7 J% S& g7 S6 V+ V% m
        ( S' G" ?- a6 c' o' q+ x1 {
double parameter = 0.5 ;
8 g, k: W% ]% b5 Edouble pnt1[2] = {0,0};2 p1 @* j5 h. `
double pnt2[2] = {2,5};
/ H9 N; B5 _3 _" qdouble pnt_on_seg;$ ?( Z. y( L1 h: l

" ~- G: v: m+ \+ o3 Q% L  A) ?! L4 G- d6 ?% j8 s- b
//------------------------------------------------------------------------------7 t6 e% A9 U- y; C7 H( I% ^
// Do something
5 d, u5 c: k' @- b- Q& z//------------------------------------------------------------------------------# c5 G3 T( e# [& B3 I
# {9 w4 `# k/ n  ]

/ u& ~& N* n! k! h; fvoid ufvecTest::do_it()" g0 Z# @* D- e0 [1 e
{
% O! m. U, h* ~' r1 {( J: o; n. a4 F7 h: H
        // TODO: add your code here$ @5 {' g: X$ m0 l$ Q
       
3 ^. `" E' J2 K$ u        ' G/ M1 v# v( j0 q
        /*
( ^* n2 M/ T( W$ _1 L        ======================
2 g7 q! D: ]- {* i6 i        1 UF_VEC2_add : 两个向量相加
2 N) Y# `+ C) u9 f5 O2 h1 i2 o2 m4 u        vec1 + vec2 = sumVec
* G! @. D, Y6 u, [' I; w" n        ======================
3 u- F$ |8 x# b0 @% ^5 [, Y        */1 N9 P7 R) ^! K/ W$ T; o
        lw->Open();
7 }4 g& L. S; v        UF_VEC2_add(vec1,vec2,sumVec);& _2 Y* T% I+ K8 j# q
        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]);
& ?( P, n# U; J, M        lw->WriteLine(msg);
3 V" a& J8 e" L9 B2 S* B( j: k& ~0 Y2 R# k6 g/ [9 \+ G
        /*
* [% j. A# D% p        ======================; Z" t7 @3 o+ U" a  a4 V+ }
        2 UF_VEC2_affine_comb : 仿射变换5 M' ~% L6 ?4 E: [- E5 P! w
        vec_comb = vec1 + scale * vec2;6 |$ G$ X- m# F- s5 v
        ======================
. T9 B$ x' s# m        */& r1 O$ U# \* n) P+ }
/ l+ q* B: J3 X/ A: X
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);
+ R& P4 |  v% ]7 M  C6 r4 p        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]);
+ |) F% s& i( C5 ~        lw->WriteLine(msg);" B  v! u7 y5 n

' F5 U" D/ x+ |8 o        /* % |" A; N  v3 _# Y5 k# T; {
        ======================
$ B% p6 k% s2 R5 }; a/ Z        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 + D3 q( u$ F: Z: ]- U" r
        vec1.vec_perp = 0
' l$ }( D0 I0 ?8 F, |        ======================' O7 S( @5 J0 [/ A
        */
  h- v( m* C4 Q7 z  j! M- J+ s9 x9 R2 o- a' V0 \
        UF_VEC2_ask_perpendicular(vec1,vec_perp);) |" l2 g; t7 C: C" M8 t6 a
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);& Q+ ]9 Z. y3 F" n( j, N1 g
        lw->WriteLine(msg);4 h, ]. N6 ^5 z! N4 u6 v3 T' n
* _0 H0 t/ k5 {, E8 A" y$ S+ H  K
        /*
, ^" c( y0 k% {" B        ======================
/ r3 X9 o7 r6 X+ f9 f: B        4 UF_VEC2_components : 求出垂直的向量 4 `& T7 k* V- W# h+ }
        vec_comb = scale1 vec1 + scale2  vec28 A; B$ @) D& g
        返回: 0 可计算 1 平行
; y# A9 E' ^% i        ======================
2 N9 |- e/ I& `& b& g/ Y- j        */
1 K) c! f! L$ Z' @5 w; B
" i, T0 i  h$ |9 D" [2 f        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
6 s& E( l5 }+ Z) |& p* w        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);
  ]4 _8 I6 V. _) V$ r! j( t6 B% Y/ g        lw->WriteLine(msg);
7 D5 c, W, r3 e) e1 I8 Q/ {
! k5 h" e/ [) X3 z% t6 r        /* ( n: G% H5 B' f' A' J
        ======================
$ t+ i( r# Z3 [4 u: V        5 UF_VEC2_convex_comb : 计算点在直线上的位置) f+ ^" e$ ]) r* U3 z! H
        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
! d4 A5 _( u3 \! M2 Z, f        ======================( P, f3 F7 V- x% @1 t% Y( t
        */2 J7 y  y8 \. ?8 ]5 M$ V
' ]# }, e; M5 a% n

! f) V1 x6 C( H) k# n        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);+ \$ P: F4 l5 {9 I, r7 \$ N5 s
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);* N  y( c3 o" j' L9 `9 a, H, R
        lw->WriteLine(msg);0 ~: I1 F) X, p5 d8 ]8 z0 |
7 ]4 G: E8 w5 M, K$ r+ f; M$ \7 `
                /*
& u0 n0 Y0 B- r( f! z9 w! y2 o9 H9 E        ======================
* Y- Q9 s8 h3 A- V1 u0 k' Y( V        6 UF_VEC2_copy : 向量拷贝
' S2 S% j. m: V: e! U, j% q        vector (vec_dst = vec_src).: |% `) ?- e! ^( _. c8 f$ p* w# \
        ======================6 }  T1 @" [& i- [+ ^
        */
; v7 X# D* O7 I, X4 e
' j% C7 e- X: m1 v. H  d. c2 D
. `/ l1 B+ ]: ~4 f9 e2 Y        UF_VEC2_copy(vec_src,vec_dst);: ], @5 `% U% L, |+ g/ p# z: Z6 ]
        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]);8 r6 H* L) c1 T; w+ w' r
        lw->WriteLine(msg);; V2 Y/ T0 R1 I# ?

' j6 Z$ }1 A4 C" `# v       
  B  Z6 z! W- ^/ |5 v                /* . ]) l0 n: y. w: g
        ======================; X! q$ E9 z1 s, C0 K( T: q
        7 UF_VEC2_cross : 向量向量积
2 J+ H3 E, X* S        cross_product = vec1 x vec2: T% V3 O7 V& _: j
        ======================
' r! q, k5 G& P( d- x+ F, y8 Y' q        */0 m  n8 P" s+ T

: d! H7 L. B6 K5 `; b8 b- U
$ S+ ]; d+ K7 N: m        UF_VEC2_cross(vec1,vec2,&cross_product);
8 ~. ^! P" s& y7 C: @        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);5 |5 Z$ y6 K8 Y/ l! r
        lw->WriteLine(msg);
6 M1 o( I( y1 B( W" N5 e5 [4 B; o4 X' D3 s4 H

" g$ Y+ l8 ^( o. Y                /* 9 `8 m0 z+ ]3 F$ w+ g* m1 s( a
        ======================
9 h2 g% k; [: j' h2 C$ s# ~7 g        8 UF_VEC2_dot : 向量数量积
' O% k3 M, h5 [* a1 z5 I* |$ m2 h        cross_product = vec1 . vec2
& B. n& Y9 C0 S8 E6 y4 @( U        ======================. W' F! c( d: x2 |! `2 t
        */
1 D- R( K2 w" x) m; L1 Q
0 Z& C7 I5 c* m3 J- W. R* P/ u' G, l5 L: L( N# S# C% E4 Z0 Z, i# o- d
        UF_VEC2_dot(vec1,vec2,&cross_product);" \/ W; t* r5 s* a9 F# k3 H0 R3 o
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
6 j. x) V' y4 N4 W0 L( i( V$ c        lw->WriteLine(msg);
+ F  N3 Z# ]9 @6 a9 t7 v
4 `5 Y$ k# J7 j, e, n6 l% U. V  C! N2 r; T# c7 S1 n
        % ]* u$ v2 g' i9 z7 w
                /* 0 B; ~3 A: H# F
        ======================
2 ]1 x8 W1 n2 j& v8 x        9 UF_VEC2_distance : 两点距离
% ~3 H7 }) b# ^2 K        (distance = ||pnt1 - pnt2||), a+ Z/ N& Z% Y- E: H+ ]
        ======================  I3 l7 }8 ?: ?$ y% S0 B
        */
/ W5 r" k% H9 y5 _% }' C
. Y. s) U1 g( g
; o2 [: u. l  H' S6 y- ?2 Z9 j% S        UF_VEC2_distance(vec1,vec2,&distance);1 i, E, a! t0 C* P3 m6 ^
        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
) k* w9 r' u' q5 {- p+ Q, x        lw->WriteLine(msg);
* S$ X; M' S0 m* `% o! w4 e- `1 j) |' O# L2 X2 f
        /* * p  {6 t" I: Z; F& z
        ======================
% W/ r5 x/ c; n1 t$ Q        10 UF_VEC2_is_XX : 判断矢量关系
: H: L/ Z6 |8 Y( c* U                0 = false
( Z5 A2 o& v' S            1 = true
$ z/ R3 ~0 z& `* ]4 p        ======================" ]; N8 b4 K4 W
        */
2 C6 |7 v) S5 {2 M" x0 S0 O( y3 O8 T% y
! T! c6 O2 z  ~3 E& l0 p3 t; N2 h0 q* e1 @( h0 K% m) R3 X4 o
        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等
) U7 o; P" M( y6 Y        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行# `4 |5 X3 G& H* v8 A
        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直8 s) u( a: _5 f- ]
        UF_VEC2_is_zero(vec1,tol,&isZero);//为0
1 k6 l; {; s, n) G
& c% R3 R! x+ o2 \7 N) Y2 ?  i1 {' Y  X        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);
& D2 L( B5 V/ d6 t        lw->WriteLine(msg);
9 {) h- F* {8 M' u$ z$ \/ t. j1 ~; _) ^6 X, q( W- @
        /* $ ?* A. f4 F/ D+ y* J
        ======================* i, X( i  g& x" e
        11 UF_VEC2_linear_comb : 线形组合; a2 G' F& v: N$ U0 R+ z6 z+ }
                vec_comb = (scale vec1) + (scale2 vec2)3 R1 Q: n$ \0 b3 F9 T
        ======================
: B7 T9 n3 u8 `% B        */5 |. N" C7 R% _2 p$ J8 E% ?
0 r( \# N3 h" ]3 N  l
        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);; u  D2 S) t' k9 {: b
+ \# b& B. V2 K/ }+ W5 t! {
        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]);
& {9 h& I* e  B6 b        lw->WriteLine(msg);
6 ^/ ~' P0 q: h, ^4 l7 A! }
% P% I2 C+ I  b                /* 1 V9 H7 [7 o8 L/ C, [6 C/ @
        ======================& F2 P7 t- v$ x. n
        12 UF_VEC2_mag : 向量模, A# P1 |6 ?. B
                magnitude = ||vec||
6 Z0 U( g: P7 S% b        ======================
4 R' N9 l3 R$ \/ A3 F4 }        */$ r) R; I# L" p/ M" X/ X2 P
+ m( m! P' Z' \0 b) ]; E6 g0 H
        UF_VEC2_mag(vec1,&magnitude);: y9 P4 ?" p8 ^( k# l" s3 S
  D6 V. |0 p) [' M* `2 A- S* K
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);& ~$ X% _( w% n" Y: ~
        lw->WriteLine(msg);
# l" s4 W( J; V* i+ x$ ?
+ P& Y& |6 p$ B$ }# B6 F8 l% d                        /* - Q. K# `& T0 e1 h& r; D
        ======================
: A% k) v3 v* G- S% e! ~        13 UF_VEC2_midpt : 求中点
+ Y+ D2 [0 {' f% W* b6 G                mid_pnt = (0.5 pnt1) + (0.5 pnt2), j4 i7 E0 n9 N9 F$ [- _5 _% o
        ======================- H4 O4 ~% c" t, ~. M4 F
        */
/ B. |6 p0 \' X1 W: V6 |' w4 d2 E$ {% |1 K/ H: m9 ~9 \
        UF_VEC2_midpt(vec1,vec2,mid_pnt);
/ ]4 l- I( I+ [& M# k8 c; W: }2 `9 m0 y9 f3 g
        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]);6 z0 T& ~. [- m( t2 P
        lw->WriteLine(msg);
0 E% J) v/ U& ~! m+ w2 O+ ]: w& V2 }' u
        /*
# L/ N) b& F4 o4 {7 N# |        ======================
% g( q3 U, }! D& P2 P+ Y        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划/ v% j' }9 ?2 s: Q5 J9 C9 P
       
4 S1 W3 A; L- Q' ~( |        ======================4 G+ l2 W) K; ~# n) a
        */
! |# H+ H6 q# f9 T# {6 [1 Z! \
$ j5 s1 a" _' c9 Q        UF_VEC2_negate(vec1,neg_vec);
7 V% V4 n# K! p3 n3 e* s! _        UF_VEC2_rotate(vec1,2,vec_comb);
' b+ U, f6 H1 L; O        UF_VEC2_scale(scale,vec1,scale_vec);9 s/ b6 W& ]3 U: k6 h$ M
        UF_VEC2_sub(vec1,vec2,sub_vec);; g& c  f: ]) j& s2 }& w7 W  c
        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
, o# F, r/ y" B9 I$ q
/ }  b% _8 [( R- t        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],
) q& a/ N0 U, [* 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]);) v) Q7 V+ z! @: Q
        lw->WriteLine(msg);0 i3 P- @% v6 l( h2 f

, P1 a2 ]* S8 u1 p6 N        1 V$ l2 ^2 t* N
}; }) d% b0 K' z1 m0 S+ \. m1 Y

1 b6 A9 F4 H8 M& M+ c
. H# y( @) @+ B' y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了