PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
8 z9 D# J0 m2 q& @% I( z3 t8 O+ q2 k

( p7 C+ {- u1 L$ Q1、装入部件* _: c3 x  U; C
通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;' Q% G! ?' _! p0 E! |" m

. f" h+ P1 L. ?4 t2、创建配合关系
  J4 M. n9 U5 Ha.通过函数UF_ASSEM_init_mc()初始化约束;
* n# Q' N9 f& z, i- a: Pb.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;
+ G/ W( w+ e4 z6 Q3 G装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
; X# Q7 t! L( Nc.通过函数UF_ASSEM_solve_mc()求解约束;5 o+ c1 q4 c5 u& S% _
d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;
. B  F: H- g: O/ X8 r% C8 ve.通过函数UF_MODL_update更新模型。
0 r# ~# N: p: w3 r' u1 Q! r- `% ^6 V1 P8 z, X1 M) |, [1 Q
  1. #include <stdio.h>" J, g/ c# g5 X$ D, n9 X( L. K/ [% r

  2. ; k; |' V! s8 _& Y- \* B
  3. #include <uf.h>
    9 B" e3 y% f. _- {! k- d
  4. #include <uf_ui.h>* c/ g: m6 i/ U( {. J  Y
  5. #include <uf_obj.h># k1 b5 Y' }* r' V
  6. #include <uf_disp.h>! |  O/ Y4 h. @
  7. #include <uf_modl.h># R: F9 M( \9 o2 V9 C8 i3 Y2 d
  8. #include <uf_part.h>7 s0 }6 g8 k+ j+ \' N
  9. #include <uf_assem.h>% {2 i5 R' V# s6 q

  10. $ s. ~5 K& ~, M0 i; ~
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) ). D  B' B- ?2 b4 _! ]( z& M
  12. ( ]4 P9 z9 M, g! t
  13. int report( char *file, int line, char *call, int irc );
    ' H% ]  w1 q: z% y( f7 y
  14. void DoAssembly( void );
    " u+ F: a, |6 C9 ~3 }/ A
  15. - ?* [7 b, Q7 z1 \3 J/ M- z. l
  16. int report( char *file, int line, char *call, int irc )" e7 Q0 M9 ^9 N5 o0 m
  17. {  G$ P% g7 S9 C' }3 e
  18.     if ( irc )
    8 V$ ^/ @  Y) a, H/ _2 ^. A
  19.     {0 L) E1 ?5 B: R8 ^7 F! e
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];; J# C  `  k7 b
  21.         char msg[ 133 ];& j' D0 q, T" V2 Z, e$ D
  22.         char fail_message[ 133 ];# @- N$ \9 l+ Z9 T
  23.         int  len;
    ) A% f- W% W3 z, B. R% e
  24. ; Q  J6 I+ g2 z6 P! p
  25.         UF_get_fail_message( irc, fail_message );
    # j# d3 y9 |# b$ m+ |
  26. , s! `6 E3 F, d8 g# g
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );( I2 q' E2 m8 }' M) W. P
  28. 6 `3 l8 K3 R2 B
  29.         len = strlen( err_msg );- e9 P) l( Q' E7 V6 Z
  30.         len = ( len < 131 ) ? len : 131;9 O' X# A* w. [
  31.         strncpy ( msg, err_msg, len );
    ) |2 |  d. N0 X" t
  32.         msg[ len + 1 ] = '\000';
    * [5 q7 r! v) Y8 h3 s8 e. ~% k

  33.   \' t" E. h; \- S/ D/ K$ T  ~
  34.         uc1601( err_msg, TRUE );
    3 a5 m9 j6 {0 a' a
  35.     }  ?; }  H9 T8 {5 ?0 Y6 Y2 a3 B
  36.     return( irc );! D. N& t+ U6 z9 l9 |
  37. }! b) @# ?7 y" J
  38. % w$ B& y4 v8 E8 G/ m
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    , v) A: a# B% ~1 B1 l5 D9 [) [8 I
  40. {- l- e' j- P% Z/ `' J/ V3 @; Z* i6 c
  41.     if ( UF_initialize() ) return;
    9 V) u& \: M( d+ `- d
  42.         DoAssembly();
    : O& o0 a/ \2 f1 H2 D; O  s8 W
  43.         UF_terminate();
    & {6 A3 Z2 [# {& Y
  44. }1 G: M% j9 I1 f$ U* K4 r

  45. # E* L7 p+ m. @- U
  46. void DoAssembly( void )
    6 b6 o. @+ b) _7 C, t
  47. {' `7 W1 p- L9 J  X5 w" E' @
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )
    / a1 N2 I/ m: f) P4 g7 l8 s
  49.         {
    ! U% X  e+ O3 b1 A  _7 l. f! j, U
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );+ W# j0 [' ^: k) w3 v0 T
  51.                 return;
    ( H5 j) J3 c3 ], O7 \- A- u! L. x
  52.         }# e$ U4 N" i( e: X
  53. 9 ]- P. U) s* \: g
  54.         tag_t tagInsCyl        = NULL_TAG;
    ! k7 F' d8 H# J
  55.         tag_t tagInsVBlk= NULL_TAG;" _! A* m. R3 m( T6 ^' y+ l
  56.         tag_t tagOccCyl        = NULL_TAG;
    , N3 C8 R. ^7 T5 t
  57.         tag_t tagOccVBlk= NULL_TAG;2 ~6 N+ f6 O4 c; Y5 j! t5 J
  58.         UF_PART_load_status_t ErrorStatus;; f' U: t7 A& V1 @6 c) e5 ~
  59. ) ?, u( c  l& c0 `/ k5 n4 y, n/ n8 X' T
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };
    . c* E1 M  ?3 Y6 I, ~& [
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };0 u) e6 j. t+ ?" d! ~% U" S) @
  62. 9 E9 q6 p7 Z( k$ k
  63.         /* 装入部件GB2208_80_Vblock.prt */# H" ~4 x# I7 W. `
  64.         UF_ASSEM_add_part_to_assembly(5 c+ k8 g4 d; _  b# M) \
  65.                 UF_PART_ask_display_part(),
    , ~" I! S+ w6 M5 S7 |
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
    & b, K' p/ ~2 G/ D8 I( q+ X" ^
  67.                 NULL,
    ' }. z: p( ?- W! @
  68.                 "VBLOCK",2 G5 q9 [/ {6 v9 Y; V8 S/ }  E
  69.                 dblzOrigin,0 S6 J! C! U/ b+ }8 L* _- y+ {
  70.                 dblzCsysMatrix,
    % O- _  ^' P+ P3 w+ a/ P2 M
  71.                 -1,1 A+ r6 B# @% A
  72.                 &tagInsVBlk,9 o# K9 J, @$ H& ]9 ~
  73.                 &ErrorStatus );: ~$ g$ K; q4 Y% R" R- s3 o# V
  74.         /* 装入部件Cylinder.prt */- D/ Q0 `0 k' l8 u; E
  75.         dblzOrigin[ 1 ] = 50;
    + f1 Z7 {) Q9 H9 Q, s2 p0 e
  76.         UF_ASSEM_add_part_to_assembly(8 q* q7 Z- c& ~1 q" F
  77.                 UF_PART_ask_display_part(),
    2 k4 _1 l! r, m4 Q
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",7 s* ^! W+ u  ]. [! U9 B4 D
  79.                 NULL,' [4 K+ W2 B% Z. q! }% z' l6 m  n, S
  80.                 "CYLINDER",/ |2 p  F$ K" v, I" J
  81.                 dblzOrigin,% [2 n' l# G. f3 o; e. A& l/ Y
  82.                 dblzCsysMatrix,
    6 M+ p. c5 O" h: ]  y0 \7 t
  83.                 -1,/ G, ^3 U* s6 g1 t6 Q0 f# M
  84.                 &tagInsCyl,
    5 {) O5 H4 Y( M  Z: r- F
  85.                 &ErrorStatus );  F3 S/ N; ]% d) k
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );
    8 q2 E0 x$ o( r; @  T
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );3 q  s& s0 L$ |" D# K! }
  88. ! u2 H$ z' {2 s) n
  89.         /* 创建配合关系 */
    8 C2 U4 t1 P9 f9 |3 g% `/ @
  90.         UF_ASSEM_mating_condition_t McData;
    1 a  i0 c, M: r0 C
  91.         tag_t tagObjectFrom                = NULL_TAG;4 c: {. L/ y' `% ?
  92.         tag_t tagObjectTo                = NULL_TAG;! W( K1 d! U  f: C9 T" V
  93.         tag_t tagPrototypeFrom        = NULL_TAG;* y  j- v6 b$ n& T" Y) w0 l9 ]
  94.         tag_t tagPrototypeTo        = NULL_TAG;) P3 B# \7 P4 W) r- B: B- h
  95.         / ^, k, `: a5 h& ?
  96.         /* 初始化约束*/
    ; }; ]; X% Y% ^' \4 p
  97.         UF_ASSEM_init_mc( &McData );
    0 ^; R4 D/ w  T, O
  98. 4 Z1 z9 C. x& g% t! j1 ~
  99.     /* 定义约束,构造配合关系*/3 f0 y; ]' T' u' u# A
  100.         McData.mated_object = tagInsCyl;
    ' m9 B3 Q: q  x6 B. y3 ]4 a
  101.        
      q* Y- q9 H) J; R, {$ M9 _
  102.         McData.num_constraints = 3;
    / a& d% K& D' u7 ^% E# _: c; t# C
  103.         McData.name = NULL;1 q3 J5 ?. j. p$ A8 @9 {
  104.         McData.user_name = false;
    3 x" F. c3 W# x4 E4 d1 e! h3 p
  105.         McData.override = false;1 [2 V# Z7 c& w3 \
  106.         McData.suppressed = false;
    / N2 q" F2 ^% f
  107.         McData.implicit = false;: e! P! u) K% [
  108. & c* Y3 Y+ k+ W) L, y8 ?. A) f
  109.         tagObjectFrom        = NULL_TAG;* q% j( r3 a8 E6 v: M& h
  110.         tagObjectTo                = NULL_TAG;; L4 P2 |7 O9 }0 L
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
    " e- U5 K6 }3 G7 y( E
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );3 ~7 Y& L/ ~. j& u; M4 `
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );9 t* n; u: ]; N5 y* C
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    9 M$ [3 M7 H) D6 x; r
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
    7 }% Z1 \  p- L- Q: `
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;
    ' H' V3 O+ p# u
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;! u2 Q0 Z, {; [) l
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;
    4 e1 J2 o3 S9 L3 c8 B6 x  p
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;
    2 |: V2 Y" v7 \+ V
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;
    . m' w1 }& i, Y1 N) V
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;
    - N) s4 @: {! M
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;( I" t# K; E& S6 a4 ?9 m- @& j6 u, L/ h
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;
    - u2 g  f+ y2 P" o1 _
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;
    ; k  c# `( z7 s
  125.         McData.constraints[ 0 ].name                        = NULL;
    ( ~% L; h1 \" b
  126.         McData.constraints[ 0 ].user_name                = false;
    $ R6 \( w3 n6 A' S1 _/ }' @  q* L; N
  127.         McData.constraints[ 0 ].inherited                = false;
    ! m# s& ^( \1 Y" E2 n" o3 a; J
  128.         McData.constraints[ 0 ].suppressed                = false;
    6 T7 u9 ]! h& u& m/ `
  129.         McData.constraints[ 0 ].has_help_point        = false;
    9 W: m! H9 q2 {
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );4 P! T+ `  @* l3 g' e9 T
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );
    ! R  `  `. o4 ]& ^, b
  132.         uc1601( "这两个面进行相切操作", 1 );
    + W7 C. G6 Q" i& N
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );  N  y, _4 \$ F- y& @1 a4 c$ }  p% d
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );
    % w% }' ?) i$ X& B/ L
  135. 2 R* O0 O% G6 e+ ~7 r, x. s
  136.         tagObjectFrom        = NULL_TAG;
    , u% Q" s' q5 w( V+ F' ~
  137.         tagObjectTo                = NULL_TAG;
    . M4 I1 E1 }! L- j! k, Z
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );+ e2 j$ B: C, h6 k. [) @. z! |7 }
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );
    & e7 a% U5 v% m1 A* T4 M( w
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );2 H2 O7 j5 A( M7 g% l  s- h
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );& q+ D& F5 ]* x; V
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;& Z# G" r7 o. r$ {
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;# Y7 U5 ?) s/ \, @* P
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;
    0 B9 k9 d2 D  K; j# R: c. f
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    ' K% Q, _& Z6 l9 k0 V% |
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;9 y* o: t) p" O$ A1 T; U" y
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    + `! O& F. D' B. b9 I
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;, z# s" X: \! c9 K' o
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;; Q/ g/ L0 K# M  ]# b
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;
    , w& b4 ]! d1 ^6 Y+ P
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;
    6 @! `7 J/ b3 R4 T, F
  152.         McData.constraints[ 1 ].name                        = NULL;; o( {, V1 g$ h  p, a0 C+ E2 K3 `
  153.         McData.constraints[ 1 ].user_name                = false;
    1 R  u/ }* [% `  t
  154.         McData.constraints[ 1 ].inherited                = false;% q( b  P9 e6 V9 _8 F& ~
  155.         McData.constraints[ 1 ].suppressed                = false;
    ) J8 M6 G, ~% T0 H
  156.         McData.constraints[ 1 ].has_help_point        = false;
    2 J  `; C9 y2 _! O
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    5 I9 V0 b& g, a& X5 }, f
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );; g: w  O6 `" j9 p+ k7 x
  159.         uc1601( "这两个面进行相切操作", 1 );
    6 n' m, u/ h; k
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );0 K; `' n5 G7 x" G0 v0 n
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );
    + x$ H' C2 f, B7 _' P% ]+ L! H
  162. * U5 O& p( R! A( z- t" H; k
  163.         tagObjectFrom        = NULL_TAG;
    6 _: A, ^# Y! A
  164.         tagObjectTo                = NULL_TAG;- j- d  i# x, b9 C' `; Q# J" m6 B
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );
      K, t6 G3 w3 i/ N
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );
    + G" q' D" O5 F" Q' l( r9 l
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );8 f- Z" O: H4 K5 j3 ^( d7 g
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    3 G/ K0 u. E7 N) k
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;+ S' M$ i7 k' V9 `
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;/ ^# b4 c/ c7 u+ Y2 u* a+ {# s" ?
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;% N/ G  E& s  z. f9 f& H1 [
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;
    . V% W# n  C- F3 x' j( h  x! k
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;
    4 N1 [& n0 _. [
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;/ Y) D) W3 Y! o7 [
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;( V6 S' }1 P' c/ [; B- h
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;
    $ [: c2 c2 G% v4 s
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;3 @1 f9 |7 z$ |5 A# k' ?9 {
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;9 r0 o# ~" ^5 \' |+ |/ j5 ~' [4 t
  179.         McData.constraints[ 2 ].name                        = NULL;+ m. {/ D# ~& R; b+ y4 S
  180.         McData.constraints[ 2 ].user_name                = false;+ \) c1 y, @% ~
  181.         McData.constraints[ 2 ].inherited                = false;' d/ ^( i+ k& Q/ G7 I" C7 |. T
  182.         McData.constraints[ 2 ].suppressed                = false;, f2 ~7 R. c% b  u) q
  183.         McData.constraints[ 2 ].has_help_point        = false;
    9 X' `3 |% k3 C! n3 p) F3 K
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    " j7 y/ F# e) L0 L4 {; ~: S
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );. z) [. A: ^) n2 C' b
  186.         uc1601( "这两个面进行对齐操作", 1 );
    : e/ R1 h+ C. c, z' `
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );, ]. Y! Y; j9 M
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );$ y# [' \# x, K/ `' h2 i4 y& s

  189. % s9 Y) {  P4 S$ k% I( J
  190.         double dblzTransform[ 4 ][ 4 ];
    / m. ?, y( _& A# C. U3 m
  191.         UF_ASSEM_dof_t Dof;' C* E) B% C' t0 P# Y
  192.         UF_ASSEM_mc_status_t Status;! {) D/ C- ~  J& p8 p& g6 w, ]  j0 T

  193. : H8 Y# }1 M2 A3 W% {9 B# W

  194. # I6 h) M6 E5 R+ H1 t
  195.         /* 求解约束*/
    * y' B3 G0 n# d8 |6 m6 B
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
    ! a0 U8 d  K  y( k* q$ h2 u7 j
  197.         if ( UF_ASSEM_mc_solved == Status )& O* S8 \- L* e# V) v
  198.         {
    - s- T. O0 `- I
  199.                 uc1601( "求解约束成功!", 1 );, c& P. A2 |1 o  a- a
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;
    7 u: S5 T" U4 _6 A- K
  201.   w4 t8 O: i+ c$ K9 |
  202.                 /* 将约束应用到装配体上*/5 {! ?6 Y1 h$ b& l; p
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );; c' F+ [9 Y- V; X4 c& C/ }* h
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) + ^7 X, T9 s8 c- R1 _: V/ S
  205.                 {
      ]. U. t$ w# p; V
  206.                         uc1601( "应用装配成功!", 1 );& h/ s! J0 \2 Y* R2 V
  207.                         ! w7 k' a& C4 r9 a
  208.                         /* 更新模型*/
    1 e) [( N- B  d) \
  209.                         UF_MODL_update();  b1 _; v+ \" ?* s! }
  210.             UF_DISP_refresh();
    ( I  X0 U4 E# B
  211.                 }
    # U! n/ i  ~8 B- F7 y( @
  212.                 else uc1601( "应用装配失败!", 1 );; p7 H( ~- L* E$ H7 i9 z3 Y; r( a
  213.         }
    % C- H& ^7 C. ^8 q# |1 |5 w
  214.         else uc1601( "求解约束失败!", 1 );
    : F) H; |6 r3 n
  215.         }
    1 z3 a' |! l% D4 ?3 w
  216. }5 }, j- T4 O  {7 Q$ T( g. Y
复制代码

) y+ ^% o* S. ?/ N% S- Z$ k$ f
# P! J5 J8 S) r  e8 ^2 S) ^
0 O) e; t" _, p! Y4 K  ?; @2 t" u, j+ k5 R! ^# Z
4 O: {- K' f, F6 Y5 M3 L3 Z

$ X6 ]' n, t6 l8 Y% E
8 R2 q1 b' K! }0 a3 @- q1 J2 j1 X- h
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了