PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。8 P- l! `0 N2 j. B# k$ y) z9 E
源代码如下!! r* z) J* ^. j" H7 ?! ]7 j: x
  K/ V1 X$ i8 ?5 L. l

' J/ y$ ~' X; |7 X% g$ t8 O- n

  1. ! y; r: H# q3 o
复制代码

9 ~1 Y* E( w$ ?3 A
7 A1 s1 C& |& @; Q) Schar msg[256];
$ I  m8 Y0 }2 t% S7 ~( econst double vec1[2]={0.2,3.4};5 W$ q2 S* B, r+ I% B0 N) ^; `0 }
const double vec2[2]={1.5,4.5};$ H* L1 P3 A5 r
double scale = 1.5;$ U* i( X9 R' g! C3 s
double scale1 = 1.3;* I3 z) f7 r/ k7 @* N
double scale2 = -1.1;7 [! t& z# n2 k7 l+ `9 [
double sumVec[2],vec_comb[2],vec_perp[2];1 k% c# N& {( r3 _1 t+ [! T" t
double oscale1,oscale2;# D  _2 {2 t9 ~
double tol = 0.0254;
% O3 {5 o7 h) u8 Nconst double vec_src[2]={1,2};
; l4 G  q7 A) m) O4 y" J  fdouble vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];( l" U* @" d8 R; I0 J# P
double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];% Q/ R2 g7 K# Y/ {; i* \: U
int isEqual,isParallel,isPerpen,isZero;
. n9 G: \: Q; P! L; G        - J3 i2 _# m3 [6 {; j
double parameter = 0.5 ;
5 t8 ^% E' O0 d- Sdouble pnt1[2] = {0,0};% B8 \- }  n: X; J
double pnt2[2] = {2,5};
' Z$ n% ?2 P8 n0 Ndouble pnt_on_seg;
# b; g: l% c+ }: R7 E+ W3 g9 R, P* a. j* v' }/ w0 k9 s
0 c9 A& f5 {6 y; W- l2 x8 J
//------------------------------------------------------------------------------
! ~& u" I5 O/ n  G- d/ S7 G$ y// Do something  P  \. ]* C0 m. j3 p, y' Z
//------------------------------------------------------------------------------
2 C- _( I5 P6 }' B5 D. d0 y4 o2 c$ g9 m
2 @; R2 Y6 Y" B: U8 z3 j
7 o1 _0 \, G. E1 hvoid ufvecTest::do_it()5 U0 `6 z2 L  F' M7 w* s& X' \
{, ]4 v5 p% v- ~: b5 F% w3 g

( O, L& m2 `' P* ?        // TODO: add your code here/ K2 O: i5 [8 u$ h0 D# t0 F3 ^7 N
        1 |+ }" t2 @2 Q  D4 k/ H! ?! @8 ~
        ! S% _5 m/ E) f$ L: E
        /* 3 D- p) c; h$ n) U3 e( Z. n
        ======================7 |7 o& j0 _5 ?( n3 w
        1 UF_VEC2_add : 两个向量相加 + q5 x3 m1 ^* ^; R- j6 d
        vec1 + vec2 = sumVec+ m3 s+ [" u# g/ B# y
        ======================
' a( O8 F5 h& }2 @5 d        */7 c/ T) T* `0 f
        lw->Open();
; J; |; n) B4 c0 g# p( d        UF_VEC2_add(vec1,vec2,sumVec);
  H1 o5 _1 ^" E2 R% l. F        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]);
5 F0 A/ D* e3 o# g2 {* y' F        lw->WriteLine(msg);
; z  E% k7 I$ g) n% A
6 i* U5 b/ ?: v( k$ P. p        /*
3 V: F  p; v3 |: ]        ======================
' S( s0 q7 z7 P5 r+ p/ T  k( l        2 UF_VEC2_affine_comb : 仿射变换8 F! j4 l( t( K2 C1 {
        vec_comb = vec1 + scale * vec2;
. `: n4 h, [) |' G# Q3 D. K        ======================
' V% g0 ^( ~& Z. O3 N        */
! C' g, a5 X$ q* S6 N8 k- G
& A$ [: s* @. P$ Q! f; g* \8 W        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);
5 n% j! ?$ s9 f3 s' y; m; C        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]);* g( _/ j  |& D3 h- g& I
        lw->WriteLine(msg);: M6 k. c9 d+ O; ?, s
