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

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
3 m% V  @( e7 o% Z' L" C; \9 \" W+ Q( D2 W, n, C+ Y
+ M& }- e9 L5 E, l$ U
1、装入部件9 U/ G2 P7 m9 v6 D8 r* O1 d
通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;
) ]  n! N' w0 s( ?4 D7 X/ Y/ _8 L7 b8 {8 z* j- q2 \3 w
2、创建配合关系0 C/ a$ _* T- B( l9 ?/ ]
a.通过函数UF_ASSEM_init_mc()初始化约束;6 ^) o: p! {/ X
b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;" T3 Y5 T& F! B+ s
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。2 Q+ l3 [  g, P9 T* \* \2 V( v+ X
c.通过函数UF_ASSEM_solve_mc()求解约束;
/ `/ H4 o6 I* m2 Q' Bd.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;
- A- W( M$ t9 n# b; G( Ze.通过函数UF_MODL_update更新模型。0 Q3 b8 q, v) Q+ w1 f# N! V1 ~& j3 a
$ i  _+ W* P" j0 S* o  O
  1. #include <stdio.h>
    % T" J- j) b2 Z4 s0 X

  2. 6 F) X9 r0 C9 k. b# r+ p- ]) i
  3. #include <uf.h>, _0 x% f' J4 x$ W; Z& _& M% K2 L
  4. #include <uf_ui.h>, V) Q* ~6 M' l
  5. #include <uf_obj.h>
    & N0 Q, z( K/ ^+ T  S6 r
  6. #include <uf_disp.h>9 g# o! |9 t8 G: A  Z5 N( x5 Q
  7. #include <uf_modl.h>
      T: B$ P1 v3 n) u& Z& J
  8. #include <uf_part.h>
    1 W5 |+ s$ M& R: d. Y
  9. #include <uf_assem.h>* Q& E$ G  S: X( d
  10. % D! [1 k8 {" o' g$ `' B, G3 |
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )
    ( |% Z( c' Z( g* Q
  12. . y7 f' i- ^' K2 f5 T/ }
  13. int report( char *file, int line, char *call, int irc );
    3 m1 s  }) V2 `" U6 f: F& T
  14. void DoAssembly( void );5 x3 _# O4 L; i
  15.   U# w- g! p8 J) U6 H4 U
  16. int report( char *file, int line, char *call, int irc )
    ) J8 A$ b' J- v7 [6 }
  17. {
    % g: D7 n' A) @2 j0 L
  18.     if ( irc )
    " _/ s( {9 R& }6 z6 L4 b
  19.     {; F* Q, q% J* D! |; S
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];
    ; m9 M  I( P0 b1 [- n  H$ m0 t# w% R
  21.         char msg[ 133 ];. r: l0 k: r; n4 R! t5 q/ b
  22.         char fail_message[ 133 ];
    5 C3 |  C  M$ g% w' f3 {+ I7 v7 I
  23.         int  len;4 c3 s0 v) B, E* n: s9 q2 @) Q

  24. 3 i( b7 B: I" S7 I3 y
  25.         UF_get_fail_message( irc, fail_message );2 P3 M0 a+ c/ m# ~
  26. 7 H' b) W5 E1 r$ L8 M7 N8 ]
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );6 D$ Q: ~% ~0 F% U  b

  28. " f4 K) H4 V) n
  29.         len = strlen( err_msg );
    2 ~7 R, V' S. a* b$ j# ~( m4 C
  30.         len = ( len < 131 ) ? len : 131;! b; B/ X5 v6 _% F; E
  31.         strncpy ( msg, err_msg, len );
    7 h5 w/ R+ @0 y9 y
  32.         msg[ len + 1 ] = '\000';& A1 h+ C7 e* D6 ?: r

  33. 0 T) [6 a$ }$ h  X9 ]
  34.         uc1601( err_msg, TRUE );
    2 r& S  k8 K- T
  35.     }
    4 f4 O8 @0 J/ i6 H  R4 S
  36.     return( irc );
    7 Q  R. J/ {* ^) K' f
  37. }
    6 k9 m' c) ]; i- t6 L: n

  38. 5 S0 ?- q( w1 \" U: O* C
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    0 ~: ^9 W, N9 A) \& E
  40. {
    ; k# `! S, o* w3 E3 P" _7 S
  41.     if ( UF_initialize() ) return;4 d4 Y, N1 q# U0 S; R
  42.         DoAssembly();1 [6 n; D- D1 L( z+ H5 g* v
  43.         UF_terminate();
      n  z9 [! i; f# u
  44. }+ }9 e! S; H) Z/ Q/ G3 g+ v- j6 U

  45. 4 B& f) A! j3 q: v) z
  46. void DoAssembly( void )( d/ X; g& _1 d
  47. {+ |1 R8 u# |/ \' Z3 u
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )& n/ `, V) y8 ?! z) Z1 @' C6 q
  49.         {
    - R# r/ a$ [6 @) c; t  ?- f
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );/ ~. q: x. U6 P- F. U$ C- t* Y
  51.                 return;
    5 `% l0 q/ ^  G, F" U! f( o
  52.         }
    1 y9 r( H% g* P2 [' P6 Y7 t

  53. 1 C3 ^! S; D7 i4 Y: I8 M" K$ y
  54.         tag_t tagInsCyl        = NULL_TAG;
    6 n! Q- G1 t% A3 S* y( \7 B8 c) Z4 e/ ?$ [
  55.         tag_t tagInsVBlk= NULL_TAG;6 o* U2 k& i2 [
  56.         tag_t tagOccCyl        = NULL_TAG;. W2 O" r5 M+ |, s
  57.         tag_t tagOccVBlk= NULL_TAG;: ^5 p( G. h! _7 B  `
  58.         UF_PART_load_status_t ErrorStatus;3 X" X& ~& N1 M
  59. 9 p4 @1 i; G5 c$ r" ?7 N7 E2 X
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };' {* h" M0 X0 L* u
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };
    % p: V2 [: a4 v4 @, y' I" |

  62. / h3 e. V9 h5 j/ V9 G3 S3 z$ G+ d
  63.         /* 装入部件GB2208_80_Vblock.prt */
    5 W! H, [; k7 E
  64.         UF_ASSEM_add_part_to_assembly(3 j- D4 j! r& u/ @# L2 o
  65.                 UF_PART_ask_display_part(),0 l* M' ^$ i6 }  W9 w% a( R
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",  {7 g  V5 }; }/ }# J
  67.                 NULL,6 s3 k  q- o0 g1 z% ?  F
  68.                 "VBLOCK",% F7 @: ]! m. r* _) }
  69.                 dblzOrigin,
    ) r( H9 x$ Y+ x; F0 ^8 F- |
  70.                 dblzCsysMatrix,% Y6 c  c6 r& G/ ^
  71.                 -1,
    $ U" m, S' q9 M  u. @- Z
  72.                 &tagInsVBlk,, P7 _' r0 D$ K1 T+ b' L
  73.                 &ErrorStatus );2 G" u4 K, P6 e
  74.         /* 装入部件Cylinder.prt */9 ~* i/ `: F. u+ X
  75.         dblzOrigin[ 1 ] = 50;
    ; f$ P  [1 S/ N/ m' m. H
  76.         UF_ASSEM_add_part_to_assembly(" g3 F8 e8 X# S% y3 _2 e0 A$ }0 i
  77.                 UF_PART_ask_display_part(),& u- a/ W: y8 w0 Y, s2 |/ h0 V
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",
    6 C# w6 e5 I( A- q
  79.                 NULL,
    * r  W; O5 a  H/ l5 c
  80.                 "CYLINDER"," d6 y* w9 [/ E: ~- q8 r/ \# k
  81.                 dblzOrigin,* x2 _( e7 z% Z1 h3 S9 q
  82.                 dblzCsysMatrix,% N* v3 s: W+ c) O9 ~
  83.                 -1,4 D( z, T; [+ H- Q
  84.                 &tagInsCyl,9 y5 t! l7 s/ L* E0 \
  85.                 &ErrorStatus );
    ; ~; @4 R$ W6 g
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );$ Z# x" X: J5 U; K# ^* l
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );
    $ D' T* T1 ^+ u* p& h

  88. 2 D3 s$ o& J2 z5 k/ N# H: S( p+ g
  89.         /* 创建配合关系 */
    9 C0 @* g2 B7 \
  90.         UF_ASSEM_mating_condition_t McData;
    . S2 i0 Y- D, R* r( X: |/ B2 Y
  91.         tag_t tagObjectFrom                = NULL_TAG;
    / }% X4 @; E$ `! ^' z
  92.         tag_t tagObjectTo                = NULL_TAG;) e0 R+ V+ M7 S; b' w, O
  93.         tag_t tagPrototypeFrom        = NULL_TAG;
    6 {- c! F0 h% U/ B3 y
  94.         tag_t tagPrototypeTo        = NULL_TAG;7 n4 J, m: n9 ^+ [* t6 Q/ _
  95.        
    " E0 Q2 v8 m/ z7 w! Z
  96.         /* 初始化约束*/
    # V7 _$ e8 O) @# O/ i9 @8 r9 g) ~+ ]
  97.         UF_ASSEM_init_mc( &McData );
    3 @& C0 Y" G7 Z& |+ S% s! N9 K

  98. 7 z5 R! l) H2 D
  99.     /* 定义约束,构造配合关系*/
    ( S3 T5 V* W' Z/ H8 x7 B
  100.         McData.mated_object = tagInsCyl;5 R6 y2 _3 e. R
  101.         # o9 w0 v- W  m* Q- j  c& t
  102.         McData.num_constraints = 3;/ O+ D# Y( p1 J$ Z& r" c% j: f
  103.         McData.name = NULL;
    * \7 J) H4 |9 t/ F0 z1 }+ A  D  H
  104.         McData.user_name = false;. |* g. G/ s4 I8 `! A2 ~. ^0 H& U
  105.         McData.override = false;
    3 E2 O* V3 o% w# w0 ]" Z' O  @3 [
  106.         McData.suppressed = false;
    & b. V! O4 ]$ ]2 Q4 p
  107.         McData.implicit = false;
    ! t) G* Y# ]" ]# y

  108. 2 h8 j; m: A7 J- S/ x2 D5 `- ]- b
  109.         tagObjectFrom        = NULL_TAG;
    . u. \: Y+ O2 ~6 R
  110.         tagObjectTo                = NULL_TAG;
    ; x- b) w  o+ Y% ^6 r# w1 _& E
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );7 E# [! [$ u- r. v; F
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );5 Q4 V8 A7 N+ K. x7 }! ~! N7 s
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );" J' w* P1 P6 W8 A0 `6 T
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    5 k& I1 m. v' C% e$ \2 J
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
    ( g5 K; w6 d6 y
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;
    7 y# |( w# Z% C" ^* Q2 x. y0 [- p* h
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;9 i( g0 j5 r+ t- }# b
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;, @, v  j6 d: W3 u# S5 n- C& w7 ~
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;
    9 T" [$ Y3 @3 V, a/ U
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;
    # ~, h' c- n* Y) F3 c+ i) Y
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;
      Z3 l3 B' K/ _# W
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;6 E+ L: L" e- D0 a' S2 v
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;  M/ a6 O& o( w+ F9 M& a6 Y, k
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;* {5 \( R2 f( \! E4 g
  125.         McData.constraints[ 0 ].name                        = NULL;
    5 K" m+ a9 I3 e& h# t7 V; X
  126.         McData.constraints[ 0 ].user_name                = false;
    & Y  V! w( m7 D
  127.         McData.constraints[ 0 ].inherited                = false;4 s! X( t+ s/ V) L
  128.         McData.constraints[ 0 ].suppressed                = false;
    ; l8 V6 E, O: e( P/ m1 p
  129.         McData.constraints[ 0 ].has_help_point        = false;
    * a: P$ e' P9 ~! T; t
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    2 ~( s. ~2 {5 r' E& O5 G$ q
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );* F0 c" R1 b, q* |
  132.         uc1601( "这两个面进行相切操作", 1 );! p: x5 r2 q: o% d: ~% k
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );9 R% _# E# Z; x" v3 W$ R7 O& j, \
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );2 i6 x" u( a5 V! ~+ u/ N

  135. % M" a- K% k  L: \  E. A" P. P$ ?3 ?
  136.         tagObjectFrom        = NULL_TAG;
    . A2 q' X# `% \: k2 l
  137.         tagObjectTo                = NULL_TAG;) E2 Q, T) @. o6 L- \7 g
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );. j! h1 R2 |: n4 |* `
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );
    4 z% T! E0 |. x2 D
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    ; X5 a( d; z" t; s
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    ) I1 P- F5 h% S2 `; p* C0 w
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;) c( _$ X1 I  @" L1 n+ J& ~' J% P
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;
    9 L9 s9 ]+ W( h! J2 \
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;
    8 ^2 X/ x: p+ }
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;; w0 _) z% q! l9 M
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;
    0 {$ r3 D( ?6 {4 p
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;7 M1 Y) K( S3 q
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;
    % S/ e& u& l, X
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;- g4 y' @# c1 _; @) T, v/ X
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;" A" S% Q6 t+ A8 G8 B
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;9 U9 w8 g/ |. t
  152.         McData.constraints[ 1 ].name                        = NULL;4 H4 P2 f" ?1 w* X
  153.         McData.constraints[ 1 ].user_name                = false;' M: W+ ?  c& A1 W5 ]
  154.         McData.constraints[ 1 ].inherited                = false;
    6 J2 O; m) J, U: O8 y
  155.         McData.constraints[ 1 ].suppressed                = false;
    9 J( K& \6 u5 i# i. K
  156.         McData.constraints[ 1 ].has_help_point        = false;5 m8 g& q8 s7 Z; X7 j& G
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );, X( V# a% |: M" r
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );5 _; w( V/ H% @+ \4 v- O
  159.         uc1601( "这两个面进行相切操作", 1 );6 g# n- b2 W( q" I
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    . }2 A. b) ^/ ]5 U/ ^; @
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );
    1 h5 w+ ~  T6 q

  162. ( J4 q/ ^( _  Z. e4 e1 v! h3 E
  163.         tagObjectFrom        = NULL_TAG;
    4 Y# |- {2 o+ v+ B" E5 b3 S
  164.         tagObjectTo                = NULL_TAG;/ z4 N6 N$ W4 ^2 X# ~2 d
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );
    & m& u+ f4 O" u$ u$ G- u3 o
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );
    3 O* p4 d! P' ]7 w! w) K" R- Y$ }
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );0 s! j3 s+ l& n8 ^" ?  a  c( e1 [
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );2 O. `" O, I$ ~  F, q" c
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;: b  ?+ u9 j/ z, u
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;
    / K2 R& Z" s+ I& o; e1 k
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;
    ' n& T2 F+ M# \
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;
    3 u8 w5 N. ^/ |1 o4 j
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;
    . f7 |0 Z2 Q7 ~& ~6 W1 Z
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;
    6 W- ^- C/ K7 z: w
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;
    2 ~- h. g2 N' t/ }4 {
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;1 P& b4 o- b: H" L. G% p# n
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;" ^8 i% A0 m# k
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;1 h4 e3 c+ H8 m
  179.         McData.constraints[ 2 ].name                        = NULL;
    2 g7 [5 h( z0 w
  180.         McData.constraints[ 2 ].user_name                = false;3 W  R! Y; p6 i0 b6 f( X' }
  181.         McData.constraints[ 2 ].inherited                = false;* v9 m1 `/ U/ d8 y2 ^0 Y1 L
  182.         McData.constraints[ 2 ].suppressed                = false;" n; x* ]. @% l* d  O& t4 Q; p+ Y
  183.         McData.constraints[ 2 ].has_help_point        = false;0 z3 O/ D2 a" O
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );/ Y+ f% z! ^. Z  o! m
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );6 Z7 O" t7 u+ U8 m1 m
  186.         uc1601( "这两个面进行对齐操作", 1 );! ]) ^% r1 O+ k* f6 }
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    " T6 O8 U& o7 V  `' W
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );
    " l- o2 q- T, h+ I* {
  189. 5 K: z# B% X2 Q4 Z$ m
  190.         double dblzTransform[ 4 ][ 4 ];
    2 L( Q, \: }. y3 z1 _' `: x( Z
  191.         UF_ASSEM_dof_t Dof;
    6 ^7 {$ q" C( l) J+ r
  192.         UF_ASSEM_mc_status_t Status;
    $ ^. J! ?, S( v: |
  193. . B$ o+ E: |3 J& a1 ?4 L5 @  f) H
  194. # m6 b0 ^+ x: ~9 i9 f  }
  195.         /* 求解约束*/2 U) }! F8 m, v8 f8 d
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
    : v+ y3 j: |7 c6 y. x
  197.         if ( UF_ASSEM_mc_solved == Status )
    / M9 T  ]! K! U" g" B( M6 E- ^
  198.         {/ `+ K% s+ T. u( J
  199.                 uc1601( "求解约束成功!", 1 );
    1 `. P8 c6 F+ K( k
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;
    ( i( w. y8 i! b; c

  201. 8 c. u. C) ?+ a- ?( a" q' F
  202.                 /* 将约束应用到装配体上*/# K; I8 @/ ]0 W
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );
    : {  z# w7 V- h" l( u% Y* m. L
  204.                 if ( UF_ASSEM_structure_ok == StructStatus )
    . L6 w: ]: V5 @, L
  205.                 {+ e, ^& a, V3 w) H, F0 q) `" A
  206.                         uc1601( "应用装配成功!", 1 );3 U4 d, g; G8 Y+ d
  207.                        
    $ N! e2 {/ d! Q3 D
  208.                         /* 更新模型*/* H! b0 s2 D( A
  209.                         UF_MODL_update();
    * y' o0 c& x# Q) Y
  210.             UF_DISP_refresh();
      ~% T9 k9 n' s. c2 o% H
  211.                 }4 C) a  ]2 M# t" q7 _
  212.                 else uc1601( "应用装配失败!", 1 );
    : [% o% q0 U9 L( C" f
  213.         }# n2 r. T' c( g  z' Q/ K
  214.         else uc1601( "求解约束失败!", 1 );1 @" q+ Z, J( l) o& j
  215.         }
    3 U, d6 H6 c- W' T9 [
  216. }, k% e* h. V0 \5 B2 T5 T$ o
复制代码
# h- }5 C( j" Z3 A7 g/ t

; Q  Y+ z" H6 Y+ f
/ |" f6 ?  I8 D( \6 A5 r5 l! z+ ?
5 s) Y$ K: x! V5 y( H- p5 v$ y5 ~! m1 e( G7 U% X) @7 r
) Q& Q, K+ a7 P
  r. n" [8 j9 m, s+ `1 U
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了