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

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

  [复制链接]

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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。
6 R9 ]% ^9 F; t5 ?4 g, D, w源代码如下!$ `8 G/ J( C% q! H! e4 w
  l" N8 Z: M' W& |. j/ f8 ^6 O

/ h" o$ _4 o4 \  j+ v  p

  1. . h/ ]8 N3 ], J8 C. x. K/ L9 P3 e$ ?( W
复制代码

. b, Q9 z& V7 ~& Q% H# ~9 J1 [# H" F" K) |5 C% p, M
char msg[256];$ E1 l* |* x3 F
const double vec1[2]={0.2,3.4};
6 t8 C. r* _0 Lconst double vec2[2]={1.5,4.5};
( `$ u  `! L4 c7 j4 _. Fdouble scale = 1.5;+ w+ H$ E$ w# J+ {' ~# u7 ?. i5 X
double scale1 = 1.3;. ?& [. v( ]8 Z0 z7 Y3 |5 M$ }
double scale2 = -1.1;2 W7 l/ P0 y" U% l3 G
double sumVec[2],vec_comb[2],vec_perp[2];
/ s2 v" d9 p5 p$ o/ ~1 Vdouble oscale1,oscale2;* ~* H' P" Y0 j- U6 z  c
double tol = 0.0254;$ u: O9 a$ v5 o" {% |( W& y
const double vec_src[2]={1,2};" O, u$ [8 y8 W5 h
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];3 p$ l$ M% C" j; K7 t- W5 K* u1 Z
double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];3 s0 s7 K; `  A9 {3 w
int isEqual,isParallel,isPerpen,isZero;
; I3 R, O% k* U/ X6 W2 i4 _0 B       
* K4 @% L. z# v7 vdouble parameter = 0.5 ;3 Q+ L& i/ N+ w3 Z  F& u
double pnt1[2] = {0,0};5 J" j4 p5 w2 I# w
double pnt2[2] = {2,5};0 ~- |- u# Q1 }  f
double pnt_on_seg;
/ ]. H# T5 o8 y4 G! s
/ T5 d$ R7 D# _) I5 v5 ]3 k$ P% W$ d( U9 a3 s
//------------------------------------------------------------------------------, D9 T* S: o2 V" Z% g$ f' I
// Do something
: }; G0 ?" f( `' f1 ^' q//------------------------------------------------------------------------------
, S% a9 O: L' _1 o% |5 F3 F# y
8 `- V4 C9 p. g  L7 l
3 i9 N) J4 k4 }void ufvecTest::do_it()
, f7 A* ^! h4 N  b0 M8 {* j{& F7 E% @& F3 e9 [- t
8 Q1 z2 I% T' ?* H  J" [  y
        // TODO: add your code here
. M/ i, u6 U( o& }        ; I0 t& f; E+ h9 Y
       
# y/ M. P, J# Z9 b' a' O- T* e5 R        /* ) v. f0 @: y, Q% [: e$ W$ y6 {
        ======================) z) X! R4 P7 [2 s6 C& {. t; ~% G' q( p% g
        1 UF_VEC2_add : 两个向量相加 ' i. E$ F0 h. s: G% q6 n5 _. n1 W
        vec1 + vec2 = sumVec
" y/ y1 o& W, V7 ^8 c) s        ======================
2 ^9 H7 i8 o$ ~        */
8 Q4 C5 N- \9 b        lw->Open();, _6 X- C, P% S) J
        UF_VEC2_add(vec1,vec2,sumVec);# J  V5 l1 ]0 L$ W
        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]);, H5 ~% Z4 `: R) I2 B3 z. H0 T6 @
        lw->WriteLine(msg);# Z3 X0 E# Q- Z! P9 Y; q$ @
