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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。/ `8 a* h$ L4 s( C" ?& K: j! J# ]
源代码如下!$ v) a8 W% R$ _! C1 c

+ C. }' K. N$ z# I, z2 C  w( o- L' R0 H8 j

  1. 7 A4 m( {: M, h* e3 a2 a3 X3 `
复制代码
/ d( [" `9 ~. ^/ k% t% G
; f; r) b' S! ^1 ^: e
char msg[256];' ]) }4 G0 M. k6 m; k
const double vec1[2]={0.2,3.4};
; B* p* f  N% ^4 L, _) g: {const double vec2[2]={1.5,4.5};
9 n) ]3 Z  W1 S" r; |) `9 Hdouble scale = 1.5;
5 V; S5 q, b2 y# H% \* p# D# odouble scale1 = 1.3;
# E: W9 F( M4 H; m) u8 O1 a$ m& r9 |, Bdouble scale2 = -1.1;8 z6 D- k& c* d' k1 o, G" |
double sumVec[2],vec_comb[2],vec_perp[2];' {' h+ `! r) Q: q6 R
double oscale1,oscale2;
+ k( e( f* e8 L( vdouble tol = 0.0254;
  v( v' f) m3 B( [3 bconst double vec_src[2]={1,2};
& B( a1 p" g6 B, X$ }1 idouble vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];
! J- E; Q+ x* D$ Z% D+ J) ]0 Wdouble unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];
1 O" q9 r* T: O1 E; Z3 Z: {' P' `int isEqual,isParallel,isPerpen,isZero;. s# G' M/ v" G, k. v
        + h; T& V; _# u: @5 @' i
double parameter = 0.5 ;
* z5 Z2 }6 c) T4 _double pnt1[2] = {0,0};7 }- i) u& F- p* |0 E7 ?
double pnt2[2] = {2,5};
; ]+ \- i$ h. Y$ qdouble pnt_on_seg;
1 M% k  F2 r2 {0 l% k9 S
/ t& P' A2 Z# w7 @
5 w( u2 I" k" o6 r+ r, i" B4 u: N//------------------------------------------------------------------------------
8 q: y! T0 U( g& T; w// Do something) f! Q' o: c( _: M/ |6 {2 p
//------------------------------------------------------------------------------
8 M0 m8 U8 X$ A& v/ |  f' {2 W9 V& v3 c/ S* Q

4 v# E9 i% Z8 w6 ^6 Y# qvoid ufvecTest::do_it(). I- @1 I3 w4 c: O
{: B2 T& R$ I- }0 x% C% D0 l1 i

4 l9 a% ?+ E5 g! H+ d6 Z        // TODO: add your code here: E1 X6 ?, C5 c
        % s5 l- E: C) L6 w
        3 F# R6 g; T$ I* P/ J1 F4 I
        /* ; E' ]2 h) U- n2 U! [0 U% z/ B) t
        ======================
/ q2 |! C9 j& U! k        1 UF_VEC2_add : 两个向量相加   }5 }% ?/ \* a. |; c
        vec1 + vec2 = sumVec
% [/ ?& l+ o* N7 D8 [* \        ======================
! h7 k- K; g# S! j* O; j, `& M        */
: J+ z  S# R6 u0 o- }+ w" P# }& O        lw->Open();7 ]- q6 O& f1 }% t; B: G, P
        UF_VEC2_add(vec1,vec2,sumVec);) I' O6 Z% h, u4 O
        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$ b, j9 \& n7 S8 i
        lw->WriteLine(msg);% M- e, @( Z3 k  M9 X, `

3 D7 H1 G( l7 f- n. n) B3 I        /*
, `9 r; k0 j& z5 n        ======================
0 z0 n4 b& x0 q# i        2 UF_VEC2_affine_comb : 仿射变换- N2 J; Q0 ^' L- B# a+ f
        vec_comb = vec1 + scale * vec2;0 F) W/ g$ l/ ]5 z
        ======================. x7 u- t7 |7 y# m2 s. A! W
        */5 F# i7 [) W! o2 r9 y/ J

