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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。) Y) e3 k6 [+ I$ t6 q2 W- \6 S
源代码如下!* p: j. f* u- P7 d

* H! e' m, F, j- G' d* ~4 _+ i  ?) h2 L3 o! \6 Z5 j2 @
  1. : Z# [, U' [: q1 q1 Q2 |% x7 s" |# ?
复制代码
( f. O3 ?5 ]6 B5 o* S

# W9 L1 z  F+ c/ W+ R# }8 h: Mchar msg[256];
. j! R( t' V! Gconst double vec1[2]={0.2,3.4};/ W5 i$ ~9 \8 ~8 X" K: {- w
const double vec2[2]={1.5,4.5};( R5 d+ ~9 Q" Q2 C
double scale = 1.5;& G: @; `% S: e) J
double scale1 = 1.3;; F. t) p! k% R3 y  q3 G) \" M
double scale2 = -1.1;) w% S1 F( x' [
double sumVec[2],vec_comb[2],vec_perp[2];
* ?+ s2 r) N$ G) b* ]5 `; [8 cdouble oscale1,oscale2;4 ?; I4 _/ d) x
double tol = 0.0254;/ ^6 l/ ^- l  H: f# L1 |
const double vec_src[2]={1,2};: ^8 k8 B) y1 S4 b* s& [
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];
* z: @9 j) @3 F* j1 M& `6 ]double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];
! w# ~' [5 B2 b2 W& g$ gint isEqual,isParallel,isPerpen,isZero;) ?% s7 I8 T  G; A" I% I1 N( W
        - e& ^9 G9 l/ m+ H
double parameter = 0.5 ;# o6 z* h) e, _' ?
double pnt1[2] = {0,0};
  I. Z+ e) R. ddouble pnt2[2] = {2,5};
  f( O: f  o2 Q9 G, r- P2 ^6 Z% Rdouble pnt_on_seg;
$ j. y/ J2 h& R7 m- O" r; I, C* i
! m% ?2 z1 _' C+ G6 W- N
5 q1 c: @7 g, R: M6 ?' g: h3 q//------------------------------------------------------------------------------
3 m5 L$ F5 @+ q1 J, g// Do something
/ w% n2 ^. x" b" U//------------------------------------------------------------------------------
8 a& D! o6 [0 ^. c8 S1 P1 v* H) y6 m# O7 B+ ?$ R+ x
$ u3 Q. `8 v: z' H1 I+ n/ U. b& d
void ufvecTest::do_it()
$ \9 w4 K$ n9 x; h/ Y7 K0 A. H{
2 g4 `! u1 S* `2 e& ^0 o6 d8 V2 w1 N4 H
        // TODO: add your code here
: ?! k) @. N- @1 F4 W       
, m- e- {8 T3 J        5 w! D9 C" p: N- a8 e
        /*
; i! p+ w# k+ a6 X) G* p7 P, ?% y/ K        ======================1 |( B0 X5 T3 Q9 @% d4 @. h
        1 UF_VEC2_add : 两个向量相加 : m( M' Q" V  s& ~8 t9 P
        vec1 + vec2 = sumVec7 _: ]2 a6 L- c8 l3 R! Q5 _7 N" Q
        ======================
! [, e) M' V1 y4 y; h        */) K- k) V" D# ?$ u9 R% @. c/ H
        lw->Open();( Q. x8 B8 ~0 i9 j& M; B
        UF_VEC2_add(vec1,vec2,sumVec);
6 _6 Y+ h5 ~8 y/ G* _# 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]);1 u$ y- c/ b; h5 v2 B  H( z, Z
        lw->WriteLine(msg);
1 f8 ~7 U' D* G9 K. G- H, {
. V' h2 o6 d' L0 {: f        /*
' H# [8 F9 Q0 q- l- m2 O; L        ======================' [9 e5 Z  M$ O! z: j
        2 UF_VEC2_affine_comb : 仿射变换- ]- U) I3 k6 B! f( u
        vec_comb = vec1 + scale * vec2;  H+ q( O+ ~7 P$ f! m% z- [0 p) e
        ======================
5 U( V& S% H- |+ o5 I) z1 ^; M        */4 ~5 V8 h2 e; P/ S- w9 t; C; ]7 k
8 S+ j/ Z! Z( l4 f2 A: ^4 H
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);' P) m7 l7 l! I
        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]);
