PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。
7 F8 w6 L3 @$ [; d* {源代码如下!8 I: c2 Z+ N) s& b, O/ _5 O
; a& w. q2 i1 F; _" R

; @: d6 E. Z/ C" n" Y9 G
  1. ! o# F/ x4 d1 g  m; x* \
复制代码

% E1 X2 j6 m, k5 p: N) ~& g9 ]% N& o. K; t# _) D6 m
char msg[256];
; @% e2 V, K! Z0 p" l1 _( \. r" Uconst double vec1[2]={0.2,3.4};
# T4 s: z$ ^& Y! Lconst double vec2[2]={1.5,4.5};
  R) y1 x9 _& m2 b& ]double scale = 1.5;
1 @. O' V% n6 A% I5 E+ b. ndouble scale1 = 1.3;
# q; P3 F, ^. r$ e7 ]) a! q, O8 cdouble scale2 = -1.1;) o  w6 y. A3 D2 c2 @1 \0 ?
double sumVec[2],vec_comb[2],vec_perp[2];
6 l& n1 l  ]! o3 P3 q+ z8 {8 fdouble oscale1,oscale2;5 F& c1 [  T5 f9 m2 e7 ^7 b( S
double tol = 0.0254;% U. h& `6 [/ a) U0 V
const double vec_src[2]={1,2};
, j0 S/ S/ D9 a. ]! h9 edouble vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];* a& x4 r0 E+ S9 H
double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];. c. Y" j+ ?9 @  i; c- O( r
int isEqual,isParallel,isPerpen,isZero;
3 y) _7 u& v* A. U9 s$ z2 d        6 h& c' V) L3 _0 z# e1 F- d  }4 K
double parameter = 0.5 ;
1 {% j* I4 o  C2 Z1 n, X, Tdouble pnt1[2] = {0,0};  C8 d1 r$ ^/ O; Q1 y( J2 l9 }
double pnt2[2] = {2,5};
0 r$ v2 y6 z2 X/ r, [5 p4 ~' D* ydouble pnt_on_seg;
6 t+ E5 w" m: ~- w* p
8 g' E" l6 @9 ~0 I% `
2 T5 Z7 ~) W9 b# G2 O2 |( d' S/ H//------------------------------------------------------------------------------
8 K/ Y3 K4 ?& [0 w; l// Do something
1 }; S) M; }) }8 Y2 k4 k6 s//------------------------------------------------------------------------------
, f2 ]* t4 P2 V) o3 C- q
8 P6 B, u/ f" W6 i3 M# W
# F3 J) E  w$ z0 s6 Kvoid ufvecTest::do_it(); j6 X8 O3 S: p" _2 U1 ^0 J
{
1 w& S" S3 z4 S0 b& I( `- ^' j' ?$ u8 R# L2 Q6 v# Q& c( O
        // TODO: add your code here) O( m  l2 R  @
        ) M, S! U1 ]- M& r: J7 Y3 W
        3 z; _$ e; z; N. Y) i3 V: w+ F
        /* 8 \  z0 M$ P6 z1 F& {  [9 ?
        ======================1 v8 a3 d7 T) ]7 v! e. {, f
        1 UF_VEC2_add : 两个向量相加 & `0 `5 q2 G, {, l2 Y% P! E
        vec1 + vec2 = sumVec# ]7 T  E- ?2 f
        ======================
, F% E( B5 z5 y6 n; P4 c1 B        */
* A* e9 ^* k& z5 P& `- t" l        lw->Open();: M% p$ W0 g( A# W3 [; C$ n8 l' W. h7 w
        UF_VEC2_add(vec1,vec2,sumVec);: O+ l; F+ ^; H8 I7 C5 }
        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]);
9 V0 o1 k5 f% y* s' ?        lw->WriteLine(msg);$ h  o# J) h( i6 x. C8 O

+ A1 f6 l6 p# t/ G; P        /*
) P! i2 N; A" `0 P# }+ q- v        ======================- K6 m1 }8 x) F, c' B
        2 UF_VEC2_affine_comb : 仿射变换$ K) A  m  o, X: e8 R
        vec_comb = vec1 + scale * vec2;
