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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。
+ N! Q) L- Q( X- K6 J源代码如下!
4 S2 @3 C; p% p; U* F0 p, Q9 Y; F5 c2 |9 [, S% \6 s

$ q6 g, h) ]# x* t
  1. / I0 p- W% B7 c* l$ S- L$ P' W
复制代码
2 Z6 [( g6 \0 t" a
3 B: Y7 C- o; K8 X
char msg[256];: `1 g/ n! j; h1 A
const double vec1[2]={0.2,3.4};
" A+ c+ P& z. w9 }9 Vconst double vec2[2]={1.5,4.5};0 M  u, t- W, ]6 [/ r! \0 R# D) G
double scale = 1.5;
9 H* ]2 q' B* d# s8 a* p" Rdouble scale1 = 1.3;
# M- ^, ]% P8 Z+ r4 d4 F4 [double scale2 = -1.1;
3 D- p0 B4 v. V$ f; ^9 Jdouble sumVec[2],vec_comb[2],vec_perp[2];
' v) ]! m' v8 `double oscale1,oscale2;
% Q- E( |  Z- h' {' E; f, Idouble tol = 0.0254;
, h7 ~/ G1 D  Dconst double vec_src[2]={1,2};; x2 G- Z' S  _' |# U
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];- ]- F* W$ {' g' W7 y; K
double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];' m0 ]# c7 z2 ]* p
int isEqual,isParallel,isPerpen,isZero;) S7 l6 S' k" |5 \# R$ b3 b8 ^
        : a. s/ n+ M* P' |" e. y
double parameter = 0.5 ;; h2 h2 \) S: h9 o, H
double pnt1[2] = {0,0};9 [2 M! [* w2 h1 e$ K8 k$ M
double pnt2[2] = {2,5};4 O) ^" [5 @) c; z, u
double pnt_on_seg;
# z2 w+ x3 N3 J& M3 Y
  _2 ~) X5 ]1 a
3 t+ @2 v, ^; E" b0 e//------------------------------------------------------------------------------" ]9 r9 t" Y4 h# v9 G' F
// Do something4 ]% [/ w1 [9 z
//------------------------------------------------------------------------------
0 C# |3 X/ H+ c" u/ n/ }
6 ^8 f0 X: Q4 U' U
2 L4 r: ?* ?, w& ^1 }3 Cvoid ufvecTest::do_it()
2 H  A( B# M+ ]0 U: r" _; x0 Z{
. ?8 L' e! F' T) X1 O, N& J
& B+ e8 L) u& Q4 x- E0 H+ ^- m        // TODO: add your code here
  E' R! s6 _9 A5 _$ I       
$ T0 J# P4 O% l        & R4 Q/ ~$ {! V& U
        /*
5 c) X: z, G  i; `" o' j0 h/ g6 }        ======================
1 m: X1 d+ d. h8 {- i& Z* `        1 UF_VEC2_add : 两个向量相加 ) ?" O+ a% b6 A" i. Y) n( j
        vec1 + vec2 = sumVec# H( p$ P" V2 Q
        ======================$ S$ e; |3 p4 H
        *// k) U9 ?8 S9 E* {
        lw->Open();) U: t9 \/ Q( n0 Z9 a
        UF_VEC2_add(vec1,vec2,sumVec);
1 r2 I& ]# O- [. b" f/ w  B$ F2 G        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]);
( q! ^" n5 Z. }3 S; r/ ^; U        lw->WriteLine(msg);
2 T& M9 v& A$ j5 {: N8 B
! Y6 z) z; D) X; J5 `. ]        /* - M$ s& K5 z* s+ A! F
        ======================
1 N( F( R1 @3 V' m& b3 R        2 UF_VEC2_affine_comb : 仿射变换
. [; f* y  s; i! ~        vec_comb = vec1 + scale * vec2;
/ h8 S, a& K- C2 w        ======================8 _2 {) w% P- g) W
        */, r* _$ R7 d2 e
' u9 \) V6 F4 @' y" w
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);6 w8 c' ?, E9 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]);9 ?: H( B4 A3 h* X9 F
        lw->WriteLine(msg);4 }/ z5 p* U3 d# Z6 v) G

) W# p6 Z8 T% m  I. o# S        /*   y! I# M6 u8 p  a
        ======================4 \4 \) F- u/ P) l# L
        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 0 t4 x9 C( Y+ _4 Q1 _+ s
        vec1.vec_perp = 0' t* W0 o1 `' M
        ======================; @+ w* g) f. k' U' J0 _
        */