' h2 X* j: ]* Y( L9 L- e
        /* ; k& s5 u1 ]- N2 n( ^! D" l; R
        ======================
7 F) b$ _8 Q, U$ G2 L2 L        3 UF_VEC2_ask_perpendicular : 求出垂直的向量
* x  O1 U8 L2 U  B+ E9 q        vec1.vec_perp = 0, R: @9 R+ C* m3 p2 s
        ======================
6 P: h' e9 V; C+ a3 i" n        */
7 J( w( k  ~  I! o( s- M2 W9 L. H
        UF_VEC2_ask_perpendicular(vec1,vec_perp);1 y" `7 Y" k9 }
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);  t' I4 d. U% e5 a4 Q0 u8 G
        lw->WriteLine(msg);! |  D* X) x: q  n
5 k: k' y9 s' L7 i5 G: v1 X
        /*
, a0 W" }$ X( L        ======================4 z6 S4 N; @6 F& U+ D( m7 s
        4 UF_VEC2_components : 求出垂直的向量
9 h* a/ q  l+ H/ {) m$ h        vec_comb = scale1 vec1 + scale2  vec2- n+ u9 P- M* `2 ]4 q. j& g  ?
        返回: 0 可计算 1 平行; s2 f: F8 C' O  Z* z' l
        ======================
# l. ?7 l1 v( g# _        */3 _/ A3 S  r4 }
  M6 B' C: i& r9 G
        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
$ W3 H& }' c2 t4 ?4 j' S        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);
/ C+ g: q3 [5 `9 [) n+ ?        lw->WriteLine(msg);" P& N# j; o) T/ V
6 H& z7 w3 B* g- ^( R/ Y/ B
        /*
* P4 `' ~& K) h        ======================
# f) X/ a2 B' n5 b        5 UF_VEC2_convex_comb : 计算点在直线上的位置
+ {8 w! c1 h5 F4 z        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
& l. @* O6 g; m# R0 f8 Q        ======================
1 M! Y& C0 B- a9 y" U        */
. g; M. T8 y  C4 w( R6 r# T1 w
  m& D& P. [. T
' D8 |  w$ g; _# r+ n# Z0 E        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);" X2 j& T" ~( J/ s. T
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);# v7 `. B4 P( l7 Q: w
        lw->WriteLine(msg);+ T4 C0 @4 b* K4 h) M7 ]; @

8 E: J# L% ~) _7 c$ S& g5 p3 _                /* & I$ b6 s( q# n! c/ ]
        ======================2 q0 E7 w" e( e7 y7 b# ~% S
        6 UF_VEC2_copy : 向量拷贝# z- @- Z* t9 a4 X: \) p
        vector (vec_dst = vec_src).
3 v+ {0 D3 R* o6 [' U        ======================
8 E4 M2 y* `0 z. x        */
  O+ s# I& t- d: N9 b, i1 o8 n
9 d; S$ O! M/ P, }
4 Q, l# c6 y2 {2 g! f- E( J        UF_VEC2_copy(vec_src,vec_dst);
- U6 g9 I5 j: U& I( S, Q        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]);6 C! n6 I! J* L% t
        lw->WriteLine(msg);
, a: i9 l8 Z' ~5 x) Q& S- [1 m3 b8 M# l) |. g' i3 g) n
        * b  D: ~4 i6 E
                /* ( W+ P  ?" L0 h& V$ {6 {; T
        ======================
* t) j0 ?( M. h1 D7 A5 g        7 UF_VEC2_cross : 向量向量积
7 b- b& B' b0 c; e) l' j        cross_product = vec1 x vec2" h$ _6 K8 x  j( O. p- K- V0 M5 a
        ======================
- N8 R" K" W( }3 G9 f2 b; R        */
# U4 I1 D. l; ]2 Z4 ^- F  w( S. B- l. S
1 v0 |* t/ u& T; z0 V8 N! J0 b
        UF_VEC2_cross(vec1,vec2,&cross_product);. h) V* R3 h0 a  w/ b
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);) A) O( D% x5 T! g' S. |+ T
        lw->WriteLine(msg);0 U" V* A' H' Y" y% Q
4 t& b6 j0 }+ Y, }  z+ l- F
0 u  f" U1 i% R3 |& ]! J. ?
                /* 3 n1 ~' E0 {" O& l* m
        ======================
0 r, O1 u8 u) y: g/ V        8 UF_VEC2_dot : 向量数量积! A4 V, z) y4 T0 m& [
        cross_product = vec1 . vec2
8 i4 x1 T- ^8 t+ C$ \        ======================9 m, b) S: v; W$ R) j; ?
        */
" u5 C& c: C9 {' ^7 w- `
  b+ ]0 _( t4 D- o6 |' H8 z0 d) }5 o1 `" z! Q: ?
        UF_VEC2_dot(vec1,vec2,&cross_product);
0 A& J! |) D& k9 Z        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);- b) z6 x7 d& n. k' x  `) x5 q  e
        lw->WriteLine(msg);