: l+ o$ {" v/ W6 a        ======================: n& I7 `  J# T5 s: U
        */
0 g* T( w% r" Z2 l' R: h! f% ]! w" _8 p3 a- J, H
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);; U# y' U) |3 k" H
        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]);
; P0 m1 i; b' A/ Y6 S* I        lw->WriteLine(msg);
2 `( @( j3 J" e1 N; x8 i# A, E& B8 g, e9 m
        /* # V* j& V% c2 a' \. b
        ======================' g% U; G% g2 {# M+ v! C0 C: r
        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 / A1 H# r7 u; w' F% s/ C* X
        vec1.vec_perp = 0
$ x2 L' J) m  S( r- z9 |        ======================* s8 V( d5 U. |, m7 l
        */; ~' A6 b+ j: {4 d, a7 [
) I- j& x) t0 u
        UF_VEC2_ask_perpendicular(vec1,vec_perp);
( r  j, g- i8 F        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);
% D+ |1 l. M( m0 i        lw->WriteLine(msg);* |) J5 l/ s& ]8 a3 ~

: u7 j% \3 I- n$ j) \% F        /* 0 O" `  S4 l# k9 a
        ======================
9 m) I# R- `. I9 c. Y        4 UF_VEC2_components : 求出垂直的向量
" W9 M/ ^! V/ ]" h5 @$ W        vec_comb = scale1 vec1 + scale2  vec2
! i+ Q6 K6 `5 O: R: U4 p        返回: 0 可计算 1 平行* ]. G1 V9 O( l2 T; R
        ======================
1 w- l4 M# ?% G" |: a) o        */
5 T4 s6 H0 }$ y* Q4 K  t
; Z/ Q* w. c2 P. ~. l& d" W. H        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
* M9 X9 o9 @$ s9 S& U1 Z* t        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);: T9 g( F4 @0 E$ k/ t/ s
        lw->WriteLine(msg);" C2 w; j) m9 t+ E0 Y2 k* R4 O

& p2 n8 w' k  ?- X        /* . a+ w! v3 W' ^, V
        ======================' L0 x; b* }% W% N$ U
        5 UF_VEC2_convex_comb : 计算点在直线上的位置
# S: x2 p+ A# g- |* v6 V        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2). " b5 Z1 d" |2 x/ }" v2 p+ V
        ======================3 P$ b1 f4 h( h; R% M
        */3 H( `2 I' A, |1 _% }2 _

/ r# E5 S  S# @& k" M1 |6 C1 b: a7 D
  h0 p5 w( M+ d* w/ u        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);3 G" U, s: R7 u. X( A6 D  @
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);
' c; z* Q8 ~9 j! ^4 n" \" I6 C, c' n        lw->WriteLine(msg);4 K- y$ W$ }0 g% W: \- ]6 m8 `
+ B9 ?3 z9 j/ k3 u: O4 o* F
                /*
9 W* p8 O, Y+ I" s7 j        ======================
% B# o9 B0 G* \+ P$ ]        6 UF_VEC2_copy : 向量拷贝- C3 m: U- ?/ W$ v+ s- f5 Z! z. z
        vector (vec_dst = vec_src).
$ O1 L& A  f1 T4 R' r0 }        ======================: \8 O6 `8 g6 U) k9 V* T6 H
        */5 x/ A  b. y8 y
5 f, f5 W9 Y" x6 [5 ]2 s9 `8 K) s
4 w( n/ I+ g; I  a6 R' Y
        UF_VEC2_copy(vec_src,vec_dst);
  U- i/ Q, c( M+ L3 r$ U        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]);