; a+ Q3 h8 M. P) D; M! o
8 t5 u* U* y  F& [& Q        UF_VEC2_ask_perpendicular(vec1,vec_perp);* B; {; o+ f' c  \% A
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);$ B4 l6 c/ Z" w0 j4 Y
        lw->WriteLine(msg);
" f1 y8 c; |% |) n/ [
1 q: N3 r5 T  o  w2 G        /* . H1 F7 d3 D3 C% B4 \
        ======================9 ?+ X. X# b; |4 b4 K+ D. t( T  x
        4 UF_VEC2_components : 求出垂直的向量
6 V; E: o0 }+ ^        vec_comb = scale1 vec1 + scale2  vec2
5 r0 r2 {. u8 y/ c( E1 t. |        返回: 0 可计算 1 平行) ?1 G8 w; L! C
        ======================
: W. D  |& `! b        */" V( n' P, s0 Q: _+ I

/ O+ S8 L5 K4 G2 M9 [- D: ]        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
5 X; W9 y. y* D4 V. T% ~& W        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);
5 o3 l" ?$ h% `3 \0 U) \: Z% d' c3 x4 ]3 k        lw->WriteLine(msg);
. @) X' Y# ?0 H' B
% ~' ]; c, K9 Z% ?7 _) N        /*
8 P: X! V' {+ T        ======================
! j2 ~  s0 G, l. k        5 UF_VEC2_convex_comb : 计算点在直线上的位置- h( @8 Y# E  j7 _/ [. V; {5 ?
        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2). % y. f0 y0 p' K
        ======================* n% M+ P! R% s1 }, t" ^! [1 N
        */
+ ]& q" p2 N* @
0 ^8 r) }5 d4 c4 _2 k- h) l) h# w* y: [
        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);
2 P$ a. k" F6 X' H        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);
# I9 g# _2 n1 W0 N3 [" a        lw->WriteLine(msg);
2 d, }; q. A9 ]7 d8 @. x. f$ d) e4 a
                /*
& Y+ h! h" O4 \        ======================
& k% o; q% J2 A+ ]; b        6 UF_VEC2_copy : 向量拷贝
* t; {7 E! S% u) v9 Z0 j, H! q        vector (vec_dst = vec_src).  y" Z( f- ?) ]7 g' T
        ======================
0 E. ]) J. @+ C) K4 |        */
4 A! Q. z# e: M
2 _, E% g9 z$ I- Q6 \
2 ~# P, g, F* D6 \$ b6 \        UF_VEC2_copy(vec_src,vec_dst);
& r! M* O" {: Z        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]);) Y3 y& [6 Q' X7 y7 ?
        lw->WriteLine(msg);
/ d0 B% q3 a& A/ t$ J3 B
+ O% H. |2 ~9 E" i% L7 W  V! V' x, D% Y       
0 e* D* _6 i" b/ j. M3 C# D                /*
+ I$ E$ Z' F$ v9 o1 D" q        ======================
; w) {1 B( o: ~0 r# ?- r        7 UF_VEC2_cross : 向量向量积# V! D) y7 U, w6 L: {
        cross_product = vec1 x vec2
' U1 o% i2 E6 X  D        ======================
! d7 d' v- u  Z        */) B8 h  J9 R; f3 \7 W$ \

/ A3 `5 q& R+ K8 y: g4 M- |2 f0 z' d3 v" L
        UF_VEC2_cross(vec1,vec2,&cross_product);4 R5 _. \2 [5 @; M" s8 `* N2 s
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);" v& G0 u! z/ a4 ^" I8 ~9 e
        lw->WriteLine(msg);
  ~0 w  ~3 U" h+ x& ~6 R/ B' y$ x- s9 b
3 O7 o- @6 L+ p  [# u
                /* 2 `- E2 f5 m4 a. |
        ======================/ s* E" ?8 O4 [2 @2 ?
        8 UF_VEC2_dot : 向量数量积
6 L5 s" b  {* Q; g6 x6 e3 A        cross_product = vec1 . vec2
' L. ?8 x' k- z        ======================
( ~# q; u' }) x- x+ t: G        */
5 G+ v2 P  D8 T- j3 t- f) y% _
2 F3 \6 h7 I8 |+ ~: r/ w4 b' r4 g/ Q, x2 {/ ]
        UF_VEC2_dot(vec1,vec2,&cross_product);- h: Y& \  v8 a- s8 N0 p- K/ H
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);- ~" {8 i6 `" `$ {8 k! c
        lw->WriteLine(msg);
8 g/ z7 j1 P% @# |1 C+ P6 N  s& g* n+ R# D* j! \8 Z3 y
6 h- L6 m: ]: m( H  Z6 N
        ( r+ P9 w9 q- U! `9 _- n
                /* & ]: |, B1 u  f& K7 h$ R
        ======================
7 S& v4 C2 k* D" ?' c4 F9 a1 l        9 UF_VEC2_distance : 两点距离% k; v- u3 {; m' W9 R
        (distance = ||pnt1 - pnt2||)
; n: {! U0 v+ |        ======================+ P- x+ d% p2 o9 @$ _- e: y; N: {5 M
        */2 x* @/ H9 A4 T' q
- O! o& g  W5 c& p* O- w

