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

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
5 C# G2 ?7 a. n' M: l+ J
8 n7 n, E$ B* |( b( c

% \3 R( E  y3 l$ O2 t) n9 _/ S1、装入部件
5 z! `& f, E% q通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;( J8 T9 X* T; d/ ]
7 H6 T: e  d5 Y0 A5 z- n3 [, r
2、创建配合关系
. R( K( p' _6 H# E$ x* _) Ma.通过函数UF_ASSEM_init_mc()初始化约束;
" A0 |2 b' K% f1 i0 [& [: mb.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;
7 i3 i* y1 Q; a8 i装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
% I% v9 m6 K8 E" xc.通过函数UF_ASSEM_solve_mc()求解约束;0 N9 }; k6 m) |! D+ K" t
d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;, I. c- H8 D' |' A: F4 e# j7 t- n* Z1 c
e.通过函数UF_MODL_update更新模型。- _& Q4 B/ M. R
5 X; V& ^7 _* ~5 u+ b! I' w
  1. #include <stdio.h>
    9 X; q# w! f( G0 g! S
  2. 1 l- d9 C& f" i
  3. #include <uf.h>: b6 C1 N: h# N$ F% }& `
  4. #include <uf_ui.h>" E, A3 ~2 C. g. u9 i+ b7 y9 M
  5. #include <uf_obj.h>
    . l" V% f0 C0 p" N- D. q/ P/ c
  6. #include <uf_disp.h>
    ! z9 n% H* V1 R3 P" j2 K& L$ q
  7. #include <uf_modl.h>
    ; Z9 Y' x$ Y: l5 U! B! K  }
  8. #include <uf_part.h>0 ]( `. |8 c8 @5 z5 e, L) u
  9. #include <uf_assem.h>9 w5 g" C! e* a; t9 L. q' T; h
  10. * L4 y, {, Q! ~( m: }
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )3 d) \: a" [  R2 b/ U

  12. # L* m$ w) G5 z* f0 G  w
  13. int report( char *file, int line, char *call, int irc );- A! K0 {! v4 o) k! y$ l! l3 R% t1 E
  14. void DoAssembly( void );7 v' p+ z- R; P6 w4 a. Q

  15. 5 W% B5 t" O7 S3 C
  16. int report( char *file, int line, char *call, int irc )
    4 E9 d, ~; o3 k- O. j- k: v" e
  17. {; Q7 r, V/ {, e0 e9 o
  18.     if ( irc ): Q9 j" u" i  K, d5 \) X
  19.     {
    ( p) \# i1 E! v' _& D* g/ q. b
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];# N3 v; J! ?. s+ k
  21.         char msg[ 133 ];
    $ m! U1 H5 j* L% N4 }
  22.         char fail_message[ 133 ];
    1 J% \( d; o: J* d" |
  23.         int  len;8 G3 W7 b5 ]  z7 V

  24. + }2 F/ d! t6 I: i
  25.         UF_get_fail_message( irc, fail_message );
    # j  Z: h3 O4 ?: r

  26. 8 m8 P* e; u' l5 Q1 f1 U2 p- [2 x
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );. }- m1 Z4 M2 Z% F* B

  28. 2 E7 x$ Y* L9 N, g
  29.         len = strlen( err_msg );
    ! ~. i* ], q7 [' O
  30.         len = ( len < 131 ) ? len : 131;& h' y, P7 \2 K, G1 |* C
  31.         strncpy ( msg, err_msg, len );
    , M' r1 W6 f1 g9 H) I! l6 c3 N
  32.         msg[ len + 1 ] = '\000';
    % }/ y" z/ [, h5 K
  33. 4 p4 {& `3 }( ]; F% A8 h) B
  34.         uc1601( err_msg, TRUE );
    7 w3 g+ k2 [5 W7 g
  35.     }
    , ^- T+ [) L9 C
  36.     return( irc );
    ; r* p4 _9 l) d1 e7 L% S2 Z
  37. }
    + q) J# P4 P4 N8 I# {& o( F

  38. 6 {3 m4 a9 E2 J  N9 S  L
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    " b+ e' k& K# z1 |' T, F6 {
  40. {
    - n, [0 M2 k7 W9 i  g/ K+ O2 _
  41.     if ( UF_initialize() ) return;
    8 p7 A- l1 E% Z# I) f
  42.         DoAssembly();
    7 x6 V8 c: e  x) N: [
  43.         UF_terminate();+ o0 v! h/ x, h4 N
  44. }* z' {" L6 T% L

  45. 3 C8 A; @( E2 V- A
  46. void DoAssembly( void )
      e* S/ Q% {; ^/ k3 n
  47. {
    - H( n1 [. S2 v" M0 m
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )
    ) C3 t6 o" n( y! B1 Z
  49.         {
    8 f4 H5 l8 o8 ~: e- c# U) @
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );3 u' v& w, r4 y/ l6 J- D' M
  51.                 return;  Z' M4 H; n6 `; r8 c" h# H
  52.         }
    9 T: ?8 L5 K5 T' O: p
  53. $ R9 g( N  W8 W+ f- N# Q, y0 p+ |
  54.         tag_t tagInsCyl        = NULL_TAG;
    + L4 j: e7 ?( l) X
  55.         tag_t tagInsVBlk= NULL_TAG;5 J4 v' g# k) M$ Y
  56.         tag_t tagOccCyl        = NULL_TAG;9 t5 L! W& x( K: V7 H
  57.         tag_t tagOccVBlk= NULL_TAG;
    " m# e/ j! Z2 U$ S6 z
  58.         UF_PART_load_status_t ErrorStatus;
    / u  \% I, t9 |( a0 O* {

  59. * S$ I* N. M# ~0 r
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };
    5 R7 ^: y% ^/ E5 g" p. e$ q7 R
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };
    : q7 `5 U$ s6 y6 l; m& F

  62. 3 n, V" ?. P  j
  63.         /* 装入部件GB2208_80_Vblock.prt */
    ( o- J" J( A& }/ [
  64.         UF_ASSEM_add_part_to_assembly(8 O1 ~! a( }2 c. E3 }
  65.                 UF_PART_ask_display_part(),
    8 a! L2 T7 E% K1 g1 a6 G8 V* T- q
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
    0 \7 W+ I% h: H& x; S0 U# f
  67.                 NULL,
    / u" Q5 x. h# w% ~" }# ^
  68.                 "VBLOCK",8 `8 ^4 _. r: O
  69.                 dblzOrigin,5 u1 }0 c2 {( G% q3 U2 B; f
  70.                 dblzCsysMatrix,
    , Q+ o, [4 v* P" K% Q0 r
  71.                 -1,
    ! w0 ]3 p# }) n# ^2 {* R! z7 J) Y
  72.                 &tagInsVBlk,- g# t( z& Z+ e4 R$ _
  73.                 &ErrorStatus );
    + ]% q- K6 k; @0 h0 g/ D
  74.         /* 装入部件Cylinder.prt */
    . ~# a8 D0 v! ~( d* Z9 @4 y# @
  75.         dblzOrigin[ 1 ] = 50;0 t, `0 V! p5 B/ J) Y
  76.         UF_ASSEM_add_part_to_assembly(
    ' c+ _- Y% C" i; G
  77.                 UF_PART_ask_display_part(),
    , W: B, |4 q5 _  Y# T
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",% `4 o; L0 h' e9 N
  79.                 NULL,. W. p# u) k: }# w# o, N5 a
  80.                 "CYLINDER",  D. ?) ~% F1 J; t
  81.                 dblzOrigin,5 m6 p9 w5 p9 Y9 a7 p
  82.                 dblzCsysMatrix,. c3 ^, n5 E4 e" {$ T
  83.                 -1,6 S: l' r3 k+ W* a
  84.                 &tagInsCyl,8 e2 p) W' D, q# m# J0 L! ^
  85.                 &ErrorStatus );
    9 W4 ^0 }  j5 S( S" T
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );
    3 I% P- J1 i, a0 D% K0 y" v
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );, g# o# v* h4 j$ t8 Z
  88. $ ]$ E: h; I" m8 u( ]7 o
  89.         /* 创建配合关系 */& a1 J0 j9 i' H4 E( O% f
  90.         UF_ASSEM_mating_condition_t McData;
    0 b8 c8 I+ S" l, v% ^  t# ]
  91.         tag_t tagObjectFrom                = NULL_TAG;5 B: s; y! K; j" v
  92.         tag_t tagObjectTo                = NULL_TAG;
    ' w* R/ L" Z7 t& O+ I3 G  {
  93.         tag_t tagPrototypeFrom        = NULL_TAG;
    $ r+ c% E" ~, n* P$ X
  94.         tag_t tagPrototypeTo        = NULL_TAG;
    # k( v6 d& P* `0 V+ S
  95.        
    . x7 q; K: R9 J" ^0 P
  96.         /* 初始化约束*/
    1 ~" t1 T4 i/ t& t2 U2 }
  97.         UF_ASSEM_init_mc( &McData );
    ; G* y- t/ y% J9 L

  98. * P! |9 f8 o2 }; }! p, Q
  99.     /* 定义约束,构造配合关系*/% i. j$ V  m- c. S1 g1 |
  100.         McData.mated_object = tagInsCyl;
    3 @% @7 ^1 d8 V* x; ~( q
  101.         ( A; w; l9 }% Y3 @, f( ~
  102.         McData.num_constraints = 3;
    # s$ R! H6 u; u6 U# F& ?( r2 U% Y* p
  103.         McData.name = NULL;' R+ h& K, @0 A: P8 J
  104.         McData.user_name = false;
    0 b+ b( L9 C) o' I* U/ o
  105.         McData.override = false;2 |# J  ]0 v9 i+ x5 U) m2 p
  106.         McData.suppressed = false;* a! M1 p( i7 Y8 ?
  107.         McData.implicit = false;
    & k" |+ Z2 s/ n1 W# K5 l( }3 F

  108. ( u- A) q) `7 @9 C, z8 d
  109.         tagObjectFrom        = NULL_TAG;) K1 K3 I2 _  z5 _
  110.         tagObjectTo                = NULL_TAG;- X: f- M, T; y7 n
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );3 x, N! k; p1 N& }7 H. Z" o7 D! K
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );1 Y6 ^* G  J: C# _9 p
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );4 Y# z. J& u0 b- F( Q; w  }
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    ) U9 x+ Z; |0 j. N2 \
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
    5 D! `9 H# w3 y
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;
    3 e6 ~/ ~) }% u9 e. q, |  y
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;
    ( S/ T5 ]! N) ]
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;2 {2 @1 Z6 G  f: h3 P) E. `+ h
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;5 w3 m3 R) D' n3 A+ Y: ^
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;
    / j% h; [' J0 {- @
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;
    9 N0 e$ X' k* d
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;8 n$ \! v) y- r  o2 O; }' H
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;
    0 D$ ?. |% `* t3 ]- d& P7 n/ [
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;( I7 w3 r+ l" I9 M
  125.         McData.constraints[ 0 ].name                        = NULL;
    $ D& }( R! v" Q' X0 ~9 G
  126.         McData.constraints[ 0 ].user_name                = false;% B4 ?2 c5 \$ n( B: _" b1 X, J
  127.         McData.constraints[ 0 ].inherited                = false;$ u1 Y' I$ U. \" `4 p$ V( {
  128.         McData.constraints[ 0 ].suppressed                = false;
    9 g. q) E: z! Y3 M, s
  129.         McData.constraints[ 0 ].has_help_point        = false;
    % L, M0 {" @5 _9 d; N5 X3 w% k0 `4 l
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );2 W9 j3 g/ l6 f# W6 o1 M( b/ |2 j
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );
    8 w" @- R+ z/ O. u( L
  132.         uc1601( "这两个面进行相切操作", 1 );* e$ M/ ?/ _1 ?8 X
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );$ d+ h& Z) f' \( ?. v2 x
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );
    ! @6 `( `) o2 u4 v

  135. ' _! N- \0 r* _) ?; @4 U
  136.         tagObjectFrom        = NULL_TAG;- ^4 E$ @$ r, L9 P9 D* |; f
  137.         tagObjectTo                = NULL_TAG;" q' d5 {6 }9 F9 U6 c2 L# _
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );: O5 _4 l  {7 ?, ^1 D2 {
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );% Q; A+ |  h' g# k& Z5 P5 M
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    1 R7 j$ [' O0 K' H
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );' V$ C/ Z: t! B/ d; [
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;- s- g+ S* ]: _! Y! m  o
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;% C' l2 C0 B! j- ]& `
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;/ f# [7 K  P8 S. a& i  K
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    / A1 F& Z5 O; T( `
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;
    $ i% m9 ]# Q9 [0 x3 i5 V& W
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    3 N+ X: _& U. x' x1 b# ^3 x; }
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;
    - P  @8 u2 \3 l$ b4 C
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;8 G& j! f2 z4 s* e( U
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;
      F: D* k# r% {( ]+ f
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;) @+ A7 c& l  L& G) r. D
  152.         McData.constraints[ 1 ].name                        = NULL;
    ; k# T' H3 o2 S, N. w: ]; {  g
  153.         McData.constraints[ 1 ].user_name                = false;" D; d# G2 X6 Q' \
  154.         McData.constraints[ 1 ].inherited                = false;1 t1 h+ l8 h; ^6 V# m" L
  155.         McData.constraints[ 1 ].suppressed                = false;
    4 l" {4 n/ P5 M; @! ?
  156.         McData.constraints[ 1 ].has_help_point        = false;
    , M" i0 h3 P' F: ]
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );/ f' a4 A/ G3 ]: H: g. b9 g8 X
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );! U- s% o* v; h$ e: X* q3 l
  159.         uc1601( "这两个面进行相切操作", 1 );$ }' |4 o; h! ]3 V
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );/ V) \" Z6 p* c! V' m! E
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );
    ; p2 G4 r/ B; H; C5 H: |/ I
  162. " Y5 O, A+ O5 q' z  s
  163.         tagObjectFrom        = NULL_TAG;7 j6 d: c; w# i1 |& ~: Z" K2 t
  164.         tagObjectTo                = NULL_TAG;
    9 Q" w6 }& I+ K  s; d# q
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );) f3 h, p2 f% d2 N/ \4 N& a
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );
    2 ~& k4 ~: b1 f0 q0 b- U9 o
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );3 J8 U& ~7 o- }7 H8 H8 I
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );; i, `  Y5 J4 ]9 {- ]
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;3 [' x5 \$ A1 n& c
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;7 V( G3 B  D2 n8 h1 g1 ?+ n0 \
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;
    " L' g, T% i4 ]( {! R4 L1 S
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;
    9 m8 b8 b7 [3 y& I! ]1 P
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;
    6 M6 N! N& V! w* c
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;4 A  t/ K' F9 g% k0 {
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;1 W9 t# I$ R1 o
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;& [) t) D3 k5 ?- K3 H9 O
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;
    % O4 _4 v8 g' j/ b. o3 S
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;! f9 i. H9 I% ]
  179.         McData.constraints[ 2 ].name                        = NULL;
    - U5 R! A9 ~2 f+ y
  180.         McData.constraints[ 2 ].user_name                = false;
    + E4 n3 g0 f! V5 C: G
  181.         McData.constraints[ 2 ].inherited                = false;
    & \# K9 n2 q' _
  182.         McData.constraints[ 2 ].suppressed                = false;
    - a7 K/ W- n; ^+ P+ x- ^8 k
  183.         McData.constraints[ 2 ].has_help_point        = false;7 D1 N( w$ c& g7 b8 b" [6 |
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );; [& e1 w4 x/ ~4 s& I3 I' e$ \
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );
    7 S3 |0 G; |/ }) H' r
  186.         uc1601( "这两个面进行对齐操作", 1 );; o, }; z: z* M# C& f
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    2 K! y9 z$ ^) }/ |
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );' v6 D2 F" a8 i

  189. $ S$ Y# }3 N- k4 L0 @
  190.         double dblzTransform[ 4 ][ 4 ];
    8 `* {1 g9 I0 F) E: Z! G7 C
  191.         UF_ASSEM_dof_t Dof;
    % C' V0 M; j2 n0 T
  192.         UF_ASSEM_mc_status_t Status;
    " X+ e( V- g, A6 c2 z( q' o

  193. * _5 d- |- N' r; U- \- m

  194. 2 X8 R) S9 B2 _+ R
  195.         /* 求解约束*/! H4 z/ h; W/ E
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
    2 Y# ^; Q% M. q1 M/ {
  197.         if ( UF_ASSEM_mc_solved == Status )8 v1 u, y- P7 }0 }% m+ l; o
  198.         {3 `4 G* I1 p9 P, N1 O1 g
  199.                 uc1601( "求解约束成功!", 1 );+ K( o* p; `% l% w0 ^
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;
    , {1 m8 [3 l, S, q$ l

  201. 0 G$ v+ k- g( n4 c: f1 \. n7 h
  202.                 /* 将约束应用到装配体上*/
    4 \  y; g& H" M* i) [; {4 C$ ]
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );: b" P# K3 p8 Y8 {
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) : }; n  ~9 ^" {
  205.                 {7 Q8 T' V$ ]& m7 l; @
  206.                         uc1601( "应用装配成功!", 1 );* k, A. }" v; _; g
  207.                         ! o4 J, W" K& P9 J
  208.                         /* 更新模型*/
    & F- W9 O/ p* ]1 l
  209.                         UF_MODL_update();
    * V4 G* c$ H( V- f7 c0 x
  210.             UF_DISP_refresh();
    4 m$ e' R, d0 }1 p& @
  211.                 }
    2 U- H  g/ @2 ]! E, L8 ~; E
  212.                 else uc1601( "应用装配失败!", 1 );
    4 v6 y/ b9 b+ O$ W
  213.         }0 R" e1 v/ p9 K
  214.         else uc1601( "求解约束失败!", 1 );
    % b& a; `. s) |) q8 j" j2 G* `; G" m
  215.         }* k0 I# D2 K0 z
  216. }
    $ O9 U) W% v- T9 l  w0 u
复制代码

  U  Q4 _0 W; S, K4 {/ V+ ~. J! s) L" K$ R$ k1 j
! [9 `+ b8 G' b+ E3 ^" k3 s- d
  h' S0 B, H$ v- C5 r
7 @1 e  D8 S% r" x
; K- m& @5 w7 [; N: A

) |  q7 C: f* W  P$ L
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了