- j. `) R/ O; Y4 K
        /*
( W2 {/ z' R- n  N9 T# B! d        ======================/ m: F) H! F, T) z6 d/ \8 H* B
        2 UF_VEC2_affine_comb : 仿射变换
' w0 A2 c, U% b1 s7 v+ }        vec_comb = vec1 + scale * vec2;
$ u5 i- E) v& X( m) D6 [6 d        ======================% _5 d3 M6 s. |" R9 S# B" I
        */. |9 v( T% p3 U% x9 c/ t
) g! i  j' P: e  l" X* N
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);
! Y; l9 z3 {, E' j) s        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 B! a$ `3 v# K" N5 G7 y
        lw->WriteLine(msg);
* Y/ v# G. _9 K2 }- B2 K% A: X0 d8 A4 y- N. A* ^
        /*
0 R/ o4 Z$ E+ m3 x! _- J        ======================
$ U5 T' s. c; P$ U! u' Q8 {: T: ?, W        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 ' y4 a7 {/ i" h$ z" w
        vec1.vec_perp = 01 F1 N, S' f0 R* r7 m1 q. o
        ======================
$ ^$ R1 z/ S' ?, c# ^        */
$ k( ?$ |' o$ @4 _7 D$ g
0 O- g. R( H1 f0 P) @5 K7 \        UF_VEC2_ask_perpendicular(vec1,vec_perp);
& }$ q6 p* G; ^: T7 J( ^* e        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);4 G  z1 A) M; y9 A7 t
        lw->WriteLine(msg);$ {  g# r  z4 Z" J+ s" _6 o$ G

; R6 K6 L  s  j% w$ q( ^/ f, w        /* 4 T! T6 u# ^" H: B$ l
        ======================! x% B" F) t# h+ m3 ~
        4 UF_VEC2_components : 求出垂直的向量 ; {. P% X) n+ D1 Y
        vec_comb = scale1 vec1 + scale2  vec2+ ~" u+ F1 q  q8 [% m5 t
        返回: 0 可计算 1 平行
# ]3 J5 W3 |4 j/ j  |        ======================
. Y& u4 h" E+ t        */
. n( G" d: E- C9 L
' i  s1 y' o3 K        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
4 d0 p  Q8 K  c; M5 s+ U  K        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);
! Y6 y( @2 B2 a# ~! m7 z        lw->WriteLine(msg);- A8 g4 S( o; j2 b: z+ \+ r  m" c

% Y0 {; j* I1 z: Q        /*
7 b3 o" u. G# k; w        ======================$ v1 a2 p: _8 z' b, k) t/ ]
        5 UF_VEC2_convex_comb : 计算点在直线上的位置
5 ^* I0 j% B# U* P  z7 h* `" @        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
! ]7 ?9 |1 |- O' Y' {        ======================/ T- {/ N1 i1 d
        */
$ l7 [+ a' Y) A8 |0 b! ^2 P6 ?  P6 A3 V
. x5 u" b* ~9 [: A( W9 Z, _
        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);- ~! k$ D$ [2 B" ~; [9 v
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);# V7 ~* I' e2 e) Z- O! }7 O% d
        lw->WriteLine(msg);: @; D5 R3 |0 b/ a! V0 z8 Q
6 Q- c4 T& @6 j2 g* _& K& A/ e
                /* 8 m: m% L- m' n
        ======================
. d% E) K  S3 x8 h( [5 b1 \        6 UF_VEC2_copy : 向量拷贝
7 `5 D4 `5 X; d" _7 m; t( @# r2 |        vector (vec_dst = vec_src).
2 G  O$ w2 ~2 }        ======================6 v, C9 d1 a% u% b# ?8 Z
        */
! U1 N' Z. N& y# ^) `: D* {) X+ C! B4 C: Z9 K
6 z/ f: b0 N) |9 Y. [
        UF_VEC2_copy(vec_src,vec_dst);$ _: {4 ~$ @2 j2 y5 j4 a2 K% }; a/ f
        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]);
2 @# D. _% U$ ?' Y9 p* }$ q: M        lw->WriteLine(msg);
3 ]- u7 t8 v0 U. n; R9 B6 C4 [& X  U. P
6 D* s) Y7 J4 z3 n2 N( T9 O+ w        : Y! Y7 L" k9 {1 k3 A
                /* # M$ i2 {- L3 p* C
        ======================, ]9 e$ v2 q, Q% Z" o& \2 d
        7 UF_VEC2_cross : 向量向量积
' q; H" \+ F, |        cross_product = vec1 x vec23 K( n" d( t7 q& i+ y2 ]
        ======================
+ d. t: |* x* l( t        */
1 f0 `* r3 b8 f/ i- u5 i( Z/ s/ f4 u6 _
0 h0 X$ H& I1 a
        UF_VEC2_cross(vec1,vec2,&cross_product);; ^4 }) l3 n; n8 o: M! m2 s! {
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);: `# Z+ W6 Z$ b0 N# y% c& i; h- J
        lw->WriteLine(msg);
3 V6 \* c% n/ k: Z3 A$ I
* q) ^2 v# C5 t* o. N  w( p; s& s
- w. X4 E! m8 \$ d1 }0 x% [                /*
8 g& E( _* D6 |# e( Q; g        ======================
1 e5 w5 |' e; U6 F( r% l* g  m        8 UF_VEC2_dot : 向量数量积& C- T+ P/ l6 V" [9 ?3 ]5 y
        cross_product = vec1 . vec2" R& `$ |0 W, F5 l% ]5 X/ X; m
        ======================
+ F9 [( A- H; c        */
; A' [) X  I/ R7 L9 p% s; e6 s6 ?0 I& Z! Q% X9 |8 O, X/ z* P* R

( i' F6 X9 f! c        UF_VEC2_dot(vec1,vec2,&cross_product);, l+ P! J  ^+ U& p4 q
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
8 T; r; q3 {9 D  l2 z& [        lw->WriteLine(msg);8 x# O0 o1 p: ]+ |1 k( ~

& ]8 f1 y7 x4 A$ ?- o3 x7 W: X7 h
, e! E4 W- r; H# h+ I        " t0 |. @0 `% D2 `5 D! P
                /*
: ~" ?9 g+ R/ b% j        ======================3 @; K& B4 t; Q) U3 N
        9 UF_VEC2_distance : 两点距离
6 S+ J, W+ r: U        (distance = ||pnt1 - pnt2||)
$ h4 d! v4 N5 {# ?6 I. ]        ======================
- M9 r9 X6 }7 ~3 q- A% Y  K8 I, H( u& j        */* m% h, \5 j: A5 D

9 k3 \/ @5 P% b+ m, K% v( `6 P8 Q0 P3 O& L% r" Q
        UF_VEC2_distance(vec1,vec2,&distance);( v) `% Q" X2 d$ _8 N) ^
        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
7 }, O; N5 g' ?& n* ~' |9 u6 V! c4 t        lw->WriteLine(msg);& J+ @& W# h* F. B1 ]  W

2 z* M2 c% l) {- E        /*
4 a6 G$ y6 l# F( F, {3 E0 n, T, N* d        ======================! V9 _: ~* x  g& N9 I/ H0 B
        10 UF_VEC2_is_XX : 判断矢量关系
4 l' @& c6 g) A, u# g                0 = false( y& x. u9 k3 H. g/ H( a7 q8 X
            1 = true+ N( r; P* s" K4 Z+ k- P2 h
        ======================1 ~7 K, a2 H" z7 }4 f
        */
& O) \1 r- J: ]: P0 y3 w; k  ?( J1 X5 I- v! M1 `! n9 w6 x, B

9 x) @8 w! o& J8 s' s; D) O& K        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等
7 G! J# `  i, Q6 L  L  c% A; J4 E* U        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行
; `4 \# A6 M) c+ X9 Y. M+ \* F        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直4 V2 i! ^9 O8 [% |2 a% f, m3 c
        UF_VEC2_is_zero(vec1,tol,&isZero);//为0) |$ ?1 D6 B3 r: y$ x; y  q& |

4 g7 D' g# j4 g8 @& O3 W        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);
$ n& ~1 w8 j4 P0 e8 a& j        lw->WriteLine(msg);  R. h3 P  \# ~, Y& q9 \. d

2 _$ m/ F( U! U! |. \- U+ a        /* 3 Y& h* u  G+ k/ P' v0 Y
        ======================
! E4 X" q& u  b, m1 e        11 UF_VEC2_linear_comb : 线形组合
# _2 [3 `1 U' F1 z- W6 Q                vec_comb = (scale vec1) + (scale2 vec2): y8 H+ d5 L2 G0 T
        ======================% s, C" m# O; a2 w% D2 A
        */
' _% O5 f: O3 T- u. H/ K, R# |$ H; u: S
        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);! Z( U( Q; b- ]2 V1 A# ?

- V! V3 O0 _5 S        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]);
2 W7 P, p# }( B; j        lw->WriteLine(msg);
, Y" z9 y# d$ K; B( I. j$ M! I# B" s& f
' o8 }! C4 v; D: `$ H7 j                /*
. T! `* L1 k2 S3 Q$ D- ^        ======================
4 `! F# ?4 M$ \5 @        12 UF_VEC2_mag : 向量模: n: \0 G2 d* M4 s0 w( ]6 q  t+ z
                magnitude = ||vec||2 E, e4 H5 e1 P8 j) s% ?/ L
        ======================
