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

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

admin 楼主

2014-7-29 12:01:13

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

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

x
UG的二次开发中,通常需要使用向量来进行判断,此处给出常用的向量使用教程。以二维向量为例,三维以此类推。# x) a3 m  {7 T. y0 U
源代码如下!1 U$ K( X. {% j& i; G. S. ]

( @# ^3 g$ ]% \( G8 l
- Z" q/ m) i4 S, N- t

  1. # h% D- J; d% [- ]$ B
复制代码
/ a8 ^( s: f  U& d; w* A# o2 F
. ~; e% |; z, S. l4 I" E
char msg[256];
7 V' M% R1 e; }  n. E( O$ K7 gconst double vec1[2]={0.2,3.4};
& D- J8 J; }9 D* r2 n8 n. i8 ~2 n+ kconst double vec2[2]={1.5,4.5};
6 i. e: ^6 W+ Qdouble scale = 1.5;* y4 G# k  ]5 [/ f
double scale1 = 1.3;
4 R! Y1 }# H- Qdouble scale2 = -1.1;
. r, y6 ]8 n6 B+ ]$ w. cdouble sumVec[2],vec_comb[2],vec_perp[2];
$ d/ g; G  N( ?: ~double oscale1,oscale2;
; A# b$ y. L1 Mdouble tol = 0.0254;' `0 }0 `2 B9 T4 ~& s
const double vec_src[2]={1,2};1 P  M( S( c& v/ j% w* l
double vec_dst[2],cross_product,distance,magnitude,mid_pnt[2];. [( g4 J. f; M# q* S
double unit_vec[2],scale_vec[2],sub_vec[2],neg_vec[2];
" O: ?; U# L/ K5 Xint isEqual,isParallel,isPerpen,isZero;
/ W4 [8 k" d5 g- c; K2 ]       
% W; Q) v* ~6 s+ F7 Hdouble parameter = 0.5 ;( J5 M2 a2 \0 @3 X) L4 x3 D
double pnt1[2] = {0,0};5 }! W; _- O7 j% ]0 [! z( o" F8 w
double pnt2[2] = {2,5};9 M4 @: L- X- d8 B* i' d/ `+ s- Q
double pnt_on_seg;
# u3 s* h1 K/ q' n3 t8 m
1 t8 J7 J1 |9 w1 F6 ]! @2 K# m* r, T+ H0 V; i
//------------------------------------------------------------------------------9 M3 s# i$ m7 V. T* P5 f
// Do something
; T* s, L; Y( q; N4 n8 ^3 Q- J! R$ |1 ]//------------------------------------------------------------------------------5 k& k: ?# G6 s: {
4 q8 v7 U* n$ ~6 J7 O

& N8 X, L4 S$ ivoid ufvecTest::do_it()
6 w+ A& C' O" O$ S, k{' E6 }* L5 o8 {

3 `2 F2 m2 f% l# B6 S# C        // TODO: add your code here
7 l5 W# ^, q3 v8 D5 V. ~4 D: z7 X        ) Z6 Z3 i0 O: ~9 b/ ^/ u9 {
        9 n8 O. e' r: }' g3 S
        /* $ K" b) B, W" f6 F; y, c* T1 A. J
        ======================
* E! p4 O, j  J3 U) r        1 UF_VEC2_add : 两个向量相加
1 K% O  L8 K1 u        vec1 + vec2 = sumVec
" l: A8 ]+ V9 O* G( K0 z        ======================
* ?+ u5 K8 S5 j        */
( H* ]3 g  ]: d# U, u+ b7 [. R2 V! ~        lw->Open();
9 V6 B! {" i. m0 _        UF_VEC2_add(vec1,vec2,sumVec);$ G( ~5 u: z, f8 L
        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]);
: W& x, G0 t0 n        lw->WriteLine(msg);0 u7 a* }7 d2 Z6 |( j0 L8 }
1 P1 D$ s# [0 E% k4 j0 a0 B
        /* " b1 l" S" n& b* t
        ======================( Y( K# @  B: e. L; u3 o
        2 UF_VEC2_affine_comb : 仿射变换
1 y0 r, j; y) H0 p: I& l. F        vec_comb = vec1 + scale * vec2;
0 _3 `; f' W) D1 ]0 e! \        ======================
9 T; p/ ]" h: N5 l8 b        */
# k' V8 q9 f; {5 X" j/ u$ R. Z! `
        UF_VEC2_affine_comb(vec1,scale,vec2,vec_comb);& G! w7 w4 V( [! `% m- x
        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]);
, v: G7 O5 R3 l) q+ _5 Q- p% n        lw->WriteLine(msg);4 H7 y8 b& v: D: G, Q6 [

+ V' ?% j& o$ ?        /* ; A# X+ Y# i7 Z. _
        ======================: A' z$ T* z1 ]: g, {
        3 UF_VEC2_ask_perpendicular : 求出垂直的向量 3 N" f0 D$ q+ y  t
        vec1.vec_perp = 0
/ h4 X. k4 }0 _) D7 u4 R        ======================1 [8 t. x* @7 |& u# j$ H  V
        */0 i$ `9 A! U" a/ {$ a0 {- R# t
- M) `5 j3 ^- b9 [/ X
        UF_VEC2_ask_perpendicular(vec1,vec_perp);% Q' h3 T6 M: w, A2 m- n( Z7 w3 S
        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec_perp{%f,%f}= 0",vec1[0],vec1[1],vec_perp[0],vec_perp[1]);" n2 j- L0 s6 m. Y0 X7 i) Q& S
        lw->WriteLine(msg);; j/ V- k9 a/ k. O& [. C& s( N

' a5 C9 G  K( I        /*
$ o* |1 a% O3 ~9 D( s1 ]        ======================& W0 u" m( O1 t1 F2 a/ U# r9 X
        4 UF_VEC2_components : 求出垂直的向量 ; A0 A' O6 Q# g( Q0 A
        vec_comb = scale1 vec1 + scale2  vec2
' O% B4 s' Q2 O8 Y: B        返回: 0 可计算 1 平行
+ n1 f+ w) y( _# G3 D/ L        ======================
* S9 u9 D6 _, G* }  n        */2 [7 c7 }4 V3 |( p; K, G5 R

  c8 s# \. ?3 ^$ d. K" {        int result  = UF_VEC2_components(vec1,vec2,vec_comb,tol,&oscale1,&oscale2);8 f- r) ^2 G: S$ _, s+ @9 Q8 x
        sprintf_s(msg,sizeof(msg),"oscale1 = %f,oscale2 = %f, result = %d ",oscale1,oscale2,result);1 X+ q' g9 p5 i, m" ]! i9 y2 W5 N
        lw->WriteLine(msg);4 w; I, f+ I; w' @* t
" |" |3 u# Q( h
        /* $ M* Y) V! _( b8 u% `
        ======================
0 D2 b+ i: Y. w% U% W# b        5 UF_VEC2_convex_comb : 计算点在直线上的位置; v/ R6 v! R- ^4 p
        pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
, ]& f4 t% O  j" `' g' }        ======================
$ Y$ ~/ G3 m9 v        */
" M- R5 g% j( k5 Z6 N& j3 T2 `8 O9 A  w$ i! F( |+ X: \

7 O% R5 S: p( ~% y5 z        UF_VEC2_convex_comb(parameter,pnt1,pnt2,&pnt_on_seg);1 D; \" N8 _3 ?; w7 w, z! {
        sprintf_s(msg,sizeof(msg),"pnt_on_seg = %f",pnt_on_seg);0 Z& g' V4 H+ _) s4 S6 `( I
        lw->WriteLine(msg);+ @5 j2 |" p7 Z" R$ f

# ^8 ~  O+ a9 g6 B                /* 6 b; s; E! z  q5 U. x- ?
        ======================
: X2 k% k0 v7 M' o        6 UF_VEC2_copy : 向量拷贝
6 R- z* ?. ^$ W2 N; |: T        vector (vec_dst = vec_src).- W( H, T# }; M
        ======================2 f5 e( E0 i; _/ f% o1 z# w
        */  E1 P8 b  {1 o# X

! h7 u6 C1 {! T1 [0 d( u) @  s( }. W. p" `9 ]: Y
        UF_VEC2_copy(vec_src,vec_dst);
2 B8 h' ~: y0 v5 m+ X        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]);
5 B; s5 k) M* N% L        lw->WriteLine(msg);
, z9 e" H# Q9 e* i- j* W% v2 r% g) E) F, l( N! V' x
       
+ O; e0 `3 z) k0 y' |) D2 d                /* 9 W% h3 l; x7 Q# G! B6 [3 J9 [
        ======================
2 ]% O  c% t* U* F; F        7 UF_VEC2_cross : 向量向量积
$ D9 l2 i9 q6 P! ?% u/ J+ n        cross_product = vec1 x vec2
4 Q" J* p1 Y4 x3 z, F# g        ======================8 r/ w% C. r; e3 i4 b: n2 N3 @' T
        */2 q) r. F5 V3 u: T( \
4 u% ^1 ~4 @2 ?' o- B3 f
. @: {) S5 a" _2 U: h) h
        UF_VEC2_cross(vec1,vec2,&cross_product);
- K# ]! E, I6 Q! Z        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} X vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);  Q5 Z7 W/ R: z9 L/ {+ F$ R+ g
        lw->WriteLine(msg);: S8 V+ A  a- ]# Z2 G

5 X1 K8 ^# v$ q! H$ l; }! m( Q% N& [
                /* : }' H; V3 [0 \0 N# H& ~& l
        ======================; }6 a) N8 t  s8 f; B+ d7 ]
        8 UF_VEC2_dot : 向量数量积8 c* H% x; Q) |( f( p" l
        cross_product = vec1 . vec2% a4 x2 i0 f% F3 X0 D2 b+ v
        ======================  h/ V( a! }, A% t
        */
5 D3 p/ h* z0 z# a' c0 d9 x
- {: b3 G$ A. q, V; {3 ^( ?  j
5 J4 a9 s* h5 z1 ?5 P5 |4 E7 z        UF_VEC2_dot(vec1,vec2,&cross_product);
3 J$ J) q! X4 f4 n        sprintf_s(msg,sizeof(msg),"vec1{%f,%f} . vec2{%f,%f}= %f",vec1[0],vec1[1],vec2[0],vec2[1],cross_product);
/ W. W0 a. B' g1 z# p0 F  k% [" }        lw->WriteLine(msg);  g" p* ?* ^" D& [+ Q

; d: e9 i3 m; t% t5 U; F$ M
( M; H& `6 s. f7 n0 {8 ]( n  e        ; [6 C/ k5 W. _- i1 j2 a
                /* * d( _+ i3 o# ^  h2 M" Y$ Z. h
        ======================" B( }; [5 |8 Z- X
        9 UF_VEC2_distance : 两点距离8 i5 v. u& R5 W& w0 V# D; b+ _
        (distance = ||pnt1 - pnt2||)
% p8 P; R$ I8 |        ======================  Z% C; A' K( I" }7 U
        */$ o8 ~  D2 O! p6 A
6 v  n; S. [/ q* v; J

0 H5 t, H1 o1 _. j4 M! f" }) h: c        UF_VEC2_distance(vec1,vec2,&distance);
* h/ k' j/ ?8 Q* ], |( f' M8 B# k        sprintf_s(msg,sizeof(msg),"||vec1{%f,%f} - vec2{%f,%f}||= %f",vec1[0],vec1[1],vec2[0],vec2[1],distance);
8 }1 q) R/ b4 e, y: U        lw->WriteLine(msg);3 c( U$ X( J5 m

, L- M3 u- k8 O% Z+ v( }1 r' ^        /*
( h( `  |5 r- ^; K% o  P        ======================, o* E! J8 t1 Q% D: ?! _
        10 UF_VEC2_is_XX : 判断矢量关系7 Q! q& a6 Z0 ~6 P
                0 = false7 C4 L. U) V" Q0 Z" p: c  I
            1 = true6 D) L5 n3 r0 r) c9 u8 J
        ======================+ u9 k/ Z- }$ y6 p7 Z
        */8 ]* I* H! y  g, S( \6 Q
& c1 o3 ]) o: F. D9 H. h

% v: H! G% y, c1 {' @7 J# s        UF_VEC2_is_equal(vec1,vec2,tol,&isEqual); //相等( }+ f  m7 B* }. Y
        UF_VEC2_is_parallel(vec1,vec2,tol,&isParallel); //平行
! r# c8 l4 k4 K. s) C0 i7 j1 Q/ \        UF_VEC2_is_perpendicular(vec1,vec2,tol,&isPerpen);//垂直
- I: I/ Q7 i% z& D5 r, ]        UF_VEC2_is_zero(vec1,tol,&isZero);//为0* P- \- `  l6 C# |' Z2 r9 t" `: Q

' O# P* X/ w1 z6 O8 n. y        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);6 y+ C: y5 K9 _, L( z1 X6 o
        lw->WriteLine(msg);
. B6 D) R- `! h1 M7 b8 t* z* H+ {8 T+ J9 t& L6 L' S) x6 |
        /*
; s7 ]* c) N& @; N        ======================2 R" e% d; C+ n
        11 UF_VEC2_linear_comb : 线形组合, @2 o$ E( ?3 F: {- f) o8 F0 H
                vec_comb = (scale vec1) + (scale2 vec2): z! W1 \) k  |' ?* r- R
        ======================7 B; `: F8 T4 G; O1 v+ a
        */+ u7 }0 ^+ R* w) k9 D

) n4 b0 {- ^. i# S        UF_VEC2_linear_comb(scale1,vec1,scale2,vec2,vec_comb);
5 ^/ |- T  a* y  |# g4 B9 o9 N6 n) z6 i5 m, m! l. `4 X. 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]);
; C, J& i* j# \6 Q) @4 \( \* F+ e        lw->WriteLine(msg);
; j4 D5 A" c; c9 B3 N
1 G9 V6 _, E  L/ T& w; T                /*
: X; Z  y9 a; g' S- r+ K        ======================
6 l! J: L1 R7 H& W0 \        12 UF_VEC2_mag : 向量模
- v! a* V+ c4 \                magnitude = ||vec||( o! O. j5 T6 d3 E' q4 Y
        ======================
5 j, t1 S+ V4 I3 i* [        */3 N. z5 h: ~& F2 p: u* m

  k3 J- R. |2 I        UF_VEC2_mag(vec1,&magnitude);
3 ]& e$ O6 s/ k
- |, e% S6 o9 Y& n' X        sprintf_s(msg,sizeof(msg),"UF_VEC2_mag = ||{%f,%f}|| = %f",vec1[0],vec1[1],magnitude);
2 O! f: j) @# f4 o4 n& K8 H        lw->WriteLine(msg);
- L) `+ Q7 v; J- d( z
- g" n6 [8 q# |$ O                        /*
; h$ e( p* p$ V/ r, Q7 z/ q        ======================0 \& _! \% s) @/ b7 _
        13 UF_VEC2_midpt : 求中点
9 {; b; a/ p3 O/ `$ W7 N                mid_pnt = (0.5 pnt1) + (0.5 pnt2)
* w; b: N2 R$ f  [2 g! w0 O        ======================4 e& J+ \% v' }9 e
        */) g2 l! x6 h& v
& n% t9 o0 }3 {/ a
        UF_VEC2_midpt(vec1,vec2,mid_pnt);4 L+ ]; @9 q- \0 j0 e0 g3 H

6 L9 Q( M# U) K8 r$ U/ G4 g# V* V        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]);
& @3 y- M0 x: H, V) L) K        lw->WriteLine(msg);
4 |7 V% n3 p; ?, |6 l# C& i$ B9 Q, G( X0 W
        /*
$ z; R; V7 H- W% i        ======================. b. T0 K+ V0 x4 g4 @5 g! Y
        14 UF_VEC2_XXX : 向量的其他操作,反向,求差,单位划
# N6 ]  B& n/ D; |6 p       
$ T* G4 }# o* B! l) A  D; n  M6 Y- I        ======================
+ d0 h7 s5 y1 H! y7 `/ ]) V        */
4 r( ~0 i4 ^9 `1 R* `* s- I8 m0 k/ ~8 Q( D+ [$ s8 R
        UF_VEC2_negate(vec1,neg_vec);
5 C, B8 F& V! |5 s        UF_VEC2_rotate(vec1,2,vec_comb);
; b& a- F7 a* D1 U: \0 G        UF_VEC2_scale(scale,vec1,scale_vec);3 l' N; T$ T# y. z0 v" j0 Y
        UF_VEC2_sub(vec1,vec2,sub_vec);, `9 ]+ k* \! t& ~; z- c3 x
        UF_VEC2_unitize(vec1,tol,&magnitude,unit_vec);
# `, T/ g5 s( v) F6 B/ k9 J. y3 Y) \
        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],# ^: l* O6 i& Q; [. z6 [- S
                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]);$ J% s: [( A& j
        lw->WriteLine(msg);
4 E3 U' x5 a* [. l3 K
) o9 O: S0 e6 v3 v; X0 |2 Z        * H; c/ @: I+ c! f* y2 B
}
' G) D1 ~/ [& \$ e1 q
# ~7 G# {/ n4 r6 e6 u9 v" A1 G6 [$ l
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了