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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。
; n6 y& W- K: d0 Z源代码如下!+ [3 q, U) r6 Z- D& ~8 _
7 {# H" X, Z7 b9 R! O

" u' |0 [' I0 L- s# z5 J* Y
  1. + `9 k! t5 T# G' S8 Y
复制代码

! a7 O1 G/ q+ p+ D! L' E& k% d2 ]" z2 _" F4 d& X" z( J5 R
char msg[256];9 J: L/ s9 _- _& d; F+ {: p3 V
const double vec1[2]={0.2,3.4};
3 ^9 r7 M  N4 W" Mconst double vec2[2]={1.5,4.5};
* s4 u( i- n1 d% gdouble scale = 1.5;& ], S- a. G0 s0 V) I
double scale1 = 1.3;
- Q4 j7 r9 m  p9 ?7 A  @3 \double scale2 = -1.1;* J  A2 t9 b3 W8 I0 O' E# d- D
double sumVec[2],vec_comb[2],vec_perp[2];9 u4 `5 i. z, L1 i" B
double oscale1,oscale2;
. s  [, e9 C( t( s9 ?5 a8 p- idouble tol = 0.0254;
% O" A3 o. @! |const double vec_src[2]={1,2};
; t: z; N8 c7 k. g( jdouble vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];
: _5 G1 l, W/ \/ n# ydouble unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];
  ^  A+ e$ `: h& |6 Q0 o( w* yint isEqual,isParallel,isPerpen,isZero;
/ g0 a2 N- {; X! {5 q       
& ^( S+ ?' B/ l* N- y$ [! n! [* Adouble parameter = 0.5 ;( m4 ?  t& C8 Q  H- t6 B. E  a
double pnt1[2] = {0,0};( N) L/ L4 |5 o" Q& v( z
double pnt2[2] = {2,5};
: R: ]3 k$ |. v. ]( adouble pnt_on_seg;$ Q* W: p) Q. J. o/ ?. f* v
! [" h- W- ~6 j  ~+ d' P5 x$ e

1 |+ L6 f9 r6 U3 e9 o' @9 @& `6 y! ^//------------------------------------------------------------------------------
, X2 Q0 n9 g  h& U// Do something
# s% D) x( q2 F//------------------------------------------------------------------------------
8 [% E; a! p- R0 ]4 b9 j9 o1 X/ }1 ]$ C* `

7 {" M6 Q: _. Y. C. L" f# h$ V6 ^, P2 Nvoid ufvecTest::do_it()$ ~1 L' v+ T) P$ F  d& q
{) u3 v# W7 n7 }* q9 g
5 ]6 e" z' W5 {$ u7 x
        // TODO: add your code here
/ c/ f0 |& K3 J9 a  f& p# z0 ^8 s        % z5 ]2 g, K0 h8 l3 R$ T- ~$ m
        & y  N: u3 x, _% x, G" K
        /*
9 X# p. D6 ^( Z* T        ======================+ i; g0 k4 q" k; w, A2 a2 A
        1 UF_VEC2_add : 两个向量相加 0 o8 \! x9 P4 {$ |3 S- R' V! C7 E
        vec1 + vec2 = sumVec2 L& Q( ~& U9 [8 O" x, ?
        ======================
/ I2 x9 \8 g) a  Z        */
# j" D) ]9 H1 j* B8 |        lw->Open();7 M8 Y, H) F- k5 W0 b
        UF_VEC2_add(vec1,vec2,sumVec);* u; W7 L; m$ q- N9 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]);
  }3 V/ n- M" s: H% T! b: {/ g: D        lw->WriteLine(msg);6 v2 w% o& m$ x% X! f
$ n6 d- |3 K/ b1 w# z9 ?
        /*
: T4 R" F' x0 s/ P% M& s- ]        ======================
' j- G2 i) O3 F4 q  q: M        2 UF_VEC2_affine_comb : 仿射变换. d6 g( l: [- b, P
        vec_comb = vec1 + scale * vec2;' y; L$ L9 i3 v, e( U' I" p
        ======================- U  p1 Y' y; x& e
        */4 H4 `, w) ?  c- z' ]  T
9 Q( o0 t( I4 ~
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);9 I1 o- t- m) O) u0 b' 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]);
$ d% ?/ f/ C, s' k5 x# g( l# s        lw->WriteLine(msg);
1 J* G! Y- C$ q$ q9 T6 x/ I9 g- I8 I0 l- n  B% B
        /*
6 v( n9 h0 S9 E6 \5 v        ======================, m7 ?+ f3 x. H  Z4 }+ t" X
        3 UF_VEC2_ask_perpendicular : 求出垂直的向量
" W& ]* c* ^3 h$ n+ J9 L; V$ S3 b        vec1.vec_perp = 06 r" y7 }; \8 h% v& Z2 I
        ======================& Z' W; a6 x' u% O0 A2 Q
        */