4 n% s' H  Q+ `( m/ e
, Y9 l8 F7 {. T/ R4 C8 O4 [! A! J
& o8 }2 ]$ S& R1 X. r& C& F" Q        2 E$ I5 Z% X6 X: S' H
                /*
/ O' U7 K4 i1 o) d2 V3 I" C! |        ======================
7 Z! o3 X9 e$ q        9 UF_VEC2_distance : 两点距离1 G# U, i- A& i5 i) k  Y4 t
        (distance = ||pnt1 - pnt2||)8 W7 h3 J1 @3 n$ i
        ======================2 r0 T+ h( P5 j  z9 `
        */
7 n6 }, C6 ]  A3 t; O6 y# Z1 A( P: B6 I, j

, r, ^9 F+ e, H+ @5 E' E( x. x        UF_VEC2_distance(vec1,vec2,&distance);
+ G- T9 {- b5 x' P$ e2 r        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);( b: {5 q7 `( I. e8 j/ h
        lw->WriteLine(msg);
0 v) Y8 E0 }8 y3 |0 k$ A: Z1 o% p' m
        /*
* X/ p$ R0 O) a5 K9 T! ^        ======================2 V  f/ ]: Q8 Z
        10 UF_VEC2_is_XX : 判断矢量关系
8 m; r- J$ g6 b% D: v5 s4 i                0 = false$ {3 x8 A, v! G' m! L2 N; `
            1 = true. T. X8 Z7 H1 y3 r# @
        ======================; P: a( N; R: ^# G+ k- [! \
        */! H- d. A" I8 S5 C) |

