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

[资料] 使用UFUN进行UG NX二次开发: 装配设计技巧及步骤

[复制链接]

2014-2-23 10:06:18 4124 1

PLM之家NX 发表于 2014-2-22 13:47:37 |阅读模式

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
3 q/ e, V2 x" j: o' z# W" n( ~
' G% |) f5 i/ h% _! A; H4 A( {, c
! u# c* t) W, `
1、装入部件
& Q7 k: Z/ r8 X5 h通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;5 ^) o; u/ Z+ Y* ?( [

" N- P* S$ N* ]6 Q. m2、创建配合关系8 ^) Q- s3 b, A. X4 K# e
a.通过函数UF_ASSEM_init_mc()初始化约束;
% Q( ?  `- ]* t' K; Yb.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;5 ^0 J% `3 q+ C% ~* p
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。, f8 H/ }. b* W9 t' |
c.通过函数UF_ASSEM_solve_mc()求解约束;
( j  @% {' V/ n; Vd.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;" w6 h9 a- T9 w  V6 H( \4 I
e.通过函数UF_MODL_update更新模型。
. K) H% M% |6 ]: D  q
) p( ^2 R, `# o6 n+ }* A# p9 `
  1. #include <stdio.h>: {+ H9 M" C: l$ v  U
  2. 3 a2 K6 j  K& Q( [7 S4 a
  3. #include <uf.h>! [7 Y  q' W9 ?! i, I* L9 u* y7 h) H4 G
  4. #include <uf_ui.h>- Y4 V- F; m$ N8 _/ n% E
  5. #include <uf_obj.h>
    / V2 ~% B& j5 A1 r' q5 h
  6. #include <uf_disp.h>
    ) x; p. C/ \/ V# B4 K3 F: @& B
  7. #include <uf_modl.h>7 Z- I- k# ^/ f8 C( r7 B
  8. #include <uf_part.h>9 @% f+ P$ {7 ^) K1 ]1 j; T/ O- S
  9. #include <uf_assem.h>
    8 y- w+ C$ |& ?/ f
  10. + b- h# ~& m& Y9 L6 C
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )
    9 f0 }& T) B$ ]; G  c6 O
  12. # B' P; {. j0 u/ H8 L+ r
  13. int report( char *file, int line, char *call, int irc );' s8 q% i6 Q1 o: @, P
  14. void DoAssembly( void );
    6 X% d/ O% J3 V; k0 B

  15. ' p0 v) _5 \  l( l7 ?+ H
  16. int report( char *file, int line, char *call, int irc )
    / |, f: J0 _# A
  17. {
    " {% |' @" m- I1 V
  18.     if ( irc )
    5 b' l2 }/ E8 N! W
  19.     {
    + ^* c6 f9 J+ q" R6 x% X) u% q
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];0 h* m* j4 k  p
  21.         char msg[ 133 ];4 k+ q4 d( W: s8 V& B" C' y
  22.         char fail_message[ 133 ];; z) [/ k# f9 V3 r# p' R, m3 f6 C
  23.         int  len;
    8 p0 [( A7 r0 F8 Q8 o: J3 |
  24. $ c# r. Q% w+ a6 ?* T" z& l% a
  25.         UF_get_fail_message( irc, fail_message );
    8 c# A5 H1 b( }* u6 W& B1 }+ @* L

  26. 6 [/ `1 E% F" u6 g$ [$ E
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );' \( B$ a, s! C# ~2 L
  28. + h& B3 w; `( Y) P! _) d% w0 B5 a
  29.         len = strlen( err_msg );
    4 Z, T6 }  O! A' z1 Z6 c
  30.         len = ( len < 131 ) ? len : 131;" G; C) A' Z6 }+ s5 e
  31.         strncpy ( msg, err_msg, len );
    + \* c5 o; ]. Q% a* \4 y6 K
  32.         msg[ len + 1 ] = '\000';
    / t. o7 `- V) }2 B  w! @. i/ s

  33. ) W; f; _3 h& B6 s6 T4 `
  34.         uc1601( err_msg, TRUE );- X* ^+ d( ^* m- q( N3 c4 r
  35.     }6 Z* |. L% T) G
  36.     return( irc );: {! f) X  }, g+ L! ^
  37. }, i; @! q% ?( E- L5 R
  38. ( |3 o7 I, w7 O% N
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )+ Y, i+ v% f9 D$ r7 J
  40. {; X5 i- {) w$ U2 K
  41.     if ( UF_initialize() ) return;1 ?- O! M% u' x. k5 D
  42.         DoAssembly();
    - H1 K6 M! A5 g1 i. M$ V
  43.         UF_terminate();
    0 {8 z% z  ~& o. k2 w; f
  44. }; _2 z7 q4 k- U6 _6 O

  45. ) I0 B  g1 G: e% k7 ~- [
  46. void DoAssembly( void )  ]! g0 [. k0 A. w& ]
  47. {4 o. _0 `3 s) j
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )" ?! G4 C: X/ P1 |1 f7 p
  49.         {
    0 O( Z. \3 u6 J! `
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );
      P) q: F- W6 P
  51.                 return;3 [+ F$ {" x. G
  52.         }
    / w* v/ j+ O4 w9 `, z

  53. & o- ~. }* n& M3 k7 z' U
  54.         tag_t tagInsCyl        = NULL_TAG;
    # B0 M  i$ `# `! c# F
  55.         tag_t tagInsVBlk= NULL_TAG;
    . X4 p, V/ ?& E8 N$ }
  56.         tag_t tagOccCyl        = NULL_TAG;# a9 B4 `0 W8 J' Y
  57.         tag_t tagOccVBlk= NULL_TAG;
    % w5 r% {7 g- Q3 R0 J
  58.         UF_PART_load_status_t ErrorStatus;
    ( L4 O- D) i6 ]3 q4 f; y

  59. 3 y8 ?1 F0 s. S6 Y
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };5 B  t+ }! s& l# [, S2 ?+ I
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };: C. `% U6 C! Q# m9 n4 S
  62. / R$ h9 A, X/ s% `/ U
  63.         /* 装入部件GB2208_80_Vblock.prt */7 R' b9 o4 q( m
  64.         UF_ASSEM_add_part_to_assembly(. I( g# Y  m- \4 r3 W, u
  65.                 UF_PART_ask_display_part(),) P: D' R8 V8 k; ]& C
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",7 Z8 ?7 M) f4 h
  67.                 NULL,
    + t8 q' [! c. c8 F; F
  68.                 "VBLOCK",
    # K! b6 K2 a& y( n
  69.                 dblzOrigin,4 i# b1 |7 _# z, f
  70.                 dblzCsysMatrix,
    ; R% a3 j+ o( @; Y3 ?
  71.                 -1,! x0 u, Z: {3 Z5 f8 a
  72.                 &tagInsVBlk,7 W( G$ `5 T* K1 S/ D" c
  73.                 &ErrorStatus );. d& z2 f# A6 _: e2 U, E  I
  74.         /* 装入部件Cylinder.prt *// m/ ~  O# e: C! ]  p
  75.         dblzOrigin[ 1 ] = 50;. K2 [, R5 K% c1 Z' K# m
  76.         UF_ASSEM_add_part_to_assembly(* {' E- H* r6 f( P, ^0 u: L
  77.                 UF_PART_ask_display_part(),% O4 d5 y3 |) P) Q
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",5 H/ x; ]- P6 C0 B
  79.                 NULL,
    ! k$ B  r# c/ F/ ^& \1 ?4 v0 ^) j
  80.                 "CYLINDER",
    $ @7 s/ t8 T3 ]! w- I! \
  81.                 dblzOrigin,7 @1 T& Q) j, p9 A  U! E/ H. F
  82.                 dblzCsysMatrix,6 B: \2 `* t1 e- e" ?+ V; I# X) C% Y
  83.                 -1,
      f% V: h( d4 ]3 S3 \1 l0 O& G
  84.                 &tagInsCyl,
    " j6 O+ j# F) E/ P8 P( a, J3 h
  85.                 &ErrorStatus );! X: z) c0 G" Q
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );" m+ Y  F+ a% B" L  }- v
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );: }0 J+ x9 S8 J! f" i9 ~
  88.   k* F, q7 X# M. |( I: o
  89.         /* 创建配合关系 *// K4 |- A- R2 c/ L: y' j8 E/ n
  90.         UF_ASSEM_mating_condition_t McData;0 _- d) m' @2 Z! [  d" d) Q
  91.         tag_t tagObjectFrom                = NULL_TAG;, q; \, O, t, j, v8 W
  92.         tag_t tagObjectTo                = NULL_TAG;/ s; I& i6 \1 ~2 w0 r" H0 v
  93.         tag_t tagPrototypeFrom        = NULL_TAG;1 a, E8 w7 e& b2 T% R, Y, a3 b
  94.         tag_t tagPrototypeTo        = NULL_TAG;
    * r; b$ j1 e: j+ y/ O# q
  95.         4 a. y4 T6 z1 V
  96.         /* 初始化约束*/2 k: j" l; Z+ t, s' H1 Y
  97.         UF_ASSEM_init_mc( &McData );
    " _5 o3 m  ?# O

  98. # I# [* a: t0 y. L4 w* j( {2 W( Z" x
  99.     /* 定义约束,构造配合关系*/
    3 j  Q% X/ w/ W# u
  100.         McData.mated_object = tagInsCyl;6 C+ I4 n7 m/ z$ M' e3 I
  101.         / h* ~- c3 H; T
  102.         McData.num_constraints = 3;
    " Q2 f; K% p( c. t/ b
  103.         McData.name = NULL;' a1 l% p& U4 u+ O+ ?
  104.         McData.user_name = false;
    0 f! d3 }% |; P6 n% `
  105.         McData.override = false;5 @& k; m  b, F% F1 s8 a- _& Y6 ]
  106.         McData.suppressed = false;
    0 }9 O# \6 b; }" M
  107.         McData.implicit = false;( o  g: i; m$ C) g

  108. * _  A. A8 @% f3 j7 s
  109.         tagObjectFrom        = NULL_TAG;
    $ H/ q) h1 g, n/ V0 d
  110.         tagObjectTo                = NULL_TAG;* Q7 ]8 `2 d4 Q* ]0 P# d) T. c
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );" ^1 |! `4 q& Z1 x
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );
    ; D9 `; K) M8 ~+ R7 C
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    , d# Z  k+ [( I/ ?8 N5 z1 x5 [$ X/ F2 {
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    & V' \3 }' O! F& z7 r8 X+ `. E% Z
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
      w2 v  c+ C$ U1 N: q8 I( P
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;
    0 R0 ]) @* X, V+ n0 M# f
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;
    1 J) T( O- l6 I, M4 v$ k7 A* \6 L
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;7 x- s( i$ Z. E1 E, R% a: X
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;
    6 O+ }) q; ~. g5 w
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;: i; n& Z' e5 Z  P, b+ c
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;5 |: I, h& E1 V2 s8 |
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;1 {& U; P; \" w5 P4 ~8 g
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;
    ! \8 ~# W, r1 h3 f9 y- j
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;# }& ^2 D. B5 Q: p' v; Q! ^& g5 @$ T
  125.         McData.constraints[ 0 ].name                        = NULL;) W+ y: @0 L% q. ]
  126.         McData.constraints[ 0 ].user_name                = false;. l8 ?6 x- b1 C
  127.         McData.constraints[ 0 ].inherited                = false;: W) [4 A# T  ]" w
  128.         McData.constraints[ 0 ].suppressed                = false;
    7 q7 O, Q# `4 m" V, |- [4 D
  129.         McData.constraints[ 0 ].has_help_point        = false;
    1 r$ l+ c4 ^# K' M! R
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    ; k2 y" ]: ]$ k& }  t% N
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );
    - N; \- a2 d: e# q2 Z$ t
  132.         uc1601( "这两个面进行相切操作", 1 );1 i  [* c  i7 ^$ L+ {
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );6 Z( Q: n) C# _# D
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );: H7 S2 n& E' A$ [  U

  135. , K' b" ?* b; B6 E
  136.         tagObjectFrom        = NULL_TAG;- n  ]9 T- w7 Q- A+ E
  137.         tagObjectTo                = NULL_TAG;
    5 k6 @. r* U1 U) ^! X1 n2 X9 y
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
    ; [, C2 p# A# e# u  }, e
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );
    0 C- T) G7 j% {/ w
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );2 q* g, V0 l- H  c! }2 q3 q
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    8 N! u( v4 r& j; c/ \  z
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;
    $ T* e9 {: q( z. x2 I
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;% [- C& R0 q0 `6 B7 F
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;3 K& E" t6 e: U4 [0 p! p
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    1 _: A: }- ]; z
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;9 V3 f4 E6 V7 ~$ \" J
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    $ I  g& M2 ~5 V! u" Y8 t+ \( Z
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;
      `5 d4 j/ y; [) k8 `) _
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;
    : b9 F0 U- v1 d  X4 i
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;2 R$ X3 O' {4 H. L1 G, I5 t8 x
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;
    ; S, A7 X$ E& I
  152.         McData.constraints[ 1 ].name                        = NULL;
    , @1 l3 x4 D( [( x0 x6 Z
  153.         McData.constraints[ 1 ].user_name                = false;
    0 s3 R3 K1 r7 B, z4 x
  154.         McData.constraints[ 1 ].inherited                = false;3 n- o) a7 {1 L6 w) U1 {  A6 W
  155.         McData.constraints[ 1 ].suppressed                = false;0 A0 D- h, h/ \
  156.         McData.constraints[ 1 ].has_help_point        = false;
    + \5 w# A; Q# ~5 `3 b
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    4 Z; h/ L+ V* h8 v8 @0 B
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );. M) g- i& S8 k* {: u
  159.         uc1601( "这两个面进行相切操作", 1 );6 [7 ^1 V0 D/ Q' s
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );$ f! X* e6 s: Y( p* B8 o3 l
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );
    3 b" i, U( I" l' N4 f

  162. ' @/ W, |6 S: g  j7 B
  163.         tagObjectFrom        = NULL_TAG;5 |0 e0 J+ I6 `" {
  164.         tagObjectTo                = NULL_TAG;
    7 ?- Q- n1 F- A3 _
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );' d" s% s0 h7 ], k$ w
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );
    9 }; O5 J4 f6 g5 u' X" c
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    ' p2 ?- a7 |+ I* n, S6 A, ^. o
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );: [4 N- c. f* d, W" C+ {4 \
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;' ^0 }- N6 D+ g8 J' l
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;
    " k1 n3 l% `/ D! @8 M  F
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;
    9 ^, U' F  Q6 ^4 A8 u# X
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;
    2 p. k; ^! c7 |7 q3 @
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;- [2 y+ g$ Y  {, j" Z
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;
    1 M& q& W8 w: S/ `4 Q9 Y
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;6 M, E/ {5 E/ D' n$ T- h$ o
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;
    % X2 D2 S, O4 |" m; S
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;
    $ u1 ]9 ~2 W3 u9 T, a6 c, d
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;: E0 B' v& K0 b! r6 o4 D$ S6 c' {( k& \
  179.         McData.constraints[ 2 ].name                        = NULL;% G: h, E, O8 ?+ u/ a6 x: l+ H
  180.         McData.constraints[ 2 ].user_name                = false;
    " F) `5 U( o8 \4 p7 l2 Z" Q
  181.         McData.constraints[ 2 ].inherited                = false;
    * i% Z8 H' S/ M" x/ Q) K
  182.         McData.constraints[ 2 ].suppressed                = false;
    8 x, U$ _7 O4 `% E
  183.         McData.constraints[ 2 ].has_help_point        = false;! V3 d3 @" e7 G9 q
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );+ q1 b) z% b: s9 T, `% x
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );" k  k: d. r9 c# z) `# X$ _% v
  186.         uc1601( "这两个面进行对齐操作", 1 );
    2 Z2 W) _+ `( B. B0 @) F* j
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    7 ]/ D% h* w" q  K1 m
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );8 f/ \% P- q+ q  O6 ]/ P+ B- Q+ v6 X) J

  189. 8 \1 Z- e1 M8 H: ^' o4 U
  190.         double dblzTransform[ 4 ][ 4 ];
    $ Z1 E! m* U! h" ^
  191.         UF_ASSEM_dof_t Dof;
    & D  A& S# b3 Q. d+ A6 E
  192.         UF_ASSEM_mc_status_t Status;4 c/ B/ l" ?; J7 M& B# x; y
  193. 6 b1 m- S' h0 B3 I) W1 Y4 D# A

  194. 6 y. ~) p* ?/ O/ q
  195.         /* 求解约束*/, U" l6 j( a% Q) }( @* N+ T
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );# @/ y; Q5 x$ l& o8 A( N
  197.         if ( UF_ASSEM_mc_solved == Status )
    ( n) v: p  N" x% r5 l
  198.         {
    6 T' d" b+ a  Q" N' @
  199.                 uc1601( "求解约束成功!", 1 );  [2 x) I: P7 [2 }7 T, n) `; N
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;9 {8 I- p7 g- c2 p: V7 z

  201.   C) h- r- b7 Y: V+ }$ Y
  202.                 /* 将约束应用到装配体上*/
    $ ]0 s+ V2 k) C
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );
    " [4 q- I& q+ x$ r
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) & j/ I* b! S# j8 j1 v
  205.                 {% a7 Y& g) P1 h6 U
  206.                         uc1601( "应用装配成功!", 1 );  d( b" U9 }9 r5 G: ^
  207.                         4 D5 k5 a, i7 c  I/ f, V( Z; T
  208.                         /* 更新模型*/' c9 J$ Y$ H9 z# f0 p# @
  209.                         UF_MODL_update();# d* ~* s# x: U& d: D
  210.             UF_DISP_refresh();
    8 V9 z- u# `+ ?4 C6 _+ j2 V
  211.                 }
    - j9 S+ w' D5 j0 T
  212.                 else uc1601( "应用装配失败!", 1 );
    ) V& c, f  x8 b: \  ]4 u2 b
  213.         }4 }! e( T; S$ s3 x6 e
  214.         else uc1601( "求解约束失败!", 1 );
    + Z+ F1 |8 g& W  U
  215.         }# d+ D) d! C* @" F
  216. }. {8 t3 v; A5 u2 J1 f, r7 L
复制代码

2 u( Z  H! t9 _- |6 T2 d* ~
5 M( C7 _; I8 Z% h2 u
; N8 D/ K* J8 T3 V4 r0 {: F$ K
1 K( `+ Q' K0 I7 |1 Z. y
9 H$ X1 }: E7 q( l( O
5 H' I" C6 C8 t( y0 i8 q9 W& C2 j

! b5 i5 I! H) ]8 b6 K4 i, \
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了