( y3 A& {' t. U/ H& B8 z) b: E/ |
        UF_VEC2_ask_perpendicular(vec1,vec_perp);
) G/ J" r* P$ ?+ _1 H% b( e        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);/ B* {6 p7 K! E( d! K
        lw->WriteLine(msg);( e3 Y3 W& m' s9 R5 v% J5 R% z
+ N7 A! D+ Y( i- k+ c, ?) V8 v% h$ I
        /*
. U6 M* g/ s! u& H* n1 j        ======================
: @& k( N9 t2 p* j5 z        4 UF_VEC2_components : 求出垂直的向量
: @) i7 p6 S: A* ~8 a; z        vec_comb = scale1 vec1 + scale2  vec2
9 a8 T( x" D4 R# I. C9 Y  @        返回: 0 可计算 1 平行
! `1 F- |8 `) b1 j        ======================( g' C( d1 }8 s: D
        */
1 ]2 {3 M/ x) [' g2 E& ^' n* W3 u3 _3 k; }+ K
        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);1 z4 Q$ K9 K9 v$ U& a' e
        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);  @+ ~* a% W0 o7 ]
        lw->WriteLine(msg);
" e! \6 b! }) r' t6 z, h3 r: k/ {
  c) a3 b# X# k6 N7 F2 I        /*
' M# L8 s( i$ ]+ ?1 k        ======================, M& o3 {" E% ]! R( n) G, ]
        5 UF_VEC2_convex_comb : 计算点在直线上的位置
1 i6 f! Q, u! ]% z        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2). 7 k: @6 c3 I6 W; M# N2 Q
        ======================% y- O4 Y' @. P/ Z4 ~! {( X8 l$ y1 m
        */+ x( U' u4 P9 [$ Z

" A$ Q9 A2 l; O& Y
$ |( h3 x1 S" Z7 \! w* T        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);  _; S! l5 M1 R1 W/ z  |/ D
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);
2 H- y- G6 D. o& Z: I        lw->WriteLine(msg);, |# S: f. ]$ z0 c; w
) N9 G/ X+ \3 o
                /* . X, l( Q4 m, k0 b7 W
        ======================& R# e# ?& o) N: q' S
        6 UF_VEC2_copy : 向量拷贝
& N6 E0 G9 w6 f4 }4 u! O6 `        vector (vec_dst = vec_src).3 M) N3 Z$ k# B
        ======================
1 }8 g4 i4 E0 D/ o( ]4 s* ]        */
7 }  Q1 r4 i8 T3 R0 Y$ y1 M
5 g# c1 z# _* j( M4 N8 M; [+ ^* ?( e5 t5 D( o1 X) r$ }$ k
        UF_VEC2_copy(vec_src,vec_dst);' m( s/ L  I4 y2 r6 Z7 [
        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]);
