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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。
5 [- _) G0 u* t. l, x! T# H+ f源代码如下!" W- E6 V4 @, e5 h" Q9 d9 \

0 @+ a; h" T; ]- j8 H4 Y, [1 S' E# v

  1. 1 N/ Z3 h+ F* A8 U% U2 j
复制代码

' y6 J( H$ ^/ v: }9 b7 r9 N6 [- K
char msg[256];7 B( j0 D& n+ n
const double vec1[2]={0.2,3.4};. g' ^/ d% o8 O3 I: b
const double vec2[2]={1.5,4.5};: |6 ?4 ~; {. F! e6 S
double scale = 1.5;" _4 T- K2 O; v: e+ l7 a
double scale1 = 1.3;
6 M$ C; f7 K1 U6 W' ~- h6 j2 k- y; Ndouble scale2 = -1.1;1 A, n  y# t4 i- n4 x) C! P
double sumVec[2],vec_comb[2],vec_perp[2];( s) M. {  z9 F* n; E2 d- w
double oscale1,oscale2;
8 c2 x* c( s) z- q; bdouble tol = 0.0254;2 f* C" n) s3 Z7 y+ X+ H4 Z* b
const double vec_src[2]={1,2};+ Q6 t% p7 j& E# I8 j5 t$ W
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];
# C/ _1 N0 m" R. i6 U: Gdouble unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];! j/ j: M' W3 i7 g1 {2 A
int isEqual,isParallel,isPerpen,isZero;5 B5 U3 ]0 y9 {. d
       
' J  t  F; w, s/ idouble parameter = 0.5 ;: D. }; e5 U) j% M- e) a
double pnt1[2] = {0,0};0 O6 ]" v7 {) B' d# t/ X4 e
double pnt2[2] = {2,5};
& P" }, Q, p. t% g! kdouble pnt_on_seg;- G" c6 w' O. ?! p  T& S* T

7 O3 i/ x5 S; s! I7 c; T, e$ z2 e4 b1 {2 v, L* G0 \. ^
//------------------------------------------------------------------------------
4 o: \9 I7 L8 j% Z9 u7 B' N, z. ^// Do something3 K/ b5 C9 o5 b1 R+ k5 F
//------------------------------------------------------------------------------
/ R9 Q6 Q2 Q8 N; f" F2 i
$ y& D( I5 ~: A6 x( q6 X$ @7 k2 G" T
) ^, }" ~& z! c/ o8 G" \void ufvecTest::do_it()
% q7 B+ B8 Z( v{% ?# y/ }$ }8 \' V

$ g: E' R& h. E* J8 A        // TODO: add your code here
3 o6 R4 R  G9 l# x! d8 [9 [. i       
/ o- i/ F0 v+ t2 C/ `# w1 u        . l  j( Q# \0 N2 C$ O" Q  `
        /*
( Q  |3 x! U- h. `3 ^        ======================9 `2 W4 u& ~8 X
        1 UF_VEC2_add : 两个向量相加 , @& }$ a; t5 ~$ [
        vec1 + vec2 = sumVec% o3 B3 V+ U5 B1 g  W$ L! p) S
        ======================
5 \9 Y% j' c1 h. R( w) }1 H        */
) ~) B% X1 k& f; ]6 c3 B        lw->Open();
" g- H9 F. `2 w- [  A( F        UF_VEC2_add(vec1,vec2,sumVec);$ h9 [5 d& z7 s8 o2 z
        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]);1 ]- y" r5 H& E# q6 C* f: W
        lw->WriteLine(msg);8 e2 j' j  n: Y6 y