( u5 G- M  @3 l' n2 |  `2 a6 }        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);& j  ?, E2 ]5 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]);7 p5 |! K1 E3 T
        lw->WriteLine(msg);  U) h, K/ C0 @) L, q
& z& P4 p* Q- p) _* n2 f& V
        /* & o0 b5 M* Y( p5 f' F
        ======================2 q4 x0 o6 S3 o: n: n# _& S1 K
        3 UF_VEC2_ask_perpendicular : 求出垂直的向量
# \* w% L4 k' Q9 a9 c3 e        vec1.vec_perp = 0
2 p" O! W% F& F, m, ^        ======================
! W& z$ P4 ]* [7 }: X        */
& w7 J  ^0 o6 a
( p4 q# o2 K, I; F& H: r. G        UF_VEC2_ask_perpendicular(vec1,vec_perp);
+ G+ ?9 Q8 u* f/ }1 Y* P/ r        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);
- N1 m; `- R4 N, r        lw->WriteLine(msg);8 p7 S! g2 M2 m8 j' s& u

: ]( J* K% W& T  T        /* 9 v6 e' v( H' T; c- j, X
        ======================6 I% L; n3 t0 w( |# h
        4 UF_VEC2_components : 求出垂直的向量 1 e7 F0 W9 n, s* S+ m
        vec_comb = scale1 vec1 + scale2  vec2
: u1 @$ z  j  B' X        返回: 0 可计算 1 平行/ o  E+ A; i; c9 T& I- U
        ======================9 ^( ?  d5 S/ K& |
        */
% e* T( q4 \" ]* W1 e8 v
% o4 w- P/ b% e- Y% c+ a6 E        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
1 W6 f9 C5 e2 D% _4 r        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);# I6 c+ q3 t& b2 A' k. Q$ y( G+ [
        lw->WriteLine(msg);
% ]! m4 \& d* H$ u: b. m, E; J9 v. O5 r
        /* ; ~0 L6 Z+ B3 u0 _/ \& _
        ======================7 ~4 X' L9 E: O* u+ n
        5 UF_VEC2_convex_comb : 计算点在直线上的位置
( J* F' X$ M; W4 Y        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
/ g; Q. H2 d: ^        ======================
, G& q6 F6 C3 T        */3 I: `9 V1 i6 v2 f* g
) a' v8 x" A9 U! ]

' e! b7 K9 v$ i7 ~        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);
, f# D% `# F' N$ \& }        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);" r! _7 e3 H. S0 A
        lw->WriteLine(msg);