* i3 h3 ]' ]9 |! @/ o+ r        lw->WriteLine(msg);
% y1 ^" L6 b! k- P$ T: F4 |3 e. \% {5 k& s
        /*
2 D+ ?9 }7 T/ I1 K' R% F5 G        ======================$ d, Q* ~5 O' z) J2 F" U
        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 ; P* _5 ~' N5 F
        vec1.vec_perp = 0& E+ n* i; p' |; A3 O
        ======================! I8 S" h0 D: m; H
        */# ?& @/ p+ T: v) j& X( D* K  L
5 o( @3 y, W5 t1 o7 D' I
        UF_VEC2_ask_perpendicular(vec1,vec_perp);/ @; X! S! L+ r% ?+ i/ Q
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);
/ c, {( U: R  m        lw->WriteLine(msg);6 M9 i  M1 C1 z6 _5 @" P' [4 _

5 I: |! H7 Q& d( N        /*
7 Y: y6 d. k( c( x0 |        ======================, h7 j, G9 A& Q0 j
        4 UF_VEC2_components : 求出垂直的向量
/ g+ j3 F+ H: I( O5 ^: K        vec_comb = scale1 vec1 + scale2  vec2
; \  w* ^& |+ U! _- B$ x+ {        返回: 0 可计算 1 平行/ B0 j3 F5 `. O( A* k# y
        ======================! I2 o+ B' h" e# q
        */+ l' s5 @3 q. E5 x2 Q
6 P1 g" \  G& j' m# o( o* G" M
        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);
% t! w2 \" s- A0 N" |% j        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);
$ J( y# b& O8 c3 ]        lw->WriteLine(msg);. j$ b) A0 D0 l2 [/ {( O1 w
. W! }# ]6 d, a" d  U' X
        /*
+ e, q" l( L, f, y5 P) ^$ X4 H$ ]) K        ======================
5 a7 D0 k, Z- O. ^; A+ R9 g        5 UF_VEC2_convex_comb : 计算点在直线上的位置2 L. h8 N  k" Q% ~2 m. o
        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
  Z& e8 n4 G. J8 C" {' ^& `- V        ======================% M1 s) h( X, Z/ C% T0 |
        */
$ c. ?5 H2 O, E$ m6 M0 }) z! U. l1 k; y' h

3 Y' o. q" a; Y1 J0 E        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);
& s$ N+ N) z" ]/ ?2 x/ S8 q        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);
2 P5 s4 s2 f2 T3 V" {( C        lw->WriteLine(msg);
! }8 U7 U2 N! w, u" A; I$ w) D' T& k9 p+ Z' ]
                /*
2 r6 M, i# h: i1 M4 K1 g- ~        ======================
2 e+ J& g4 ~9 Q' X# [/ ?        6 UF_VEC2_copy : 向量拷贝
3 n! B. }+ ?  [6 |* K+ {9 M+ _7 @& u        vector (vec_dst = vec_src).
* \  h7 E4 _5 e; p! P! I3 Y4 L3 w        ======================( @) o, x3 b. @" f* P9 \
        */
9 c: Q* g6 Z* y4 y$ H# ^1 c/ T: z: v' D# O7 g* \* X" @
% z% W: [5 }8 q) g
        UF_VEC2_copy(vec_src,vec_dst);
