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

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤) d6 m6 I  p2 u' T$ M% q# x; V
+ U, c2 p, z. v9 b6 J+ Z
3 @* A- N: i& b4 ~) e; v: P; e% b
1、装入部件
. t6 W$ K+ T# H  k# E通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;* B) e; y+ h1 \" X# ~

" w; M3 y1 `% K4 y* V2、创建配合关系
' A) r9 d7 z) L/ ~! C( ^  x' H; ?a.通过函数UF_ASSEM_init_mc()初始化约束;! u9 \& `$ |' J
b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;- @$ P9 {: U% o; I7 i; d
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
# v1 |" E+ S4 i% x# l$ mc.通过函数UF_ASSEM_solve_mc()求解约束;
: m5 r+ n- {* Z$ n* e# _8 {8 Vd.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;0 b! ?9 |9 K, [$ N8 X+ C
e.通过函数UF_MODL_update更新模型。  A% Q! o0 t) Y& W7 }) _% V" R- W
0 @) `" K/ p% H. L: b
  1. #include <stdio.h>, O9 b- p) S% O1 G9 p( _
  2.   z4 W7 b9 y8 i' d$ a" f
  3. #include <uf.h>5 g- ^9 D/ b" J3 h; W$ [  `" G
  4. #include <uf_ui.h>
    3 K0 Y  @/ u( d
  5. #include <uf_obj.h>
    5 |7 v% a( ?# g4 [
  6. #include <uf_disp.h>( P6 D: R3 ~2 o) S
  7. #include <uf_modl.h>' K2 @( k+ }3 C$ R, b
  8. #include <uf_part.h>
    - I# [$ r9 H7 G$ Y- }/ W
  9. #include <uf_assem.h>
    + [3 G, Y) O9 e5 L* M

  10. 0 x4 j  n8 g" n# q  T# Z
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )$ g. |, |& S, ~8 d0 y9 ^" s
  12. # w7 J9 c9 i0 b0 L. k
  13. int report( char *file, int line, char *call, int irc );5 X$ l! _- s2 n$ e* f
  14. void DoAssembly( void );
    9 c# Q- X6 @% x* B, Y

  15. ; o/ V8 n( U! o+ B( _; O% X/ W
  16. int report( char *file, int line, char *call, int irc )9 p) S# y' \: t' T" u* `( I( h' Z6 B+ p
  17. {1 ?1 S) k- g, Z4 N9 _
  18.     if ( irc )/ T8 n; r1 ?& W! }: o% {1 A5 {2 R
  19.     {
    5 O- a3 V  j  U- i  C
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];5 C3 X( j: q& c& [2 z) N2 E: J
  21.         char msg[ 133 ];# r, h$ U( z( k5 V( q* q, x
  22.         char fail_message[ 133 ];
    $ z) t: _; j' {( c. i
  23.         int  len;
    / v1 g: Z4 F3 M# p) S

  24. ' Q# b) y* w$ J5 J3 u9 m
  25.         UF_get_fail_message( irc, fail_message );+ J8 D0 R1 y% e" t

  26. & c* n2 c) g2 t0 \8 U
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );
    : j, Q( V+ e8 `) a5 p. Q' o

  28. 9 f  u& \5 w% `# \
  29.         len = strlen( err_msg );; |' T: ~- a. n* N" `- [
  30.         len = ( len < 131 ) ? len : 131;0 W/ I) y  d: \. G6 Z( r. \* F
  31.         strncpy ( msg, err_msg, len );) I: e: q3 H4 Y, V
  32.         msg[ len + 1 ] = '\000';$ b- S+ f: x: t6 C
  33. 3 F& w4 a) }' B- A) H/ F; U0 z
  34.         uc1601( err_msg, TRUE );. }* @, a4 d$ A) z% F" ]& [
  35.     }: }1 D& |7 z$ {4 y
  36.     return( irc );* W: W8 E$ X' D: o5 Q9 s
  37. }
    $ U- w$ O5 B3 n0 G% {8 b: v* d

  38. 9 ^1 a# N1 U7 S
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen ); g$ ?3 o- k$ O. @
  40. {
    . {* R( ^" P/ F2 R; e6 M: N
  41.     if ( UF_initialize() ) return;; |8 e' @$ s' I- ^: [
  42.         DoAssembly();
    9 B9 b$ I: J: j% W# o2 p
  43.         UF_terminate();
    " Z, F' ]. e7 a, C  q4 q5 j
  44. }6 g* u( }) a/ S$ C# Q  x

  45. 5 N3 K- B& G( z1 i5 K! T8 g
  46. void DoAssembly( void )
    : W# A+ o5 s5 ~) ^+ H
  47. {$ R% L6 A* ~  v6 a1 G9 y
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )
    1 D& n' O# ]9 F! f, p. O
  49.         {
    1 x& ]7 L- G  L
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );& W* K: O# m% M! y1 e. r
  51.                 return;% e% J# z; v8 a7 [& c
  52.         }3 H( r$ v7 C7 I

  53. ) e! l! o5 {0 X/ f) Z/ k( e
  54.         tag_t tagInsCyl        = NULL_TAG;
    ; n' e& l6 Z7 F+ n% A/ `  x
  55.         tag_t tagInsVBlk= NULL_TAG;
    / b) d0 I* c( [! f
  56.         tag_t tagOccCyl        = NULL_TAG;* N! L& g! e4 U
  57.         tag_t tagOccVBlk= NULL_TAG;  O) \* U: e9 z! `
  58.         UF_PART_load_status_t ErrorStatus;! j% M' r, _* B
  59. 1 w( H, M, {0 G: L8 T* M* d" d+ L" d
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };
    2 f0 j1 {/ S0 t
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };
      u' U3 T; X/ D8 ~

  62. , O! w6 ]: z+ s. \. K8 O" |
  63.         /* 装入部件GB2208_80_Vblock.prt */
    1 q2 f% z' A- a/ u3 C2 ^
  64.         UF_ASSEM_add_part_to_assembly(1 @1 W3 K7 S* s' V6 v
  65.                 UF_PART_ask_display_part(),
    3 L. J4 w6 O. r- r, @) i7 o
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
    ! z& x- C& x5 G4 p8 y( i
  67.                 NULL,
    8 l4 p( F& B' y* O3 O4 ?% _
  68.                 "VBLOCK",- U/ k+ {) i% z5 S$ X% Y2 @
  69.                 dblzOrigin,8 i- B+ k9 G0 t; Z, Y6 a* B$ _
  70.                 dblzCsysMatrix,0 u. L; U' Y2 _
  71.                 -1,
    ; e2 F' I% o( `. W
  72.                 &tagInsVBlk,
    * ^+ h& N6 F+ b: ^( r
  73.                 &ErrorStatus );* Q; q. F4 @2 G7 S
  74.         /* 装入部件Cylinder.prt */& |/ m' Z- z4 k
  75.         dblzOrigin[ 1 ] = 50;
    2 Y1 T; d; a9 s9 S4 f9 ^+ `" Q
  76.         UF_ASSEM_add_part_to_assembly(2 v& K% B9 q' v" w: O, a
  77.                 UF_PART_ask_display_part(),
    1 k: Y2 h( I; ^' h( {; j# |8 [9 Y& r
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",9 {9 L: m% l: b
  79.                 NULL,
    ( j' n  G* T0 I5 ^- x2 y
  80.                 "CYLINDER",3 q+ V3 C  h: q+ L* [" P
  81.                 dblzOrigin,# G+ D% B; G/ |  u
  82.                 dblzCsysMatrix,
    5 V! m) q/ r* v, v$ p
  83.                 -1,- o/ K- G& r( Q) `
  84.                 &tagInsCyl,1 N/ a1 x+ e5 ^8 u/ Q# d
  85.                 &ErrorStatus );+ s3 R2 M; U3 l' x: i3 s9 X5 T
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );4 [$ ^( G) }' s
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );
    : r7 {7 }' O6 F; @

  88. % ~6 }' f! N/ O2 c) l4 N6 P
  89.         /* 创建配合关系 *// F2 M5 i) [# q2 }
  90.         UF_ASSEM_mating_condition_t McData;
    4 m8 ^' Q  q6 Y8 @8 \5 z
  91.         tag_t tagObjectFrom                = NULL_TAG;! c/ [1 x1 G, G3 p+ c" X, S
  92.         tag_t tagObjectTo                = NULL_TAG;
    0 ]4 J9 B/ m  s
  93.         tag_t tagPrototypeFrom        = NULL_TAG;
    # E2 G1 h  F" U
  94.         tag_t tagPrototypeTo        = NULL_TAG;, ?2 i3 _& V! x  {0 Z5 o! J& Q6 D. Q3 U
  95.        
    : ?$ K) g( \3 m( G
  96.         /* 初始化约束*/
    $ E, j. D9 G8 G4 P
  97.         UF_ASSEM_init_mc( &McData );
    2 t: h8 j" P- Z8 E1 P
  98. ! q: w) j8 R. U; P: l: I0 L+ g
  99.     /* 定义约束,构造配合关系*/! F1 R( v0 a* i* p
  100.         McData.mated_object = tagInsCyl;
    ! U0 A# k: `% a( C
  101.         9 g  E  W" ?* y7 _* h7 v
  102.         McData.num_constraints = 3;
    + @! ^# q% z  b4 F$ Z$ C% G1 H* r
  103.         McData.name = NULL;+ ?( a- j/ l) c  X; W2 C, F
  104.         McData.user_name = false;
    0 H$ I  S) J% r" G! F
  105.         McData.override = false;
    : ?. m" s. i% [, O- S
  106.         McData.suppressed = false;; R8 J1 Z* |+ [6 d
  107.         McData.implicit = false;
    1 M! b8 T' |( c0 x
  108. : x7 n+ H2 R2 f. Y
  109.         tagObjectFrom        = NULL_TAG;
    + n2 T$ Y! s( Q* q, n) R0 `/ v
  110.         tagObjectTo                = NULL_TAG;
    # a+ f, T0 h( C7 j  w, l: Y
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );2 n% c0 B- i9 d$ B, t" a2 \6 B
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );/ a) b2 L, h( C- v4 a% H! x
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );  R* v% g1 q8 ^& `3 N
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    * }" u' K! G0 E& t; g7 u
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;# X; \  f, R( P3 k
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;' @5 `5 z1 ?4 @# d
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;
    1 `& C# O' A3 U9 \( n7 z8 J/ L
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;
    $ R# q8 v" W# i+ Q
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;: ^- ]6 B0 T6 P! h( g- V  i0 w+ n
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;
    4 w# y5 a) C1 `" m& t) q
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;
    + ^0 I' b0 h3 I, J- h& Z
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;
    & M0 H( {. @- h& I8 ]. L; X
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;) a/ {3 }0 h8 L% T$ c
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;
    * m, }6 Z" U) w# O4 M5 @' z! c) d
  125.         McData.constraints[ 0 ].name                        = NULL;& G# ^) I' ]) Z' N* v6 F
  126.         McData.constraints[ 0 ].user_name                = false;
    ; |  c) `; @* x% g9 }. n
  127.         McData.constraints[ 0 ].inherited                = false;( Z9 w* d6 L5 [
  128.         McData.constraints[ 0 ].suppressed                = false;0 W% p3 o6 {+ U* m, @! V
  129.         McData.constraints[ 0 ].has_help_point        = false;6 z4 `1 K- I1 G0 g0 k8 c) w
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    0 k2 k* H) H6 \" X+ _
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );2 o( H  \5 D, U; L# N7 X7 u1 m7 T6 D$ w; f
  132.         uc1601( "这两个面进行相切操作", 1 );
    * ~/ P8 p0 U4 S2 G
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    % s4 q# F3 U' j& [. X% d
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );
    4 u% Z( l4 I3 U, I9 x/ Y

  135. $ x0 y4 c) d3 W! p4 b$ M/ f
  136.         tagObjectFrom        = NULL_TAG;
    , J/ c/ L$ K1 x
  137.         tagObjectTo                = NULL_TAG;
    0 u% V6 m! Z" w; |3 E0 H" t8 a5 i
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );/ [  F5 E$ z# I7 a8 m/ P
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );% p$ j, _. u5 ~$ o: x
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );" E% B1 G0 L5 j/ g! i
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );* P8 i' K5 b# x9 x5 P
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;! p/ b6 \% G7 k) [1 \7 A% y1 N
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;9 I0 s! p2 K- Y* n# l- v* @9 L' M
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;/ [: f  q. @7 q4 m
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;% d3 X- T; P+ s) m2 d
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;  X# N1 C3 |- k2 }) o: n7 _
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    . i. w( T% J( b+ h8 X  ]) I' d
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;' |$ r5 ~+ f/ S( I; C
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;- M8 Z/ _5 ?  y- i: T/ n4 L
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;, R( [3 X7 E' G% b" X4 ~4 m$ h  L
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;
    - m3 R! Q% P  I& F; ~6 E
  152.         McData.constraints[ 1 ].name                        = NULL;
      \; A3 o- Z5 b$ `  j* V6 {
  153.         McData.constraints[ 1 ].user_name                = false;
    ( ?# I, g# ~8 R& z
  154.         McData.constraints[ 1 ].inherited                = false;/ b* w$ \. b. c5 l- a# u( k
  155.         McData.constraints[ 1 ].suppressed                = false;4 t* C2 @( Q% l" l/ B* x
  156.         McData.constraints[ 1 ].has_help_point        = false;
    $ W3 B. ^3 e; P$ W
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );6 X6 U; N; |# m8 y" d8 M% F% A2 x
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );( Q& `: B" o8 b# g* `4 U. v: X
  159.         uc1601( "这两个面进行相切操作", 1 );% U1 _. A- Y! U6 w
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );8 O- `: Q& B0 q
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );
    - e* q( f1 T: v7 ~0 O
  162. ) L. x4 R1 Q; H  ?
  163.         tagObjectFrom        = NULL_TAG;! j- K% e3 U- N* k6 H
  164.         tagObjectTo                = NULL_TAG;
    * r6 q+ p, J4 `3 G
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );9 u; T2 o7 ~2 }- A. F0 W$ ~
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );: ~5 O; [8 P& Q/ i/ ]* q/ `: p) m
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );! }% B/ g% Z! \: ~7 Y; S
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    * c0 T9 j! o- F: k# n0 K$ f
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;0 a  g# i: ~( a8 a& N% Q0 C
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;
      s1 E3 f- v4 p. X! z
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;# M7 x" V- {' W0 r- _/ f
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;% E9 p% |& f" e
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;
    4 Q, w; o' \8 H+ ^) J5 d
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;  }; f7 b5 e2 Z9 h6 p
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;- V+ t# `8 v* g
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;7 L1 E0 d/ H, ]% x6 s, Y' l
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;
    & ?, j! f. \  d: }$ X8 p
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;
    6 @8 M2 L" D2 t6 d& J$ d
  179.         McData.constraints[ 2 ].name                        = NULL;
    3 d& O8 g2 g& H; W! W: a
  180.         McData.constraints[ 2 ].user_name                = false;$ G" C8 C" M. q) {
  181.         McData.constraints[ 2 ].inherited                = false;
    8 ]2 Y7 e7 j) J
  182.         McData.constraints[ 2 ].suppressed                = false;
    9 e; m. }2 U( g) S: |
  183.         McData.constraints[ 2 ].has_help_point        = false;; q3 d8 q( J7 H4 Z$ l+ ?# e% X
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );# ?& I& Q# E/ U  n
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );. I) c/ h" e" ~$ v3 N$ d( ^: m
  186.         uc1601( "这两个面进行对齐操作", 1 );' I7 Y0 U$ G1 a3 S% U+ o
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );' r9 b8 c  \1 ?5 Z
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );5 Z* _0 q5 U3 b/ j  H6 u+ ]9 c7 t

  189. , P2 i9 r: t. a1 V
  190.         double dblzTransform[ 4 ][ 4 ];) D. k) y/ t& h+ S" x3 w" f
  191.         UF_ASSEM_dof_t Dof;
    ) y5 f% C5 s" E' P9 r
  192.         UF_ASSEM_mc_status_t Status;' ?6 y6 r1 O) A& f7 `
  193. # G  }/ l$ q0 A8 P: z

  194. 0 W3 T8 e  |: k  q- X0 x
  195.         /* 求解约束*/+ e6 E; u! |: ~
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );" q$ n) |9 g5 l& A$ H$ [6 G+ _& {0 q) a
  197.         if ( UF_ASSEM_mc_solved == Status )6 y3 W; e( G6 O! a
  198.         {
    , S, H  M' Q! F( X
  199.                 uc1601( "求解约束成功!", 1 );
    / N- F9 N# l. k1 E
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;
    8 A: y+ k& m* y5 O6 B! U

  201. & x. N% G# d! z5 e! L( v
  202.                 /* 将约束应用到装配体上*/  y3 R* q( F/ X" p2 B1 G5 G
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );* {2 g& H+ K5 l5 G$ z( T7 e
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) ' a* s; o% v1 ?5 c" h5 b: C# s
  205.                 {5 u+ U) ~2 v& @
  206.                         uc1601( "应用装配成功!", 1 );1 `- _9 U. s9 Y9 j& z9 y1 |9 {
  207.                        
    6 e" {8 D! T2 T5 a  R- `! H
  208.                         /* 更新模型*/
    3 L/ C, E/ y3 ^' i5 ~# `$ A1 o$ f
  209.                         UF_MODL_update();
    , U& y  N  O6 E1 @0 b
  210.             UF_DISP_refresh();9 @7 c. F$ q) [! A' h7 R
  211.                 }
    9 F; j; q' _' t( ~4 f
  212.                 else uc1601( "应用装配失败!", 1 );5 H- X4 @- s( x. ~0 D/ e
  213.         }
      n+ M0 A, N2 z+ L) h8 T
  214.         else uc1601( "求解约束失败!", 1 );
    % J8 P) l0 D1 q' f3 w" Z
  215.         }
    & i; J+ G9 d$ f5 w9 ?
  216. }7 j6 X5 q* C; k/ s9 ]- {
复制代码
* N5 i: o  s* u" V; \1 T7 s5 a

. ]* n5 {3 v7 `# X5 u# s( N8 [, `
9 g. N" z; ?2 G$ F& ^6 r0 |( [( v% Z$ J* t$ L# }- B2 h2 ]
& c: z5 z& H: b: k% j5 j) Q

/ i. i. d( h5 f( }+ l) a3 q

& X+ O% c2 k1 B4 k8 Y/ T6 B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了