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

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤9 C# ^  B' M2 J6 J% J2 V
9 a5 v. s1 U' B$ ^9 W# c
+ u9 M$ R, p' ~/ C" z" I( y
1、装入部件0 {8 U# p' h" I* v+ {
通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;
# p& P! O$ O+ Z9 e& }5 P  T1 |4 E% I& b5 x& e
2、创建配合关系5 r) u! t2 `8 Z7 U" R% i7 _2 y( i
a.通过函数UF_ASSEM_init_mc()初始化约束;: A. i% B1 q# q. g+ D. ?% o
b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;
4 g1 l$ k& h; K- u; `; G装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。- K, N; v  k5 N5 V4 j. Y
c.通过函数UF_ASSEM_solve_mc()求解约束;
/ f  `$ E0 w( e8 ^. m! I( |d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;
5 c, I& p) d9 X& Ve.通过函数UF_MODL_update更新模型。# _0 h! \# V& A1 Y* m+ N

6 o0 k* \" _4 _1 z+ c
  1. #include <stdio.h>2 k& Y( h7 I# V' F. @+ v

  2. ' ], L% X5 b$ @1 x" K0 |
  3. #include <uf.h>
    ) Y6 }+ c2 m2 [4 R6 }0 {
  4. #include <uf_ui.h>
    - R: L: L1 f: I) h# s
  5. #include <uf_obj.h>8 p/ p6 y+ [: i8 H3 M- b
  6. #include <uf_disp.h>5 U8 H. W" ]( @
  7. #include <uf_modl.h>
    6 _2 ?# E: y" H/ t- c
  8. #include <uf_part.h>; S5 R* ]* y, ?6 I
  9. #include <uf_assem.h>
    & g8 D5 {5 j4 m+ K% ~3 n6 e
  10. 5 I( [" o9 H) i& l9 ^, X/ d' `  t
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )0 E& D5 r0 i4 _7 u8 L# T
  12. & m, C$ K0 v: O! t4 H9 B: K
  13. int report( char *file, int line, char *call, int irc );+ K* `9 G' z7 E; f
  14. void DoAssembly( void );: e4 k7 i! d( r; Y9 c* P* }9 t, ~8 r: Q

  15. ; x2 N" `& E+ b) p7 n
  16. int report( char *file, int line, char *call, int irc )  {1 ?2 Q+ T, h7 ?& r
  17. {4 n$ B. H) o+ W, z
  18.     if ( irc )
    ( D, N( [- z* m
  19.     {8 i3 M, |# f! c% \. `: w3 }' D
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];9 `3 j% P/ f6 {9 w3 A+ R% x: H
  21.         char msg[ 133 ];
    ; W" ~7 y+ M# w  \6 V( }
  22.         char fail_message[ 133 ];
    # h$ S5 U4 R* `0 b
  23.         int  len;
    ) a* a/ b- j3 q6 c- N8 ?# b

  24. # H& ~9 W, ]  ]% L; w$ J
  25.         UF_get_fail_message( irc, fail_message );
    7 L0 }* R5 I1 R3 M8 z( A& \/ W
  26. ) V) P" w% E3 Z: e
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );
    2 c' Y. Y3 S7 N$ v
  28. ' [, v1 E1 n) \2 x% a. G
  29.         len = strlen( err_msg );
    * I6 H- l9 q( D: z( N# K
  30.         len = ( len < 131 ) ? len : 131;
    ) D" C$ A  Y; o( }5 E, I
  31.         strncpy ( msg, err_msg, len );
      j" Y; E. e' @+ V$ I! Z! m& W
  32.         msg[ len + 1 ] = '\000';0 p/ A+ J$ ~* {8 k
  33. $ A; P" a+ v' f3 @+ ~
  34.         uc1601( err_msg, TRUE );; R" `( ~- {3 s* N% {2 w
  35.     }
    * F3 ~* A. J' b- z2 p
  36.     return( irc );
    5 n: T' L" G& Y
  37. }
    5 S8 E8 |& v9 c6 v5 D+ q

  38. ( c9 f! h/ \6 K& X% P
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    ( T9 b0 j+ q, n# X7 `& U# b
  40. {9 M" T" j  ?, X3 B( D9 r
  41.     if ( UF_initialize() ) return;
    ( [% }( l# Q6 O0 j' L
  42.         DoAssembly();" f: x8 Y( V# e8 \& w  S' S
  43.         UF_terminate();# u- t* ?3 e: v1 S
  44. }( W$ a; r+ n0 j' W  g

  45. ; R  ?3 w& R* r7 k
  46. void DoAssembly( void )6 m4 c* O% D/ C9 o; w
  47. {
    1 \2 S: n$ E8 P( m/ m
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )
    / {+ H/ V# N1 Z4 Q9 a
  49.         {
    8 I# l- n. s7 R( t1 w# h2 k8 S
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );
    6 H4 J- d- S# z% n0 V0 @
  51.                 return;
    & f  k0 n! ^$ H# r
  52.         }
    . X2 s* _# u( T# N" r0 ^
  53. + [: P9 I4 J% ^  D
  54.         tag_t tagInsCyl        = NULL_TAG;
    + p) l( Z7 s9 T( V- H0 c
  55.         tag_t tagInsVBlk= NULL_TAG;
    ! }/ @* x6 c! y3 M3 {! ~' a
  56.         tag_t tagOccCyl        = NULL_TAG;, r9 Y7 ?/ {4 `, F
  57.         tag_t tagOccVBlk= NULL_TAG;: R4 c  ^; u/ d4 z0 M. p
  58.         UF_PART_load_status_t ErrorStatus;
    " A2 F; L6 M. S; a% r

  59. 2 I+ I7 ]+ D# L/ m3 a; o. }
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };% p1 ~- ^$ \0 s, ]
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };
    : u, R9 w3 O8 a' M
  62. , {' l7 p+ S2 F5 q# e( t, n
  63.         /* 装入部件GB2208_80_Vblock.prt */1 Y% H* \2 q$ ^5 o0 q
  64.         UF_ASSEM_add_part_to_assembly(( D) ]* j( b& B5 ]! j
  65.                 UF_PART_ask_display_part(),; w% ?8 D5 ]) J) |/ q
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
    9 r8 y7 p# x) u8 [1 f8 R
  67.                 NULL,
      z% K7 D. X6 ~9 |
  68.                 "VBLOCK",
    ! c8 F5 l1 T$ U' ?( H6 X: r( ~! Y5 h
  69.                 dblzOrigin,
    9 `6 f5 C) r$ I7 H8 \7 N
  70.                 dblzCsysMatrix,$ r" @. B2 v  A- I1 ]
  71.                 -1,
    9 D" Q3 J, T& B
  72.                 &tagInsVBlk,. M. `' W" [0 x+ v+ t
  73.                 &ErrorStatus );
    4 R3 _3 w5 r& e7 U  |) [: q* |1 v7 y
  74.         /* 装入部件Cylinder.prt */
    8 q8 m8 H: Q$ r: ?: p( g
  75.         dblzOrigin[ 1 ] = 50;- ^, M5 R" f! H
  76.         UF_ASSEM_add_part_to_assembly(
    ) q/ X6 g. I! `4 G3 |; b/ S1 G
  77.                 UF_PART_ask_display_part(),
    / t# W; `+ H- J
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",) S( u/ Y  Z: `) Z
  79.                 NULL,( a% b# B% q+ g
  80.                 "CYLINDER",- i* z2 e+ o4 m: X
  81.                 dblzOrigin,
    5 E; ]$ l9 o7 p8 V4 ~, b6 Z# y, k
  82.                 dblzCsysMatrix,- F+ ]' N$ e5 H- `& m$ s
  83.                 -1,) k& F  F; k3 Z8 A
  84.                 &tagInsCyl,% _$ ~( F0 W2 o
  85.                 &ErrorStatus );1 w2 ^3 J, K3 m2 F. n
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );' I& i6 Q2 f8 ^
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );3 b, m: X3 ?7 H7 X) T4 G( Q

  88. / m5 h) \/ L* Z2 i, P
  89.         /* 创建配合关系 */
    6 g0 b# t0 e& P! z
  90.         UF_ASSEM_mating_condition_t McData;
    ; r0 _) Z+ A/ r5 X+ b
  91.         tag_t tagObjectFrom                = NULL_TAG;
      C' M4 L0 c* q9 L( B0 n$ [
  92.         tag_t tagObjectTo                = NULL_TAG;. d8 I9 p% m# i* ]8 ~" Q
  93.         tag_t tagPrototypeFrom        = NULL_TAG;) ]& w5 z5 W$ h: K, `, ?
  94.         tag_t tagPrototypeTo        = NULL_TAG;/ ?4 }- R) x# e
  95.         , A- U' ^7 `; a- l- Z
  96.         /* 初始化约束*/
    : }2 x/ o: o, H* ^
  97.         UF_ASSEM_init_mc( &McData );  X- W9 J' ]7 T' J5 N
  98. . d. O8 \- n% `$ N
  99.     /* 定义约束,构造配合关系*/4 V' H5 ?# m$ y; M; w! X
  100.         McData.mated_object = tagInsCyl;
    ) ]" a: \% A6 W: i, S4 [9 }# b. q
  101.        
    * b4 V, C9 ~+ q! s; W
  102.         McData.num_constraints = 3;% e- p7 o* K9 B2 a2 @- J
  103.         McData.name = NULL;7 N  o0 B5 Y+ e. d3 Z/ T3 q7 m
  104.         McData.user_name = false;
    , @3 c, k$ `( c" D7 z& P0 K
  105.         McData.override = false;. g) o' Y: }: J
  106.         McData.suppressed = false;, e" A6 E+ C! t
  107.         McData.implicit = false;: C3 X, w/ N* d

  108. , Y2 j: Q/ N* P& n; O! q" A: \5 Y
  109.         tagObjectFrom        = NULL_TAG;! ~: h2 t8 @1 ~4 I* C3 C5 A
  110.         tagObjectTo                = NULL_TAG;
    - e+ j1 E& H. }- _  Z2 z
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
    7 c: V; S8 e0 O8 E
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );
    9 Q4 N' {# a& J8 \  B1 W
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );2 s& H( U8 Z1 S% t
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    . C- x9 |/ q4 Z4 P
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;0 `$ d$ x2 z8 o  @9 K4 l3 J. g
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;, R, k3 A8 W7 }/ I
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;
    " i; V' f* ~$ k$ F  X, I
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;
    ; x5 o1 o1 y6 z8 h8 a
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;+ N: ~( a0 [& G6 N9 {6 s5 H! l7 ?
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;
    7 c) ]4 y3 {" z
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;
    ' l7 N* ~" B0 ]3 p4 _$ Q! ?! z
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;
    * X" Q4 l) v" w' F0 v
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;) U( Z4 {: C" k! D3 P6 Z! i: r: ^" e2 h
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;
    . o% Z3 ]) f# d1 B
  125.         McData.constraints[ 0 ].name                        = NULL;
    7 J4 J6 e. W5 P$ c2 \/ M
  126.         McData.constraints[ 0 ].user_name                = false;0 n/ H$ ^5 I) o+ P/ p+ X' k
  127.         McData.constraints[ 0 ].inherited                = false;
    1 E' X; B) i% H& s) z: n/ x4 \
  128.         McData.constraints[ 0 ].suppressed                = false;4 J  L  g9 n3 T
  129.         McData.constraints[ 0 ].has_help_point        = false;
    * P  {7 X( T- P. z& G* l
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    / ]3 S+ H% k: F; q( t1 [
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );& F, ~1 h0 I3 |. W1 S: z) d
  132.         uc1601( "这两个面进行相切操作", 1 );
      X0 L& @0 U* \% z) d; g
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );9 Q3 o# }0 g; I
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );$ o$ M7 k, K: y- u- q' M
  135. 1 w7 m. z, r: X4 S
  136.         tagObjectFrom        = NULL_TAG;& m# b. V5 c3 S) V5 W  j
  137.         tagObjectTo                = NULL_TAG;
    + B: H' u7 N" H1 P8 l  \1 r& h+ e
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
    ' f3 N$ r' w5 Y- C3 z0 U
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );( H) t$ H1 u) \, j
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );8 O8 Q* A0 X& I: v
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );$ L' V3 h6 Y( g. p" N
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;
    * O; s3 N9 m( F: j, Y6 D! X
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;
    ; N. ^3 y2 C1 M- c9 q& Z" b" O: q
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;' n7 z% k% Y$ @, F  l  N& H* a, h
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;; Z9 L! @7 s/ t5 v% E/ C
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;
    2 N( g6 u- L1 ?% ^
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    + F+ g0 ^, ]1 r  i, k
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;
    2 H& x1 J/ p$ I
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;' j5 C3 k: i- ~& F  z8 t& ~2 ]: E4 |
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;
    9 w. }' S' s8 J9 |( o- w' T6 W
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;+ B* B! k. x9 W$ G# o0 U$ b: J6 X; D
  152.         McData.constraints[ 1 ].name                        = NULL;: B) ~0 i% R$ t9 |+ l
  153.         McData.constraints[ 1 ].user_name                = false;
    ( ]: ~0 ?" p+ z
  154.         McData.constraints[ 1 ].inherited                = false;
    ' y$ u* s7 E7 _" V' J
  155.         McData.constraints[ 1 ].suppressed                = false;
    , A. f9 q. H- ~, m7 ~
  156.         McData.constraints[ 1 ].has_help_point        = false;8 c3 T) m; ~( E& t) C
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );2 j* Q/ B: ?2 @
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );8 _5 o: ^8 E, r- k
  159.         uc1601( "这两个面进行相切操作", 1 );
    " J2 B' B: p) N/ }2 a/ O
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );) K% J: T2 d4 U" F0 _! W
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );1 z- f% d1 A! d* n+ ?
  162. 7 `( r* |( S8 j  \, M
  163.         tagObjectFrom        = NULL_TAG;
    , e! W. d" Z: [' }
  164.         tagObjectTo                = NULL_TAG;
    % a; g# m% O9 h4 g/ {
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );: F% U( W/ H' q* Q- r, t; k
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );4 r% _) B6 N3 \' G2 d- x# p
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    " c1 n2 R0 o1 S) R" ]
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );. T( c; o9 r  Z6 k1 S& J
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;7 x, f8 X% ?6 W5 y$ j  f
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;5 ^3 V4 i9 r( y8 T. E; G/ z  `
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;
    7 K5 |2 D6 a- Y' J
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;
    + q& p% X4 x4 [5 H2 Z- Z  X/ E" S
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;
    % W# N! _% t0 |$ S
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;6 v- o0 z4 C& i9 X  ^  v9 I2 }
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;
      |+ ?: ]; F' X, T
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;8 q/ m" }8 d+ G1 ~
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;2 @- F# t5 [# B# ]# ]
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;
    " K- W1 w; n( b/ n' e% ?
  179.         McData.constraints[ 2 ].name                        = NULL;
    ( l. k6 `6 ], z6 P
  180.         McData.constraints[ 2 ].user_name                = false;& [8 x7 A& w. {5 z% u
  181.         McData.constraints[ 2 ].inherited                = false;
    - H: A2 M; r$ W4 F5 m
  182.         McData.constraints[ 2 ].suppressed                = false;
    ) Y8 e- W" s% ^/ u8 z! t. ]
  183.         McData.constraints[ 2 ].has_help_point        = false;
    ) j" N' G# F! u3 _* Q
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );5 G0 P5 s" y5 Z' Z, e# d9 O% ]! l
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );: J  H) T/ k1 h# A% U2 m0 u- x
  186.         uc1601( "这两个面进行对齐操作", 1 );3 a2 Z. C, b! X
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );3 c' [: S1 @. x, @
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );/ x) g& ]# E* S/ o* g
  189. 8 t6 Y% r. c9 L7 \, Z5 Y
  190.         double dblzTransform[ 4 ][ 4 ];
    0 Y2 T& D+ K4 g) T8 a# O
  191.         UF_ASSEM_dof_t Dof;; i/ E$ S/ x2 v6 d: k$ Y3 a
  192.         UF_ASSEM_mc_status_t Status;1 Y3 `/ e, ^+ h! s$ ?, m0 p
  193.   t+ c6 J* e- X; E/ k4 m
  194. 8 j: F/ M0 o$ V, S) S5 q
  195.         /* 求解约束*/( `* _1 d7 o. H5 v/ e3 G0 ]9 U
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
    % A6 g) Y0 W5 j1 {  h
  197.         if ( UF_ASSEM_mc_solved == Status ), r5 |% ]1 g. m4 L- z
  198.         {8 E+ A: F; u1 D& |7 Z& s
  199.                 uc1601( "求解约束成功!", 1 );
    : p# Q1 ?4 t) o7 N# H. Q
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;; t# b. W: u9 q7 Z6 c3 u9 P
  201. ! _( \$ R& x0 r9 m, D( R1 R
  202.                 /* 将约束应用到装配体上*/0 ^9 x* R1 T% B: Q
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );9 x/ K$ |: U& ~7 f3 o% e
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) 8 Z! _. s/ @' c3 \
  205.                 {
    2 e7 H3 U- t. W# h0 y% s7 j
  206.                         uc1601( "应用装配成功!", 1 );
    9 \. M: S& y* V: `, q
  207.                        
    ! ]' v( u8 y; M( n9 J
  208.                         /* 更新模型*/
    # \# ]* n3 o) O  M: p
  209.                         UF_MODL_update();
    % u: b6 g* i6 U8 X# E+ M( f
  210.             UF_DISP_refresh();
    , x. q$ J! t, P( y8 e
  211.                 }
    9 c- }, l. ]9 I% T# o, T
  212.                 else uc1601( "应用装配失败!", 1 );! o8 S: \2 ~8 m8 o. I7 D
  213.         }
    6 Q* Z0 z, Z* S  L* }, ?# Y
  214.         else uc1601( "求解约束失败!", 1 );
    0 x6 x8 X( f8 d. A5 O1 H
  215.         }9 u: [2 G7 {9 ]$ [9 `9 ~4 y% B! X
  216. }
    * o+ v. V' w8 U( ~" y
复制代码
" g2 Y9 x" @! p, [- Y8 V
9 q2 Q6 P/ |& J( m( _
$ f! g  _7 n4 w# A  |5 \
9 L" L6 b, M. q5 Q+ y

# k2 O4 P6 A! ]0 `! ?" B1 m2 S" Y( S+ Q
! D9 B  @/ T" N' X! Z6 h( T

. o' r/ f: n3 v$ R
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了