+ i3 o/ \" J; ?5 V& c
( P3 \3 E1 `# \/ ~4 E/ x        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等
9 F2 \: V; D* u        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行/ S! Y  {: ]6 r8 y: j- ]0 o; b
        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直
4 g7 c! K- ?( _3 I$ }9 I7 E! G3 k        UF_VEC2_is_zero(vec1,tol,&isZero);//为0
# j$ b: Z# `% h4 e
; X" x$ U  X2 `3 Y8 @" f        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);
5 Q* n7 o/ ]  u3 |4 C6 a        lw->WriteLine(msg);
& k) z+ }% J/ U% h6 _. ]- P  `# Z/ y# ?. @% t
        /*
3 C+ c' K- N9 v        ======================
1 ?$ V. L( Y% J- O. g, n        11 UF_VEC2_linear_comb : 线形组合
8 y( I1 n( e9 u  [/ u  i2 d& K                vec_comb = (scale vec1) + (scale2 vec2)
5 C7 b! ^' r" g        ======================
5 p3 Q# c' P( F1 a, _" O* _        */. J* ~- v  j: ~- V

7 G' Y  Y8 r2 X# B+ V6 |        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
4 x# N  B" m0 _* k- H  @% b9 t/ D' O0 D( n
        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]);
3 E# `9 a  i  r        lw->WriteLine(msg);
. o0 m5 n( c3 z; Z, ]5 x) F7 Y( O- `; E) _
                /* & a# K1 r$ h6 o1 [2 O
        ======================
8 H, s, V! U  V' A3 w        12 UF_VEC2_mag : 向量模. F% Z9 ]2 \3 B1 p8 k& a
                magnitude = ||vec||
1 h# j- b' f3 X# z, k) H8 @1 B        ======================
/ H7 N& B) _5 K9 ]* Z& }) ?        */
# x9 B: k1 _* A  m, s) h5 [: A; a+ z! _5 F2 a% m2 B
        UF_VEC2_mag(vec1,&magnitude);
7 I" y3 X+ `- A( Y& _0 T8 y, k8 a8 x$ d
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);$ \# \) k  l, H4 {" e3 J5 h- b
        lw->WriteLine(msg);* t5 {+ d* F9 `. j) V

4 G: S: E6 n: J# S5 N; E                        /*
/ L$ o2 j  H# T5 d- W- g( O        ======================& ~, U2 J6 O$ K" c
        13 UF_VEC2_midpt : 求中点 / N- X7 c( F) U/ l
                mid_pnt = (0.5 pnt1) + (0.5 pnt2)
$ d0 `+ m4 W7 {7 q        ======================) v9 v4 a& A# Q; P) K
        */. C" k2 B1 h) O, b4 I

! V, L2 p0 h: j$ b; u5 S, a3 ^( i        UF_VEC2_midpt(vec1,vec2,mid_pnt);
0 p$ X& t" f/ \, F, w/ I0 o% E6 N, _: y' y+ n6 M
        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]);
& x8 @* {% t" c* Y; @        lw->WriteLine(msg);
9 L! j- Z1 Q+ g" Q& i1 {
, W; |6 \( K- H1 S% C  B/ B9 S        /*
; R) C# J. M9 D. a% \        ======================1 G, ~+ l, \' O5 z
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
: o7 K7 x7 b. H        2 J8 y7 Y( ~6 n: l
        ======================
( r" I' `: y+ L8 X8 J4 Y5 ^        */
3 n+ U8 h4 I; s  t2 M8 Z* x
4 s( r/ `6 S9 ], S& ]5 n        UF_VEC2_negate(vec1,neg_vec);
$ m( ]* ~. U' s) X# P4 N) R( {6 N: [        UF_VEC2_rotate(vec1,2,vec_comb);
4 o- i0 x4 D+ K! [        UF_VEC2_scale(scale,vec1,scale_vec);
: E3 \+ n- E0 W/ n" J! a, E' c5 _        UF_VEC2_sub(vec1,vec2,sub_vec);
6 L6 {7 U8 ]4 D- q2 ]4 H3 s        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);! N! a+ d7 o0 F2 J  l, q

+ K  U( z+ }, m8 q  q8 H& o        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],
3 L. t5 o) W4 L0 U- L9 @" z                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]);( R0 i. \( d$ }2 Y
        lw->WriteLine(msg);& M$ Z# [* B  _

' m- @4 Q( L+ s       
, Y6 ]* Q* X8 k& T}( ?: ^3 ?% T) [5 }4 a, v

) w6 z* w' L. Z' q$ ?' l" l, z$ V$ V/ O5 f/ I! P' r9 l# b9 \6 u
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了