7 i% n/ _' P2 T  W* f8 e        lw->WriteLine(msg);9 [/ |$ s, l- S) j. a- h9 [0 L) R+ J
- Z7 H0 {+ S' s$ U# c7 M7 l
          j1 A, ]0 O+ u$ R+ ]3 J
                /* 5 k7 g+ {6 k9 Z( S
        ======================
1 j0 a9 b3 p+ W6 y, N* y        7 UF_VEC2_cross : 向量向量积* L0 _8 ^3 D/ d. |* p! F5 `8 z
        cross_product = vec1 x vec2$ w$ {* U# X( f, V
        ======================8 F2 V' t# H3 a+ P2 E) o
        */
  ~! u3 @# ?" G: n, o8 P* v- z( c! l; u! Z2 J( s/ y- Z3 h

& t7 _# ]4 @( m% k        UF_VEC2_cross(vec1,vec2,&cross_product);. H. J& i: W! _4 R0 V! V  s
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
. m- k* J9 \; E! ?" S        lw->WriteLine(msg);8 o2 x1 |( e& V/ |7 t* L

) |. t* k( Y5 j) Y9 b! `: J: y
# V  S, B. o7 h0 F: p                /*
6 ^& M1 L' a# Z7 Q' E( s        ======================
5 [4 u* |0 ~& R. W5 z        8 UF_VEC2_dot : 向量数量积
4 E1 |! i( K: B$ R" }        cross_product = vec1 . vec2
# M4 D  ~, ~! p        ======================
! f) F  v% I) H; y0 b" I! |        */
+ U! j* s; H8 T) L9 s; W1 F( P. A. d' Z7 z- g5 C) T, ]5 t

  K* D9 X/ y; B# `1 y        UF_VEC2_dot(vec1,vec2,&cross_product);" l) Q" z- ]6 a  F8 d' q1 n
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);, ]7 U: v3 h! I. N& v
        lw->WriteLine(msg);
