PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
0 p6 T$ }0 E/ m. y5 E$ D
# H: K3 D2 q% l# `

8 v9 {7 ~; _* a7 V7 _1 B7 j1、装入部件
2 F/ Q9 K8 Q2 L  U" u& ^# L通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;7 A3 Z1 S( v( y  E) N
# s. J& @# L$ T# m/ a& ^
2、创建配合关系) X& d; \0 ~8 M% T$ k! d- W. @% A
a.通过函数UF_ASSEM_init_mc()初始化约束;
! |& k# H4 X  t# ?& g5 hb.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;0 L( Q# `, S" i% i
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
/ ?) y+ @" `+ T8 Tc.通过函数UF_ASSEM_solve_mc()求解约束;' e* y6 f& Q! i
d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;  A! x6 Y2 S4 @, s1 T; v& w
e.通过函数UF_MODL_update更新模型。
& F1 F" ?* \" G2 t; K" G  Y/ s" a  Z+ d, M
  1. #include <stdio.h>) P- X) C0 x1 e" c* V

  2. ; `) D) U# z0 f$ V  c/ s
  3. #include <uf.h>
    ' a) X, T$ E6 Y. h' |8 N
  4. #include <uf_ui.h>4 b/ y; q4 E# B4 s/ a
  5. #include <uf_obj.h>
    - Y# I( {4 Z+ [& N
  6. #include <uf_disp.h>7 v- K7 q) c- I& u, s
  7. #include <uf_modl.h>( t" q# Y$ U: k0 I6 R& Q0 p+ E& p% X
  8. #include <uf_part.h>& k0 W* ^+ W. f5 `' @
  9. #include <uf_assem.h>
    + N  n7 G# ~1 N1 I2 u
  10. $ c8 R" R6 f, ^! K
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )1 p" }# d9 P' U& n. ^0 k% ?" \" N

  12. , K, Q+ V* G! }/ L. [
  13. int report( char *file, int line, char *call, int irc );
    9 C' P! e; T# H, j. ?
  14. void DoAssembly( void );0 R9 C, {5 E& P3 z' h0 U: X2 P
  15. $ Y! n* l0 D7 u/ ~; ]/ W
  16. int report( char *file, int line, char *call, int irc )$ P9 \* `+ q7 H7 [1 M. O
  17. {% i$ K# R. w2 X+ V% K3 Z
  18.     if ( irc )
    6 j  _4 D% ~- y
  19.     {
    " h3 o0 t  s$ r$ T+ V% [% P. S
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];
    ) m/ k# {; f3 U
  21.         char msg[ 133 ];
    2 d- l- L6 f6 n* @( ]7 R( |; m
  22.         char fail_message[ 133 ];
    , l( {1 Q, h* u  u( @
  23.         int  len;
    2 M3 c( d1 d0 m$ v( {' i

  24. $ H6 N- a8 @: j' N
  25.         UF_get_fail_message( irc, fail_message );& p" z6 ~/ P) y# q) z

  26. & z& _) B" B2 V/ H) Q, L/ s
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );' a* {, T' @' I8 m. I% p) c

  28. 2 p0 H  s# [( M
  29.         len = strlen( err_msg );1 ?+ Z9 d* n6 O2 K
  30.         len = ( len < 131 ) ? len : 131;
    1 l* }& Z# Z4 }
  31.         strncpy ( msg, err_msg, len );
    9 |( Q& J1 H: b! E! `: I8 M
  32.         msg[ len + 1 ] = '\000';
    3 j! v$ R/ C- u8 A& h
  33. ) G0 ]* J7 y$ L) ~5 P3 o
  34.         uc1601( err_msg, TRUE );
    & Q* Q% u1 S% Q9 `# H
  35.     }8 }; d  i3 X- y6 ^& B
  36.     return( irc );* Z: _4 ?1 M  ?$ M# j* H9 a2 e
  37. }
      {- K5 f) K: {) \; B+ U5 s3 S

  38. * g& D( X0 ?/ ~; B/ S
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    $ d+ u3 F: g, ]" b& z8 b
  40. {( k4 d2 {# N+ W: P5 v* j: J
  41.     if ( UF_initialize() ) return;
    3 y7 c. L3 z4 e! X. N
  42.         DoAssembly();
    ) z) r$ t( G/ n9 L
  43.         UF_terminate();) U- j" I3 j, s5 @9 }! a0 ^
  44. }
    + E) j9 p. E3 k6 [

  45. 8 t3 s$ z6 Z* M  ^
  46. void DoAssembly( void )
    3 N0 G& ]% w& L) @/ e
  47. {
    & f# |* T# s' Z* x
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )/ \4 k5 }1 C2 l
  49.         {
    % v2 b( ?  M6 Y. H$ A5 U; O( U; g* S
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );( N6 j9 _) k  M6 ?  i' F2 {
  51.                 return;
    8 ]' N5 s. O3 T8 X2 n" U0 ~
  52.         }6 _3 N5 e$ Q, b* O- e6 K! ~: }
  53. . a, M$ n; `* q/ Z7 w# q
  54.         tag_t tagInsCyl        = NULL_TAG;
    7 m5 L8 c% l+ K3 e) H# A/ ?
  55.         tag_t tagInsVBlk= NULL_TAG;
    2 U% W. {# W, P3 y
  56.         tag_t tagOccCyl        = NULL_TAG;' }% q9 M, V! d& J
  57.         tag_t tagOccVBlk= NULL_TAG;
    5 G+ b# R4 q8 i# A. Y- M6 ^" N
  58.         UF_PART_load_status_t ErrorStatus;
    . m/ ^& v5 P! i5 ?

  59. 3 o6 y: d/ ^. D! R. L
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };
    ( {. H+ y. }$ I1 U6 f* Q
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };6 j  N9 U6 }+ W( @" |" Z0 U

  62. " f# U* ^  l9 f, _+ n
  63.         /* 装入部件GB2208_80_Vblock.prt */; H  [9 x6 Y, P; N, |
  64.         UF_ASSEM_add_part_to_assembly(" n2 |6 c  G7 n7 u( g: V, K
  65.                 UF_PART_ask_display_part(),
    $ X$ U6 s! W4 i% G) ^) r/ _
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
    + G0 E- U3 |" D! x" [1 i: }
  67.                 NULL,2 ]- t0 V# C2 ?( V; }0 i
  68.                 "VBLOCK",
    ! U& U0 W  Z4 p) f# t: O+ X
  69.                 dblzOrigin,
    8 |5 I6 p& Z: V1 u+ _8 z8 c& j0 T
  70.                 dblzCsysMatrix,
    & d, G* ~$ l$ X( z# W
  71.                 -1,
    % b2 W, D7 C4 Y5 E1 J/ }! l
  72.                 &tagInsVBlk,
    " U2 S! _6 [* h4 _  }
  73.                 &ErrorStatus );
    * b. }' ~5 d! F
  74.         /* 装入部件Cylinder.prt */) @+ h, [; j9 u( ~( i# E1 H: g" d
  75.         dblzOrigin[ 1 ] = 50;/ [+ V; t# Y7 j; o
  76.         UF_ASSEM_add_part_to_assembly(
    1 @: H( N7 F7 `5 z* B& k8 f
  77.                 UF_PART_ask_display_part(),( `* |: @) G6 q. Q" |. v
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",; M) _+ ]9 B- }, O
  79.                 NULL,
    $ ^, m( Y0 u7 E1 ~
  80.                 "CYLINDER",
    % E7 [, f" ~' b
  81.                 dblzOrigin,
    4 k5 M) F1 V9 h* D
  82.                 dblzCsysMatrix,% p7 n- s1 @  {- e& {/ t
  83.                 -1,
    ' H: B2 x9 h2 [
  84.                 &tagInsCyl,
    6 G8 _8 [4 |# b& ~8 L+ r, t
  85.                 &ErrorStatus );' k+ m( ]3 {; [' W- Q
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );
    4 {& C9 ?- W: w1 b  O
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );
    * b( `- K2 V/ D7 F4 N: n* Y* c. R
  88. % h( ]- U! T) o  a# D- q! ^+ K
  89.         /* 创建配合关系 */
    # s4 U" o* ?- C5 ^# r1 J* K  x
  90.         UF_ASSEM_mating_condition_t McData;
      |; y- W0 |$ {$ A# D
  91.         tag_t tagObjectFrom                = NULL_TAG;! e, b5 s$ @9 x% O! ]9 }8 ]
  92.         tag_t tagObjectTo                = NULL_TAG;
    - K3 [( B& {7 _9 D
  93.         tag_t tagPrototypeFrom        = NULL_TAG;% Z/ @4 A/ T/ k! F3 ~/ N- Z7 ?
  94.         tag_t tagPrototypeTo        = NULL_TAG;
    + K4 p: D3 ]( r+ K, g+ {4 q+ r
  95.        
    1 |# |6 r6 `& l5 P
  96.         /* 初始化约束*/
    7 v( k2 X" A0 ?
  97.         UF_ASSEM_init_mc( &McData );
    % q6 j3 a. H/ u

  98. # ^7 t/ h/ g( |) u, G
  99.     /* 定义约束,构造配合关系*/
    & B! j: h: ~% c2 x7 E  N& h
  100.         McData.mated_object = tagInsCyl;  |6 ~+ W& ?1 q8 n/ M6 P+ W
  101.         7 @9 u6 r1 I, N9 O
  102.         McData.num_constraints = 3;
    ! \6 i: T4 b2 D9 ?9 t  B+ i8 }9 M
  103.         McData.name = NULL;4 O& q) q! a* F: l
  104.         McData.user_name = false;5 L- Q/ r2 U, d+ d
  105.         McData.override = false;: _/ y/ C& r6 G/ O. ~
  106.         McData.suppressed = false;
      N# e$ A0 K7 H
  107.         McData.implicit = false;9 T* O/ |- Y. S5 s& r; R- U
  108. : a$ [; H5 ]3 `4 ]! ^' U2 d
  109.         tagObjectFrom        = NULL_TAG;2 V. e7 O  J/ N% t" K
  110.         tagObjectTo                = NULL_TAG;
    $ k. a* L. m% g
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );. M0 s( Z3 w/ Q
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );2 `7 K% f* e& a
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    : q4 C1 G& [4 v! Z, Y6 b; u% V# O
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    9 u% G: b, y7 k% R# S) V
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;' n4 U+ I5 t9 d4 Q
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;4 W. _0 c+ I( c: k# d; I  i
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;& X6 D' W- S  k8 O
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;& ^# i, O+ ~" Z' O/ d
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;
    + f& ]9 u9 h9 W+ q6 Q# }' L
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;2 N5 b% a' w; N: A% y+ M3 }9 a
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;
    " W1 s" E0 x2 f3 q0 A( ~. X' N9 W
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;1 L/ V/ {; b) `, `/ D4 q% C( K/ G
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;
    ) {! |! C* S/ y* s
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;' l, A; @2 N8 s  k
  125.         McData.constraints[ 0 ].name                        = NULL;
    & X% l* l0 P) Q, I
  126.         McData.constraints[ 0 ].user_name                = false;& e) L8 \2 ^. |6 ?: F6 i
  127.         McData.constraints[ 0 ].inherited                = false;
    8 h1 f4 Q0 D* A- }
  128.         McData.constraints[ 0 ].suppressed                = false;
      h4 M* A( s9 Z0 H
  129.         McData.constraints[ 0 ].has_help_point        = false;
    : Q- l# x$ ]- n5 \8 t
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );# l" u! P3 [( T
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );9 G$ x& O! w9 x  a" x
  132.         uc1601( "这两个面进行相切操作", 1 );
    - z; L8 {% U6 q4 o0 f0 U
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    5 g" a9 T  Q: D6 j
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );
    : W) h# n' c) R

  135. : _2 m2 j, W4 |7 |, w4 p; Q
  136.         tagObjectFrom        = NULL_TAG;
    * e, h. b+ @  y' e, v8 k
  137.         tagObjectTo                = NULL_TAG;- _* ?/ ]# _5 q
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );% D% f8 d8 ]: q1 ^, {
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );% f$ v/ q, ]+ u6 x+ f2 p# F
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    5 B( z; l6 M! v1 }7 c4 v! h+ I, K
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    2 F$ _6 D3 x+ O4 ^
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;( r7 |/ T; ]- _& F, B) r
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;
    * k0 K. N' A  ^! C
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;
    ; f. b! z# x# f& u9 y
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    8 P* w: @6 e8 a7 U  {% H$ w% \
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;) K, r  f/ i' p+ C6 l
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;0 ~' ^6 C5 f' M5 D7 y9 `
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;  [$ r: J  S6 X- _( x2 n8 E
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;* c1 T, s) p/ Q9 F' q, O
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;- \0 ]  t5 U9 ]& j6 I
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;8 B! i$ V. }* r, a
  152.         McData.constraints[ 1 ].name                        = NULL;
    - z) f6 H* F+ I% K! W
  153.         McData.constraints[ 1 ].user_name                = false;
    ( [7 W3 q, \- q4 V# s
  154.         McData.constraints[ 1 ].inherited                = false;1 m  y1 g* L  _1 T4 |
  155.         McData.constraints[ 1 ].suppressed                = false;
    . m# g4 C- F9 p. F, \. B  V
  156.         McData.constraints[ 1 ].has_help_point        = false;
    3 N4 R6 a/ N# s7 o. ~
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );9 ^0 `5 @6 ?4 y" P1 u, I/ p3 G. C
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );3 C; i9 v( w, v) r
  159.         uc1601( "这两个面进行相切操作", 1 );
    - U) n( k- I, _  u2 c
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    $ V" `! N9 `0 R" ?' J' Y* B
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );+ t; S' _8 O& t7 C2 e5 p( g! m

  162. 0 ]# x( k7 T, l. k+ |' U- K
  163.         tagObjectFrom        = NULL_TAG;
    " t5 A6 ?, u1 Y# h* T% t8 I
  164.         tagObjectTo                = NULL_TAG;( M" m$ R* R$ H* t, @0 }& E
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );
    ' S8 `. y! W$ q# z
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );0 J7 E  |) c' ^2 r
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    / r$ x/ z' x+ n7 u, e
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    : G6 H! B! Y  a, M
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;" l4 n, t5 i2 k; n; n3 @$ G
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;0 D, k5 U! E) I
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;" _; z0 B9 F) {; n+ O
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;; ~: V, u" S& W6 e$ l
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;  b9 C+ Y( U* H% r; M$ p( R
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;
    6 T- V4 R0 O& d+ X6 N9 C
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;+ o0 o# c0 `. h: E/ h
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;9 C2 p# b5 Q: D! D8 \+ `
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;7 q) U! U/ `, C8 v! y2 f" e
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;: u; L! X2 R! Y/ d% W: [
  179.         McData.constraints[ 2 ].name                        = NULL;
    9 ?' E6 D" _  d  m9 s; _- w
  180.         McData.constraints[ 2 ].user_name                = false;
    1 ]( q4 a! X7 H& U- E- m1 l. Y3 J/ @, h
  181.         McData.constraints[ 2 ].inherited                = false;- }: A6 x9 s, p
  182.         McData.constraints[ 2 ].suppressed                = false;
    + J" _( b3 I+ G  w& M, t+ C$ q/ T1 B
  183.         McData.constraints[ 2 ].has_help_point        = false;
    ) x. M  _: [: m1 c  g' _
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    # M! H' ^: k, m* ]
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );
    8 f2 j8 [* K9 y, U3 C9 y
  186.         uc1601( "这两个面进行对齐操作", 1 );' d6 W  A- D* |7 d5 l: f1 k5 A, w
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    % u& n' y0 W5 ^
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );
    " y; \* S6 D2 v8 X( ^6 \
  189. - B6 E3 f% V. r# P: O2 q
  190.         double dblzTransform[ 4 ][ 4 ];* q  }. C- V0 _8 i5 G: t2 |
  191.         UF_ASSEM_dof_t Dof;+ o2 d9 G: b5 X4 i* L) _
  192.         UF_ASSEM_mc_status_t Status;
    3 W+ E+ {! n6 w1 a5 Y

  193. ! s* G% _* O% [2 M- x( H& j/ h

  194. , a2 B4 _* A6 a& k0 u4 g
  195.         /* 求解约束*/: q1 ]( }5 x0 e
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );% A( d+ g2 K: f5 x, ^
  197.         if ( UF_ASSEM_mc_solved == Status )# ~  r7 A/ F* v% }: D/ r
  198.         {# J# Z/ O, O. S3 L) @6 R+ ^1 o2 O+ s
  199.                 uc1601( "求解约束成功!", 1 );
    1 ~9 }) J0 a) j3 u
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;
    . c, A, B5 o" a2 [! n

  201. , g6 }# s" y  U, g2 R& v* D  P7 x
  202.                 /* 将约束应用到装配体上*/
    5 j; S5 s( d- k' X) i+ m
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );5 O7 U* ~- X7 p; ?
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) 0 ?. O, W  s/ x( {# o, j
  205.                 {  Q; C3 t4 V4 W
  206.                         uc1601( "应用装配成功!", 1 );
    3 `$ p. q8 M- ?* W2 X: Q# a. }
  207.                        
    # n) b, @# \: ?: p! z  l  w
  208.                         /* 更新模型*/
    ' [6 ]- ?3 \' x( T
  209.                         UF_MODL_update();
    & I' O# f6 \2 p( I1 ]3 [
  210.             UF_DISP_refresh();
    # k6 |4 B9 `# o. {# n0 s0 ?
  211.                 }
    ' s6 c. D  X& ?8 J$ |" q2 z; N/ d
  212.                 else uc1601( "应用装配失败!", 1 );
    7 }- c* }1 w" S& s6 k& E/ i
  213.         }
    ' s2 C- M  H, u
  214.         else uc1601( "求解约束失败!", 1 );
    4 _( t. `6 V( m* m
  215.         }
    # b! F6 q6 F; X" \: v
  216. }
    7 x8 K! E( K" d' ~& _; |% |% V
复制代码

  [. Y' r: R/ G% h( m& R: @* {$ U2 x) Q( g( i# `( ?& R
7 A: t' R, _! f) M/ T

4 x, ~. U2 E3 B4 K2 U+ s+ S+ f/ Z- _0 F7 p4 d% p& o! e7 J
1 C  N+ S0 r/ Q! \) O1 ?

2 @. g' g2 n1 V  s) o
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了