2 W* f9 J9 h1 a        /* ' S/ l3 U( D0 w' j
        ======================
( }) e* K% h3 A7 N* r: i        2 UF_VEC2_affine_comb : 仿射变换
9 r5 H- u$ e) C- u        vec_comb = vec1 + scale * vec2;
& g& ^8 M0 u& o. K; z! Z# Z( K        ======================
4 ^- u8 q0 l* s* @9 W        */
6 _# B/ u, @* x2 c% C" z( {0 N4 [5 }% }% u1 i8 T1 s+ b9 j
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);
0 M, p) ~& \2 J7 M" O+ {5 R0 d        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]);
- b) ?, N% a. W. [0 m- _2 W        lw->WriteLine(msg);
; U4 h5 Q( W5 m0 W( p4 R, }! Z. M3 Z, U
        /*
5 l. M6 }" T. ^3 [8 W        ======================
" {/ k: H8 A+ D0 h3 r        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 8 H1 x7 @( F/ N( g' t+ z" l
        vec1.vec_perp = 05 O' K# {( \" k
        ======================; X$ `5 O8 ?! o( R5 ]
        */6 k+ G. _, ], x+ Q& I  A6 \

3 L3 I8 U' ^) D: m        UF_VEC2_ask_perpendicular(vec1,vec_perp);
. Q# X( a0 F, S2 ]4 v; s' N        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);* J7 z: P3 t! `$ ^* i
        lw->WriteLine(msg);8 t+ O9 S0 l' \: A2 x2 Y8 V
: H! f7 N; i4 b- L( Q: A
        /* 6 c6 L0 [5 u  ?; v
        ======================
0 P- v6 v$ X2 m        4 UF_VEC2_components : 求出垂直的向量
: _8 h; h8 J8 Y0 B' o1 D        vec_comb = scale1 vec1 + scale2  vec2( ~$ l8 C4 `5 r, _; u  P3 X
        返回: 0 可计算 1 平行/ u! `& ?5 w; Y, s& h: j8 S" w" W
        ======================
/ Y, z- Q* H7 Z3 |4 E% @        */8 _% @, @" B" i" ^4 e+ A* g

, v" Q/ _; b7 M# O4 u  V5 \9 U        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
2 r. P/ [: V0 N        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);
' t5 r& T0 B7 h. d3 L. v: x        lw->WriteLine(msg);
! ?  w" ^* z1 }8 h9 v" ?! ^3 K! z4 i4 t/ z# Y1 [
        /* & ~- ]3 b2 E+ w) Q
        ======================) C: q; ~, z3 I2 X0 f
        5 UF_VEC2_convex_comb : 计算点在直线上的位置
( o7 j' R: @* A  v" _2 k        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
4 I1 x! n  r& |  ~3 Q' Y        ======================
8 g' M; S( _" T" |. T5 Y% Z        */9 W6 I" L+ Z: }2 t, U  @

8 U2 }5 u( y+ f* w. @6 T
, F5 ^5 [# @- p& R2 b7 D        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);/ n' {& s9 t; [5 k/ {  I, k
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);, c/ m* i1 j7 e, ~- `6 @" P
        lw->WriteLine(msg);
1 I+ U8 ^) K7 C# b6 D) X( k( m" j* @. f
                /*
% F. R% H* d4 f" r& Q5 ?        ======================1 c. o; m. e# D$ G4 E2 b
        6 UF_VEC2_copy : 向量拷贝
9 B6 X' F$ d7 F3 r2 l: I+ F6 A        vector (vec_dst = vec_src)., \" O( r, v% O; {4 x
        ======================
5 w. @& j. {1 H3 ~1 b: k0 v! i        */6 S1 X" T5 f  r) u9 U5 h
' [+ H& C+ O1 g( }8 I0 |3 l  @! [
2 d) f; G* i4 l! Z+ N/ V. l
        UF_VEC2_copy(vec_src,vec_dst);
+ b0 G; I% l" J3 J; r: _0 ^        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]);1 H7 g% H7 a1 y, N9 @8 f) J: b* n8 @
        lw->WriteLine(msg);+ C, K5 m. j2 P4 M

# ?$ q( a# I5 P. w5 i! n# `( m       
" c( U, Q8 G2 g                /*
( c9 e! g0 }. A5 o; c! |        ======================. R* s; h7 L7 N) {+ _' X
        7 UF_VEC2_cross : 向量向量积
9 U4 ^/ ~$ Q* N3 J) P7 m8 C        cross_product = vec1 x vec2
, B/ W" t, q, n        ======================
$ r5 P; p2 H* z2 U- u        */9 e6 l4 Q* x* I' E# {: E' C# |
+ T8 l3 M/ _3 A2 l5 p. @$ U

1 U# v# o% L' I5 d" @        UF_VEC2_cross(vec1,vec2,&cross_product);
  _8 ]4 U& T$ r        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);# ^2 t* _3 {; d0 s
        lw->WriteLine(msg);. T/ J1 Y1 Y" @' s. L1 V, a# v  `