+ H! q' o5 _$ W& D6 F7 h6 i- {
! B0 F8 @# O8 ~% t) t, l3 [                /* , U$ A# e' y; q' ]9 s. t+ L
        ======================
) ^$ ~% h' _& r! @1 L        6 UF_VEC2_copy : 向量拷贝
' r1 Z$ j' N) |3 ?9 i1 c        vector (vec_dst = vec_src).
* W) _3 g2 W; u! O% J        ======================; {1 |9 h) v: E& E
        */( w/ i2 `# J$ J. j, h1 `
6 ?9 Y" M( ]! C
2 w3 ^( i/ J" @" H/ {# \" _
        UF_VEC2_copy(vec_src,vec_dst);6 [3 o% `# }  T; a: e# p. s
        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]);) Q$ |! M: W. O; `# s: o$ p
        lw->WriteLine(msg);+ z5 q' ]; h* D4 H. g  y( u

7 Z' K0 y! d2 ]& d       
1 {% M& }0 \- p; J! S& J                /*
2 h0 T  x$ W. w/ }6 Z& Z3 h        ======================
# L+ P# U+ f) p; O2 k) ^5 R        7 UF_VEC2_cross : 向量向量积
8 Q; S2 E- _* G. z% I5 w7 S  P        cross_product = vec1 x vec2
' j, q9 e) u( K' h: l# Q        ======================- [. {7 W4 D( H
        */
5 H0 x, Q) k9 [! m4 O
: c, ]9 ~# c( @/ V& I9 E/ B
$ A/ P: X' D. @- Y; R9 l5 Z        UF_VEC2_cross(vec1,vec2,&cross_product);
( ]/ |3 p+ w0 v% a' M        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);& g. ^6 C2 c, F  L2 p
        lw->WriteLine(msg);
. r& _2 I+ o' z5 {
: e) u( b6 L* ^# r  K* t
* q4 n1 d$ \1 H& X* R0 A1 H+ H                /*
8 p& h8 d/ _) V% G4 g3 p& W: T* [# t        ======================
6 I5 q0 O# [2 @, e+ g( w        8 UF_VEC2_dot : 向量数量积! E: E$ M$ p2 Q
        cross_product = vec1 . vec2/ m# z3 i* Y; R0 b6 o& g
        ======================0 Q( D  `2 B8 d. r7 r6 I9 O
        */' F0 C! b/ `/ X1 l$ u( E1 ]' l
3 z- p; h! F" L
8 ~7 }5 c) G) ?% z9 `# c
        UF_VEC2_dot(vec1,vec2,&cross_product);- p" j/ s# |/ f8 o1 ]
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);1 u5 t+ v5 }7 b% v6 |" W* d% d1 E
        lw->WriteLine(msg);' k" ]& @) |- y" K' p- f

( v  C4 S0 I6 X5 a: U) ~3 N7 I
. X. q  x8 a4 P  l7 k* ?' \* `        % L" ~% g0 _" K
                /* 1 V) x) B# Z8 x) U% `4 Z( a
        ======================# E+ {, m& |) \# @# Y6 Z. Z: \
        9 UF_VEC2_distance : 两点距离
# f' t! ]% ~( f0 U        (distance = ||pnt1 - pnt2||)  w7 K# |* t( Y0 f
        ======================: V/ s2 f0 ~1 J; \
        */
  O& |: z1 v9 ~  w