0 K# C; E; L6 C3 Y$ m) K        lw->WriteLine(msg);; i* L! Q8 ~# q& }
9 L3 h) T5 E6 H" P( Z" z1 d
        0 e; c9 q& \- h7 o$ Q
                /*
, d5 L, D; o; H8 @5 D% V- c        ======================
6 O; C& u6 b6 s3 j; Y/ t7 Q9 G        7 UF_VEC2_cross : 向量向量积
% J% G& L. o; d1 |* d        cross_product = vec1 x vec2
8 N% s% n/ v: b: q; J9 q+ z0 E        ======================
: o) T! P, Q+ C- b        */) k& M0 d9 x8 y& J' y! r( j
" k: V- A' C- |. ^# Y
9 `4 y) X6 h/ e& T6 Q9 v
        UF_VEC2_cross(vec1,vec2,&cross_product);
2 w2 i# d& `) B" k        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);3 N; F' N, p+ }/ ]7 ]
        lw->WriteLine(msg);1 f0 L# h( U# j" ]9 I7 i6 d# A
  ~$ H8 d$ L' C: L
# c  o, v  v$ l3 k% O5 w9 U
                /*
. r+ U' S( @! R) q  Q' S. M% J        ======================
1 I6 F! B/ m2 e        8 UF_VEC2_dot : 向量数量积
( x$ f  s* ?) L1 D/ _& N7 e        cross_product = vec1 . vec22 B% p3 Q5 C) `! H
        ======================
; `$ |0 U- U1 P5 w: X        */
1 J, s( P- n9 k9 m* \$ G" u& h
7 \, {! V+ L; K3 ]; }" k. _- A$ M0 s5 c* f  h! m. k7 L+ p0 \
        UF_VEC2_dot(vec1,vec2,&cross_product);
% {3 r! _1 n$ j& {        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
( Y9 A# i9 ?1 Q5 }7 o* E        lw->WriteLine(msg);" Q  N/ ^/ P& p, g6 r! P; P, p5 O
; W0 f6 O' X' G9 f

! _: [8 u% q) y* G' Q        + f$ @+ d2 X3 R/ S
                /* + p- k! y5 P/ J3 r; z9 A- D1 f( X
        ======================9 d7 N7 x! K7 n
        9 UF_VEC2_distance : 两点距离, S' F7 o/ ?0 O6 z
        (distance = ||pnt1 - pnt2||)
# J+ _- o& ]  p/ I' _. Q+ A6 Z" A" q        ======================
8 V: j" v$ N, D8 o( J        */0 Q: x0 c# a$ R: t( m5 Y
# _) g0 |1 Y- v
! K+ k" ]1 G6 q0 l8 @
        UF_VEC2_distance(vec1,vec2,&distance);; G. u6 @$ h, ?/ d4 y
        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
6 {: z  n5 I1 j- g( L% J$ k        lw->WriteLine(msg);9 a- w, `5 V7 s& Z( k

# W( I; {( S- G        /* , r8 y  J& H  p4 W, y4 A
        ======================
2 K2 m' d" A. _3 o* _        10 UF_VEC2_is_XX : 判断矢量关系: S6 P& {- b/ M$ S" G: L) |& C8 @
                0 = false1 d. [! ~/ R$ k
            1 = true
1 e$ _4 \" W+ `; R7 b        ======================6 O! M4 }' i: E1 S* i" {
        */+ l, \6 D- c1 m; `4 B8 ~' c8 Z
9 a( o$ U4 l6 k
/ T- V/ e9 `/ q) l* H
        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等' N% G7 I: f6 v4 \( q2 c( u6 R" o& I" q$ Y
        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行% z0 s2 h1 |+ M2 G1 s/ i) v" [
        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直
+ b1 J1 p8 c! n5 W% @6 ]3 L) V        UF_VEC2_is_zero(vec1,tol,&isZero);//为0/ Y4 ^, S/ f" @8 x2 {3 i/ @
' N( p/ V0 N3 C3 n; \
        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);
+ ]0 H# W- I# w" q# s" w3 I, `/ `        lw->WriteLine(msg);8 |2 Y+ F3 q/ j1 [' F: S3 y

! O/ j8 W* j" t: I. A+ o5 O2 V        /* 3 M% E. l' b1 C6 ^' s' T. p2 i
        ======================) ]9 p  H* o5 ?, O# j6 G7 J5 T
        11 UF_VEC2_linear_comb : 线形组合