* T6 X: s+ m( U. j' }2 a        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]);
) D: D1 m# w# A8 w        lw->WriteLine(msg);
1 S+ W- k; l; n2 d" O0 }: i0 t8 o' V; J
        & D* }4 m5 S8 B/ A* q$ W
                /* * f1 A: r; Q8 q; b# |0 I
        ======================
* _- a0 S5 t; o! W* Y; a* J, N        7 UF_VEC2_cross : 向量向量积
7 c5 O" f5 P) [( ~! m8 f' Q9 w        cross_product = vec1 x vec2( e3 P5 j4 h9 F2 F
        ======================
& }: @4 |* c9 ^  T        */
6 C, g) k: p2 W8 K4 L
4 a/ t1 |# ^- K3 c( q% O
) j* m% W5 q0 A1 {) Y% z2 _        UF_VEC2_cross(vec1,vec2,&cross_product);% o3 z3 e" f2 q
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
; K/ _# \1 K+ J) ~6 {8 {! m1 l        lw->WriteLine(msg);
2 E# m: g* B, f+ x' L+ q6 R, x8 s, `/ B
/ U, a) m- j2 J
                /* + h4 k) u1 D- }* x
        ======================, F3 O/ I" S5 [, L
        8 UF_VEC2_dot : 向量数量积
4 q9 P5 H% n2 x, _' f; P; s        cross_product = vec1 . vec2
+ n8 i6 g* ]; T: x+ ], ]0 T" g        ======================8 g) n4 V  |2 O7 P+ G* i
        */0 m. A# U6 L) f* j8 J( H

. e, ~! l' |- P6 L3 u8 O3 i% M( D% G# c
        UF_VEC2_dot(vec1,vec2,&cross_product);
2 j* q! [% ~) G        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);1 h8 s  K1 q) H9 i' o
        lw->WriteLine(msg);
8 R4 ~- x, K; `# ^* d
' |0 L; I; k" _# V: l) D
1 T) Y% Z/ S3 U2 H3 G# H" B        9 z' q. J+ R# e- @3 S
                /*
, n; F9 a( Q8 g& E3 Y: V/ C4 o        ======================% q% J8 m4 j. E7 P
        9 UF_VEC2_distance : 两点距离0 b" ^7 f) K( G# `1 f
        (distance = ||pnt1 - pnt2||)
% k  }2 S' b8 b        ======================% ]% w2 E  K# i& `5 _/ Y0 F5 ?0 W
        */
* K2 `% H0 g) I9 W, Q
+ V# ^" P) `& l2 a% B6 D/ I
0 q, g) J  m, C8 D7 \        UF_VEC2_distance(vec1,vec2,&distance);4 j0 N) a( J4 a& y, F
        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
  n0 K& {8 u+ w+ T        lw->WriteLine(msg);" u: p& g/ N! q9 {
+ {8 L5 M+ e. T& D
        /* . R4 w! p5 f% K
        ======================
9 U  C; G) [4 p! p5 h' q* g        10 UF_VEC2_is_XX : 判断矢量关系
0 L- _3 T0 j* R8 x                0 = false
( e* n* t7 `1 x! O6 G            1 = true
8 e" @. N9 }4 \5 l- C        ======================
( |& g& C* f, h6 D' J5 @        */0 Q. f4 }3 @& I4 f
3 k  [' _2 u6 B6 y1 l( ~

! P- E5 f/ X; V9 ~) T        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等& G. G; R* h3 d( j* o$ q7 R
        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行: d3 |& u3 j9 F: _
        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直
: @2 Z( P8 ?4 ]  P4 I        UF_VEC2_is_zero(vec1,tol,&isZero);//为0
6 t) i! v) \3 ]* @& \" q' `8 P" X8 Q" s  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);; X5 A) X( Q. Z  K0 s+ ~
        lw->WriteLine(msg);% e+ }" m2 @9 y