$ p( ~+ _" m" `! x4 g" q9 m8 \4 U& f2 j. u5 x% S6 F; ~
        UF_VEC2_distance(vec1,vec2,&distance);( J: o9 x' K/ ^) R6 J+ b2 J1 M. {
        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);" Y2 a: h" Y- Z8 H
        lw->WriteLine(msg);3 l( g; J, g7 p) A" ~$ B  v; a2 H
4 `0 B- v0 z. [  g$ A1 _! Z: H& K
        /* 7 n; G7 r- A4 N* g1 h
        ======================
& o$ a6 o2 k; [. s1 E        10 UF_VEC2_is_XX : 判断矢量关系
7 y3 D! u3 M# s/ ~' q                0 = false# ~) t9 L4 K, c1 E# X5 A
            1 = true
6 k  W1 ]! ?8 y  X- X        ======================. w1 g4 l8 {/ P7 ?
        */
* A2 x0 o4 V. ?6 ?4 f2 H* B: E# K& f) |- o* y0 w) ^

& ^5 ^: F+ _5 A: `2 d; c( Q        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等2 X( Q: |* f  Y' h& m' O0 Y# p5 d
        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行
) P: U4 n6 e& q2 M: g5 |' `        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直6 j1 C3 H1 g2 \& a% ?
        UF_VEC2_is_zero(vec1,tol,&isZero);//为0( C' t% ~3 X& p- ?7 X' e$ Q

, s/ }4 `3 w9 q5 s9 t$ O        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);! ?/ G' f. ?6 T. c2 Y2 t& U1 M, R
        lw->WriteLine(msg);2 U; n+ d/ S% J. d0 u; o& c

2 w# i9 z$ D& u1 }) z& {        /*
7 }5 {9 J& F! h) f9 L: }  p* s        ======================
- f9 F, C+ c" h& f6 m        11 UF_VEC2_linear_comb : 线形组合
  |. q( J- L' P7 E: H& U* |- \% l                vec_comb = (scale vec1) + (scale2 vec2)7 w1 e/ S2 A5 M1 t0 B
        ======================
: g) }8 o! w+ Z" ~/ K        */
9 h- |% E6 i' [* K: h/ r1 c9 v
( t- i+ E0 V* P9 a# A4 i$ I        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);! Y% r" L* b* C* Q. Y

" e1 O) s( x2 z. S: x        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]);
/ f: ]6 j9 r" o, @) Y        lw->WriteLine(msg);8 d& u1 j; o% v& Q1 G
) W# k! o( ^% i  R3 u
                /* ' l7 v7 I8 l' T; I  q( x
        ======================4 K# |' P: U5 I8 d
        12 UF_VEC2_mag : 向量模
$ S) t1 h6 F2 F4 T7 _: _- t# U                magnitude = ||vec||( Z% H$ W- ^* @  `, \( r
        ======================& _2 {4 z0 f4 e" k/ H
        */+ G8 q2 b7 }1 t

- m8 F) x. t2 F0 Q+ K        UF_VEC2_mag(vec1,&magnitude);; X+ k, C: Q0 e
& _; s5 q/ K$ v: t% P' Z
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);
& g2 m7 p8 c; Y3 r+ t* a        lw->WriteLine(msg);
/ e" t* a+ R7 V9 m. y
4 q% E( d6 B% A4 R8 B# J* X6 K                        /*
: G8 G( y# D5 s. k  c        ======================- y7 p! q! o  y: T  J7 J
        13 UF_VEC2_midpt : 求中点 % _! O! Z& d& \# @$ c( P7 i
                mid_pnt = (0.5 pnt1) + (0.5 pnt2); N1 P+ F8 j" [% O% h9 R! Z
        ======================$ `" c3 p" m: r+ k
        */
6 b& Q  t( d) r- o/ W6 {) l4 A( N0 y  w. z
        UF_VEC2_midpt(vec1,vec2,mid_pnt);1 W' \* _2 J, _

6 z6 Q/ ~0 ?9 @( h* p        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]);
; d1 S3 A3 K1 x        lw->WriteLine(msg);
# z4 T, J& ]0 V+ M: U) n6 ~
0 h) \# t& }$ t/ g5 C  \        /* 5 }3 z* J- ?$ g! j7 Y6 h  E; n+ h
        ======================- g: d7 Q! P2 b3 W
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划9 D" H$ u1 \+ N
       
0 Q' O; M) N6 ]  h$ i        ======================) R4 ]6 ^1 j6 |0 }; x) t% F! |
        */
* p$ g6 y* ^. @* m' L! G& J6 `4 s0 k$ e, G( l# n( @' s
        UF_VEC2_negate(vec1,neg_vec);
  Z. a' y/ l: g4 o$ j/ G7 Y4 N        UF_VEC2_rotate(vec1,2,vec_comb);; i, T5 G/ A$ K
        UF_VEC2_scale(scale,vec1,scale_vec);
/ H+ f% {. g; u% a; z8 L        UF_VEC2_sub(vec1,vec2,sub_vec);
+ ]5 W# q) I2 x) V+ }8 T  Y( }2 S        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
0 K# }7 W" K1 D% Q) G% s
: X, \- @( y$ Z+ v/ M4 X; l        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],; R# ^' b! d0 ]1 a# D) n0 E
                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]);+ I2 A$ K$ y' p3 E$ I
        lw->WriteLine(msg);1 i6 W+ K& W% o
2 j) x6 |6 j# n3 x1 m0 K3 m
       
0 K$ k" A; R3 M+ _- A' m. T+ k7 i}/ [' _; W( D& x( ~. m. |/ f

- J* N; k3 s1 n, ?5 \. A7 o- Y7 a$ S1 I$ J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了