' j9 B, C4 I  b: q        UF_VEC2_distance(vec1,vec2,&distance);
+ ~8 E% ?' v" O        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
- [: ~6 a3 [3 t, i5 l5 V        lw->WriteLine(msg);
) V- ~/ P7 t, Y  Y" ]
  B, S6 ~: e8 C        /*
; @& d) H/ o3 B1 v7 R! r3 {# u( t        ======================
: L- y3 {0 x  p( x        10 UF_VEC2_is_XX : 判断矢量关系
# z6 a+ I& z# z) g6 x' Y% H7 Y                0 = false. v0 Z, V% ~( i, [% G4 U
            1 = true  q1 a4 d" n! {5 O) H
        ======================$ b. u. g. W5 H3 a; E$ \# w
        */
, _' t9 M, y6 b. m0 w. z* O$ B8 }) L+ n+ d2 K  Q& W
4 c2 b  O) C2 h' E  D) c- C2 q% L
        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等
2 I! `- [$ K' {  d: J0 h5 S7 c        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行; ]6 c( ]5 h3 L& L' {
        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直
; H& }9 p: X0 Z8 f        UF_VEC2_is_zero(vec1,tol,&isZero);//为0: d6 x( ~/ x3 I. }0 C  M3 x

( b* _* g0 J3 g+ Z; v8 E        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);; a& _* ?7 E+ r2 e3 M
        lw->WriteLine(msg);
' x/ Q* @- Q- p8 {  ]9 O3 r0 p0 B
/ B3 v1 `5 S7 ?! V) m# a        /* 8 E/ ]; b) P9 x" N% s' X5 |
        ======================% K7 h6 r+ B9 H$ O, a, l
        11 UF_VEC2_linear_comb : 线形组合
" f5 C5 ^6 L3 A" j6 B8 W8 p+ W                vec_comb = (scale vec1) + (scale2 vec2)! F) i# C, |0 J$ l/ o
        ======================) K; F" }) {% R! v. y( ^* T2 w
        */
$ C  d& Q! _9 r, ^' Y& b5 y& ^6 k$ W" j  u8 x5 f. r1 Z8 F# ~
        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
' {3 E6 y6 ~% V- G; l1 X% ~2 i4 h+ r0 M7 x0 o1 \
        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]);
5 s6 K9 i; d/ A        lw->WriteLine(msg);& Q2 \1 [& C- k0 A  z
  Y. p* I! h7 F3 e1 i7 ~
                /* * ~& L" c8 r' r. P% [
        ======================
; ]+ B' B  t5 U0 R1 z        12 UF_VEC2_mag : 向量模
- A2 v/ [/ ]) \$ A( ^0 m( W                magnitude = ||vec||! q- M5 m9 H2 z% X* o
        ======================0 ~) U4 f0 Y" O0 n" K: U& u
        */
# C# U* ]' z9 a, I) n( |+ g$ P0 l
2 d- {' Z2 q. [' F( }& T1 b  P+ a        UF_VEC2_mag(vec1,&magnitude);% S7 O' o; U; _/ `

% p4 N! c5 D" Q8 o# w        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);/ J; w& y& }0 F+ o
        lw->WriteLine(msg);  v/ q4 S5 {; F, d
6 d+ A% s1 I( `+ w7 z
                        /* # m9 Y0 v# Z# X" r
        ======================  p$ a; R: |" k3 z& R
        13 UF_VEC2_midpt : 求中点
& Z+ R+ ^9 {3 l* f5 v                mid_pnt = (0.5 pnt1) + (0.5 pnt2)
, e  y) W- G$ {& D3 _% Y        ======================
& r6 K8 s% L/ a/ r2 d  H        */. `. _" m! [$ R

% A/ A, Q( l6 D( B" e        UF_VEC2_midpt(vec1,vec2,mid_pnt);& s# w" b0 b* P  q

# }2 N- U/ ~: K% S; E1 ^6 R        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]);
) q% F- W# a6 J( y+ H% R/ J        lw->WriteLine(msg);
( `" A$ v0 L/ W: S
) `0 C! g( W# c' O        /* ; a; M5 l- P3 o" J" L( S- ~
        ======================! N1 b# R1 r) `) b+ d& e+ {
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
. F* S6 o( z. O; z       
! k7 g/ Q5 x+ U" }( E$ r        ======================. U7 K+ R5 L3 S0 i; K9 K+ A
        */" x" z$ [4 w% _: b& m
, T+ [: }, Z" `9 Z" I
        UF_VEC2_negate(vec1,neg_vec);
9 ]  ^% u! t$ |; @& m        UF_VEC2_rotate(vec1,2,vec_comb);
  V# C2 p4 X6 [        UF_VEC2_scale(scale,vec1,scale_vec);; V3 E8 X7 \& y2 X( @7 W
        UF_VEC2_sub(vec1,vec2,sub_vec);
* i( _3 v" K9 B' o' P        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);* V( M) d; |* H+ t
4 D0 {3 B' [) g& P
        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]," Y0 K* h! x/ y9 p
                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]);2 c) a0 ?3 x5 A; V& s& D
        lw->WriteLine(msg);
; R6 J& a( S; Z
! b0 j1 t" S: }4 z       
; s+ l) I" |  G% Q) j: N}
  o# F8 X8 }1 X+ W9 S1 Y. F
$ G. E! O( C' d5 E; B6 O% @
( A. U( c9 _7 D& k
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了