5 Y9 r" G8 G# y5 D3 e2 a# v        */
' A/ i" W# ]4 g' r
0 A' N4 l& A  A        UF_VEC2_mag(vec1,&magnitude);8 j- `, l6 y5 J, p. g
/ Y1 y4 S5 L3 z
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);) V. k( J2 C; ~' t4 }6 M: }- k
        lw->WriteLine(msg);8 g& E& B$ n, W4 `5 m
: S6 P0 b# z+ l" R1 C# Y: ]5 X
                        /*
- {  H  U) W4 t, i* P2 E# _        ======================
" n; C5 W0 U2 C$ L' x7 ~& `, m        13 UF_VEC2_midpt : 求中点
( N2 ^* R- H& H7 G                mid_pnt = (0.5 pnt1) + (0.5 pnt2)
5 ]' J1 N+ z( W/ V, s7 t/ z- n) B        ======================
1 I' M& g" V$ s" M) r' q- a        */
8 P: r% \2 B  F1 r
  }2 _; O; i9 w" [8 D' o  c4 d4 q        UF_VEC2_midpt(vec1,vec2,mid_pnt);8 ]3 n4 w5 y# u  ~4 H. A( I
$ z, V4 ^5 D5 i0 I1 O
        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]);8 W( [0 m1 N; i& w# N
        lw->WriteLine(msg);& v% y2 B& d" \& e2 {2 R

: I( e  D# m3 k, P' ]8 p/ E        /* 2 S& h8 a7 F' L; V+ d
        ======================
# z- @; M/ f' R/ l% L3 J- z        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
( V" E% y, c' \       
' h8 L( @8 C$ c: _+ U        ======================5 A! ^, X! K: T* B+ c
        */9 i" i9 I- W) Y( a! y! a0 ]; U! e
& b& Y' ?$ f) \% q- g# W2 e
        UF_VEC2_negate(vec1,neg_vec);7 L/ }, p+ p: S* Y  H* M
        UF_VEC2_rotate(vec1,2,vec_comb);( v5 ?1 r0 Z& M5 c# @
        UF_VEC2_scale(scale,vec1,scale_vec);
9 k3 K/ X, d  T        UF_VEC2_sub(vec1,vec2,sub_vec);2 S  C# d4 X* j% k/ n
        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);5 U1 F1 G- b; J
6 y8 V9 s: J; @) r) G
        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],
8 u) X/ ~* T& o5 `                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]);3 b0 D2 X6 l/ K0 U9 A
        lw->WriteLine(msg);
# y+ ]4 b# l+ g" V& G2 R, K4 J/ a9 n( L9 d& f4 \( e
       
/ v0 o# M  b9 E6 S, y0 X9 I( E}( Q& ~; c" {' n

7 H8 x( H# G" I8 a/ G' R7 B/ x# v/ ?# l% f2 z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了