5 C1 T* u$ @/ U) y$ S+ f- M                vec_comb = (scale vec1) + (scale2 vec2)
! g% r! q3 o, I" V5 L/ x0 E        ======================  J$ A; y- v- {3 z! ?; K3 R+ _
        */
/ G' q1 G8 |6 Y+ O( B
% A4 W& u- \$ J* {& {- K. b+ @        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
/ u% Y; V0 {/ \6 u7 x1 U- t) n3 m3 o% d& E% 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]);/ y+ W% ^6 d, P& r7 B+ i8 A& T" h
        lw->WriteLine(msg);
( B& q, c. w  {6 F! U/ I0 o% N  k  V' d$ k, i
                /* 8 I1 R: y3 a# `* p7 x" Z6 F5 l
        ======================) M5 E; C7 |0 _7 x$ M
        12 UF_VEC2_mag : 向量模# H' w% [- d6 j8 x
                magnitude = ||vec||) o+ e, X( E% }' g/ g, I' O, p2 _
        ======================6 i) M/ p' T( r( z
        */
. q% `" J* N: n  e5 r$ t6 X. C. {2 V7 P+ O) C
        UF_VEC2_mag(vec1,&magnitude);
, F0 Y- X  T# o) }6 n8 V' Z& e2 D1 j3 d, L7 W$ Y7 Q: C5 Z
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);7 \7 I8 o, m' }
        lw->WriteLine(msg);( T1 i6 I4 j8 E( `7 s) G" J5 {

4 b: D2 y+ Z& e                        /* 1 R2 ~; D2 s" y+ i" K% n7 g
        ======================
/ I1 [0 i! p2 c        13 UF_VEC2_midpt : 求中点 1 z& {5 G! v% ^4 @: o$ q# L/ ~
                mid_pnt = (0.5 pnt1) + (0.5 pnt2)2 p4 d% o( n- Y# h
        ======================
& \! B5 p" d/ O$ ?  |7 q        */
7 t* S: [4 t6 n; c* ^' ?1 |" S* J  i
- o" M# }  f7 `1 J: e/ F        UF_VEC2_midpt(vec1,vec2,mid_pnt);; v3 g& b& c( E7 W2 n
0 t) E: {: R2 q+ G, P8 ~
        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]);  R% h5 z# a7 ^. O: X
        lw->WriteLine(msg);
+ W. K1 C! H; ?6 X0 S* V; u! J" c3 I
        /* 4 e5 M, O/ ^) ^& P' @
        ======================& B* i# h# f) T! d  c8 ?: o$ S$ Q
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
; G2 ~" @+ X  e4 t" x& S% n: o# |        " |! z: q/ p2 y9 [; j
        ======================0 A4 x, l4 C* `/ |, G6 s
        */
9 Q/ Y) [. H: F8 F1 b: b+ Y* ?0 c6 k. H
        UF_VEC2_negate(vec1,neg_vec);
- B& O- g6 g% W8 f        UF_VEC2_rotate(vec1,2,vec_comb);
  S) B% E4 k% F; p8 P        UF_VEC2_scale(scale,vec1,scale_vec);% F) p/ j+ P" S) A8 J1 l: H
        UF_VEC2_sub(vec1,vec2,sub_vec);
7 ~) v. J- F* u        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
0 q, _( x4 A5 k7 I6 V, {1 Z* ^3 V1 I0 }4 Z, t. U
        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],; K' P: j6 T) p* W+ F5 H+ N
                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]);, m2 z2 W7 v; @8 @. S0 J9 Y8 U
        lw->WriteLine(msg);* m0 y/ ^8 L" C8 C% \$ n& e
+ H5 t6 I$ K% n7 [# k
       
9 {8 f0 F  H+ f1 c5 r}
4 w1 I2 X2 n0 J4 u6 F
8 x9 N3 r+ e" V2 Q  [7 ]+ s9 D8 r; @: ?6 \* z9 k  R, m
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了