- l3 y# ^" f+ q, T& B* \        /*
: z$ m' ]( R& Q% p; _        ======================
! T6 v# {' \& X" j        11 UF_VEC2_linear_comb : 线形组合
2 ]6 F" }, g" B0 L" [* J                vec_comb = (scale vec1) + (scale2 vec2)# Y/ @, E8 ^  k1 K1 C; O
        ======================5 G4 H5 C3 ]9 {9 {8 y* {% E4 x; O; I- b
        */
; e& Y" N1 h4 L
1 s+ s7 F, D" \: R/ k1 \        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
! x, m5 E0 P% f: T$ ~6 W' i3 a: r! Q+ H( _; p* N
        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]);
" l# ]( R0 }* D" n; Q        lw->WriteLine(msg);' X1 }( Z. Z4 N; _) n9 ?
9 A1 j3 |( p: Q
                /*
, D0 D& |% K; `# P) A3 g: ]: T' G/ h        ======================
" V5 ?4 X7 H( J% B' U. K        12 UF_VEC2_mag : 向量模
! U" p7 o* Y5 c: R5 i                magnitude = ||vec||
* |6 P& M! ?+ a! f2 o        ======================
9 P4 \& a3 S; k6 k% F  `8 p- \  ]        */
: B$ X& P, v. ?% A# w6 L$ ^& p4 T% i- X8 N: T" Y
        UF_VEC2_mag(vec1,&magnitude);
8 Y- i. d" e; d: Y2 ~- c! w
( y/ F) X2 ~' ^; \; S  I, y        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);
/ w( r# A7 z. s        lw->WriteLine(msg);3 n' M0 y) B0 U) `* `9 x
1 J( D6 `: D% z4 N. W5 g9 w
                        /*   \+ l% U: L6 v2 V5 n
        ======================# k+ t7 k, N  p2 B' j
        13 UF_VEC2_midpt : 求中点 * ~: o, B% G- O/ z1 H, ?  l
                mid_pnt = (0.5 pnt1) + (0.5 pnt2)
7 g1 r& h3 e  I' l        ======================
! J& ^0 R+ L0 s        */
6 v4 L) W  g! w  w1 m9 `, W% T: P2 w4 {: ?9 C
        UF_VEC2_midpt(vec1,vec2,mid_pnt);
+ P5 C# ?2 }+ r) e: ]3 `4 n$ H* u& U3 ]! ^  t" y) d% S
        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]);
0 |: K8 P) _4 O( s( W* ^        lw->WriteLine(msg);
: Q4 @* Q9 c- p9 y7 M; E4 z2 _/ z. ^# U4 t4 j
        /*
3 o2 M5 ?& T  W        ======================
, B* H; i/ q$ a4 r5 q        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划$ A+ b7 M: s+ u  p, T4 A$ k
        ( ^% y; m2 W9 Y  R) c2 J
        ======================
) V" c1 J1 h1 l( N5 r' B* h2 T        *// n8 g1 E9 l2 A2 Z

/ q8 I& P" t/ h1 O, v        UF_VEC2_negate(vec1,neg_vec);6 z, y- Y. n5 c1 O6 H
        UF_VEC2_rotate(vec1,2,vec_comb);; W) j- y1 x& g9 x
        UF_VEC2_scale(scale,vec1,scale_vec);! I% n4 B$ x8 r( t! r
        UF_VEC2_sub(vec1,vec2,sub_vec);
! F% _% y8 N1 c1 P% k% o5 h. M, [        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
/ S7 w( F; {" `* e. M, A7 K4 ?! f. i# e: ?  p' Q+ a
        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],
. o/ C/ p# j2 ?, P                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]);; ~; a  a# F8 [# @% S( J- F3 e
        lw->WriteLine(msg);. S3 |. [& O6 H$ A# `

  h% \( P7 l  w0 U2 z        * g2 u4 y9 Y9 m
}& K  h5 ]0 c1 ?# b6 Z1 |
9 ]: v% ?/ K; {9 ]
  x! v- o; d) 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二次开发专题模块培训报名开始啦

    我知道了