5 j$ r  ^+ a$ Z8 ]
( F$ x7 [/ T& q/ s! V4 A
                /*
6 J& Z" y# F. Z        ======================
% D) V+ k/ }/ S- R+ m2 l4 [        8 UF_VEC2_dot : 向量数量积8 w4 x- b" z* k: V2 d+ Y3 V; D
        cross_product = vec1 . vec2" S: T! ?0 A: y
        ======================2 P$ A7 b1 m& \' S0 r6 l( ~
        */+ z- A3 ]5 |9 K8 |( j3 f0 z2 R0 g

: i6 u" N% X! r- ]& v2 y. p- |0 V' h& P1 R0 b
        UF_VEC2_dot(vec1,vec2,&cross_product);4 p2 i6 e- Z$ N) ~5 \& E
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);4 ~  H# b3 m- U) ]5 D
        lw->WriteLine(msg);2 X* D* A- [8 G0 L6 U. h8 O  Y+ V  ~

4 B- ~, Q! V4 D( D! ]
6 ~4 Y1 H& u* \' X9 `  B        8 M  e, [# y# m2 @* [" K
                /*
0 z% Z) b: X; N. Q# Z0 p9 s        ======================. R2 G# U: }  h% J+ R; X, ^
        9 UF_VEC2_distance : 两点距离2 C9 z# }5 w5 v0 X5 U5 l( S7 h+ R
        (distance = ||pnt1 - pnt2||)6 T" O' o9 B. _, e5 ?- T; f0 [9 F
        ======================+ Z" A9 h" s8 ^1 j. ?) k
        */
2 c4 ~' s$ s9 f% s
) S: y/ @4 y/ a5 Y+ j" I8 L% W5 d2 K
        UF_VEC2_distance(vec1,vec2,&distance);8 M& ]6 m: J+ N: [
        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
' T* {+ C- V" X9 x' \# E3 \        lw->WriteLine(msg);
  I0 K7 i6 A* i  W+ V2 b, L4 j6 d3 F6 p6 |3 G2 b
        /* 2 t4 W/ p! l7 |2 \
        ======================2 [% B* \& S9 c1 \" h
        10 UF_VEC2_is_XX : 判断矢量关系2 K* F) C, w; v. @% m
                0 = false' `7 h4 t) p) O2 k% E3 c- b
            1 = true
2 _: K# w; W, R/ W- ^        ======================% ]$ m+ l2 q  v
        */+ y2 ^5 |/ a0 x( s. K8 q( o( G

- N  q: e9 c7 c3 x" ~  v! N9 `  S7 L( F
        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等! P8 Y8 \% T) Q+ H
        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行
1 u- ~& Q7 X) O( P( _        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直
+ p/ c7 E& _1 O" g# r5 Y4 ~' c        UF_VEC2_is_zero(vec1,tol,&isZero);//为0
$ I0 k4 q. f' U
9 `/ J- C/ @2 Q, p; [        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);
9 p3 O: k# r. \: X/ J, n        lw->WriteLine(msg);
. A+ I' }% e+ P' i& b" X' N/ x* s( S" S; M  o
        /*
& J+ b6 b- U; T% z$ k        ======================2 }) h& m0 i% B, z$ W) O+ p
        11 UF_VEC2_linear_comb : 线形组合+ M6 l) h7 U! h, L5 m/ I
                vec_comb = (scale vec1) + (scale2 vec2)
8 ^: p2 p' S1 V0 y        ======================  A/ t6 N2 q9 x& T, E
        */7 Y( F3 G+ J  `! Q' B7 m- H

9 z+ C5 K$ l3 t! v+ a/ Y- m% B        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
: W4 B' |- y6 R! y. I1 \
. _' a( `, C4 Z+ ^+ h, r$ ^' l6 z        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]);8 a; L' b9 P7 n9 f  {% `: O
        lw->WriteLine(msg);2 O* C' r3 A# U( t5 F$ \
8 A8 d( k9 e) k4 G; R0 J# p* Y
                /*   o9 z& C9 f- `$ N
        ======================3 O0 H* r* y: ]8 I- U4 Z
        12 UF_VEC2_mag : 向量模
( X% K, v8 u7 [1 w! j8 J) l* H( C                magnitude = ||vec||
: J. Q7 z2 I* E2 t$ F; J: J        ======================# _# p) j  e* K% J' T4 |% Y
        */
0 k& ^  B! m$ _. }
; W) ^" z3 y. x' `        UF_VEC2_mag(vec1,&magnitude);* z$ W0 f2 f7 P
6 u& ^: h$ U1 x1 |- i1 N
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);8 r) O5 I2 R/ x
        lw->WriteLine(msg);
3 J0 {# A9 A% n
* @3 [! q) j& o                        /*
) S6 F; i1 F; r" \        ======================
5 J% l. @! R2 c2 f! s5 Z        13 UF_VEC2_midpt : 求中点 6 A1 b7 v6 ?' x0 e$ A# g5 A
                mid_pnt = (0.5 pnt1) + (0.5 pnt2)% f5 [/ }  G+ ?2 F# Z8 E, K* \
        ======================$ P- `: N6 r" o$ m$ L
        */
* B/ ?( Y6 e8 Y6 w7 K  H$ M" M! j, U7 H1 e! B
        UF_VEC2_midpt(vec1,vec2,mid_pnt);
) U# Y  J+ t0 S. g2 |8 V  Q+ }
: ~% d; W4 L! ]3 s3 G% A7 C/ D        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]);
9 U# [7 u/ A7 D1 C) i        lw->WriteLine(msg);
% E& @+ t. \7 L9 [) d' Z
) d6 V5 D0 I. i1 r0 Y" r, o4 n        /*
+ g' h7 {8 P9 @' G0 c7 }5 B& n$ A        ======================3 [# e4 [' ?# ?( a% r/ e
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
% R" c6 R  u, e; O       
0 W. I1 v5 t1 M0 R- b. b4 x0 e        ======================
% e; K- T4 l; J; K' f  x        */; v, a) `& Y4 w/ z1 w* Y
0 k: S( W) }& v: v4 }
        UF_VEC2_negate(vec1,neg_vec);
) l- o+ Y& G0 @( k: W        UF_VEC2_rotate(vec1,2,vec_comb);
' p: g1 s( q4 B6 H        UF_VEC2_scale(scale,vec1,scale_vec);
& {+ D7 D/ Q" x4 K* o, [        UF_VEC2_sub(vec1,vec2,sub_vec);
9 V- R( Q; h3 a& E$ ^1 M1 e        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
2 j, |3 f- P1 {9 @# _: s5 [4 N4 c" ]5 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],, B  Q/ p7 Z5 i6 P# w
                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]);
6 P; r5 a$ h+ i( ~7 F        lw->WriteLine(msg);! w  b8 J& H9 {0 K/ h

0 C2 Z, |& W2 Q! b        ' n$ L$ U" F8 d  e* ]' R) B9 x
}
" x8 U/ A/ P$ s5 l( t# G4 O  r0 D
& c& u3 b7 w' w% B- G, f, G2 S& i0 l- i& C
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了