: g6 U! X0 b7 Y( Z& e$ G( U" v9 V9 L& e* f, Y: O
. ^- Z8 B, f2 M' p% W* P" w1 h
       
. }, p# Y3 \& Q$ ^5 _, I                /* 8 k' k- x# C$ g6 a1 ?6 Q
        ======================8 a4 U, A" Y) C
        9 UF_VEC2_distance : 两点距离
' P% x0 }9 o% S7 _$ Y        (distance = ||pnt1 - pnt2||)
( [5 p0 \' z1 i) B& q* H6 C9 R* H9 Q4 A        ======================9 q5 ^* i+ ~% Y  z5 j4 v) M( \
        */
% Z3 p: ]3 u% b, T: w1 U/ ?2 I0 H4 o( e

, Q# c+ J/ V! N# o& X        UF_VEC2_distance(vec1,vec2,&distance);5 u/ s, V2 r; o' K5 x
        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
$ z6 V6 r( h: I3 I$ C6 D        lw->WriteLine(msg);: j9 A: u1 v" k% r& X2 }! C( `

! u/ |6 \! \+ Z9 j6 X# g        /*
1 h) u2 b7 o9 ^, G$ \        ======================" d# L0 C+ N; K7 X7 y6 p2 {
        10 UF_VEC2_is_XX : 判断矢量关系
( J2 }  E% z5 U& W3 S( F  |# ?$ {                0 = false% K2 J, B1 c" z! H
            1 = true
- x( c8 q4 R- \* |6 b: }        ======================
4 e2 ?2 D7 y& B& S: F; Y7 M        */
4 C5 }5 f1 P+ [1 I
* d* t$ r0 ^9 H1 i- v) U
4 B- }$ p! \2 y' W        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等
5 m9 \" D+ ~* p: A/ Z' H' y        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行
- ~6 ^8 M- p* S6 K0 x" Z        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直, K& ^! P* @( V% D0 ^0 C
        UF_VEC2_is_zero(vec1,tol,&isZero);//为0
( j  L0 q/ _+ Z# e" A) K: F5 ^0 z% I+ m% h$ q" z  |! d
        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);
4 C: H' `) f2 u* T: h        lw->WriteLine(msg);
) i+ U# a! h! B- w' ]$ S
! F1 }! Y" ~# q- `9 L2 m+ F' ~1 b9 D1 }        /* " V9 g" w) e! f' \; f2 H
        ======================8 }: m5 v! X0 }# B
        11 UF_VEC2_linear_comb : 线形组合) o" F9 E6 E/ L& L) H* c3 m' @
                vec_comb = (scale vec1) + (scale2 vec2)4 E; R. W, s+ H* o; O% [  [  f
        ======================
8 p) H6 ?( c/ F% V8 W# Y2 P/ |        */6 ]2 S  o9 l: O3 o

  k" d1 ~# j+ \$ t5 x        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
5 U/ o$ j& d+ l  V/ i- R$ G# U
0 m6 i6 z7 Q# Q" h        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]);
% }5 s) U$ A9 H7 ]: W3 g, m        lw->WriteLine(msg);8 @: ]# o# E1 c
7 I9 `1 V9 c" F. X! Z: M' v3 T$ \
                /* # I( c! f) d$ w6 u- ]9 g
        ======================
5 f. H2 B# f4 I0 e        12 UF_VEC2_mag : 向量模
- S( O1 a6 B& R- q                magnitude = ||vec||
& |4 a+ a9 N5 O& V' c; L( v        ======================
, K+ E2 ^$ \( R( v9 ^        */
, g' B: I4 V3 \1 ~1 G) o
% e1 w8 A: B7 E' k) U3 O/ E        UF_VEC2_mag(vec1,&magnitude);5 S# N) B+ ]! _, k, W% s! Q
/ F$ e7 b0 M8 g8 L* R; W( ]
        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);) V2 w4 u; c7 M
        lw->WriteLine(msg);! c$ e; S, I, E2 k- t1 m$ Y

0 o& q4 b- j* Y+ n! H( A" S                        /* $ S7 i! h7 `5 H4 ]/ k. o
        ======================9 M4 G  {3 `, H0 g5 Z- w* o) g3 E
        13 UF_VEC2_midpt : 求中点
" J1 v) t/ K' Q" D5 s3 w# e                mid_pnt = (0.5 pnt1) + (0.5 pnt2)2 q  Y2 I8 d* A2 z9 d
        ======================6 T7 L* t4 s* }  R
        */7 P* }) t+ k, z% ^) e" X
. ~- d" O" G/ j
        UF_VEC2_midpt(vec1,vec2,mid_pnt);$ j- q6 X5 E7 Q' K' {

1 z; d& S8 n$ 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]);
; \8 w) R, \: h* j$ L5 ^) S( g        lw->WriteLine(msg);) d9 L# P* K& V- Q( ?: l7 _
$ r6 b; b) t6 ]
        /* . t2 g8 X' a+ r; d9 c: E: g
        ======================
6 B8 D' w0 n- K$ |, M        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
% ~( }/ `( g- F/ E       
" f7 l! q) Z/ }4 C        ======================3 e& Q* k# t9 O
        */+ x- m( `  f' c! h

5 o& N' b1 ?$ B) m) o9 ^  l: m- B9 u+ o        UF_VEC2_negate(vec1,neg_vec);1 ^5 M+ a+ E( M, W
        UF_VEC2_rotate(vec1,2,vec_comb);: D6 i% a$ e- {2 g1 Z4 v( M5 P
        UF_VEC2_scale(scale,vec1,scale_vec);, i. r" z0 {# i" H) N# }. a* l
        UF_VEC2_sub(vec1,vec2,sub_vec);1 E& [& O; I- K& @( U
        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);7 g! c0 F# p5 L/ T
" k" B& C! n2 ^
        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],
* n# W; R! }9 w- n" `) a  q. [  x0 a; 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]);8 Q$ q4 Y8 {7 I2 J+ S, }. V- Q# A
        lw->WriteLine(msg);; p, ~9 c  Z; |8 D* K

5 j0 S) d) S# w, c/ {        1 U9 p* S* \0 ~* j$ p) y
}
& @( k! `; Q- C+ m1 f
( c  z3 Y  L/ \4 i4 M
& Z$ r. h3 V0 N3 W$ J' r6 x
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了