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

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
) u( b0 G5 ]2 S( g3 p$ @% ~& ~" |8 s5 R$ \2 ~$ c

. U1 ~: d  V; O! k1、装入部件
& S* O' b# X- t9 l3 w4 d+ g通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;
  X7 Q. h" M' l/ x7 ?4 a
# ~# F! q0 @4 [9 _: v2、创建配合关系9 \6 @# s6 f; U: ^
a.通过函数UF_ASSEM_init_mc()初始化约束;! G! B8 L: K. {/ R- T% l
b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;' M. ?" l- m& P8 z* A2 Q, f
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
3 A. W$ Z6 X, c' ^c.通过函数UF_ASSEM_solve_mc()求解约束;
( a$ K# d1 n9 E6 y% _& {2 ld.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;6 t$ f, T( j! N1 X* }7 q
e.通过函数UF_MODL_update更新模型。
3 ], V) J* Z0 b4 F4 R2 D/ z8 {( f
, [1 s: W, h' t( q. V, C
  1. #include <stdio.h>
    % {; T  I  P$ K3 @8 H. K1 {
  2. & |- d  S  b$ V' f! m& s
  3. #include <uf.h>0 h% s( o* w$ \: |9 ?
  4. #include <uf_ui.h>
    1 L4 E2 B6 l- A2 y6 Y0 }. N
  5. #include <uf_obj.h>
    ' X8 q% \) P$ i
  6. #include <uf_disp.h>
    " _8 S: v) H, T4 V& a6 _# _
  7. #include <uf_modl.h>, G2 n) U3 _4 r$ K7 |5 c% z% l
  8. #include <uf_part.h>
    9 d9 s! V8 v9 m9 y: N1 U: Q" {
  9. #include <uf_assem.h>, r. T6 {+ r3 ^3 A7 v5 u/ i
  10. , `5 z* k. M& c& U
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )
    6 j: F* `# r5 `, r& c) V* P8 ?4 q

  12. ; g& y: L$ r6 ]  P
  13. int report( char *file, int line, char *call, int irc );3 T0 W$ ?4 {' j7 Q
  14. void DoAssembly( void );" j+ s. I3 n/ J* N$ ~, u; M
  15. + g& T& \  ~! O2 I$ h9 z2 m
  16. int report( char *file, int line, char *call, int irc )( D& v# I! `* p/ C2 z/ ?9 ]
  17. {; ]% B! }8 f1 i. e: @3 T
  18.     if ( irc ). B# o: I# T* |' [- w+ s
  19.     {
    $ ?  K& H- E9 q- z* [
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];7 _  ~) l6 ^' P4 o1 E
  21.         char msg[ 133 ];
    5 q+ @3 p$ |3 c; ], N9 b
  22.         char fail_message[ 133 ];  D' M: z$ z" S$ g  g6 B4 M3 l1 k+ l
  23.         int  len;! v4 |  H  x, q1 ]5 G

  24. " h' p4 N* s. ]  R
  25.         UF_get_fail_message( irc, fail_message );0 z) h! Y9 U4 v0 S; W
  26. 7 s2 ]0 z6 f0 y# Q2 G
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );% c/ D. u5 d0 L, U/ a
  28. ; j' ^, m8 y# n4 e
  29.         len = strlen( err_msg );0 b, K- n% W% j, ~
  30.         len = ( len < 131 ) ? len : 131;
    " p  k  ?6 V. T6 b: o* s" J! R$ F
  31.         strncpy ( msg, err_msg, len );
    ; B) p# l- O& `4 ?! b2 n6 K
  32.         msg[ len + 1 ] = '\000';$ ]6 l- @6 B9 ^9 n7 P0 u

  33. * B: d, e% v& q
  34.         uc1601( err_msg, TRUE );; R- e; u# A$ E5 ~6 S7 H
  35.     }; c# L7 N. s( c, @% c/ f  c
  36.     return( irc );6 q3 o  w/ P" h, }9 |( `
  37. }2 t$ B$ u7 }+ Z: C3 O

  38. 8 I; T( F" A& J
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    9 r6 \1 j" c. N6 R; B* i
  40. {
    9 Z2 ]  E3 @" X$ Z, p6 n
  41.     if ( UF_initialize() ) return;
    4 y- d! P+ d/ _2 d# `
  42.         DoAssembly();6 b+ K+ |5 i! J- f& |0 a; W8 q
  43.         UF_terminate();
    5 H$ p0 A! r# t! K* S
  44. }! V' h# u+ D% m7 E" [# P" K
  45. , ]$ h3 i# M- O4 {3 e/ c$ ^$ q) ^
  46. void DoAssembly( void )
    3 d; _5 U# M9 B; Z2 N
  47. {
      T$ _) Y" p+ ~0 x5 ^' y
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )0 S# L% f: C7 j2 B
  49.         {# x+ d! R$ c/ |9 ]
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );
    # [7 i2 G' S5 L4 a' }
  51.                 return;
    4 @- Y$ ~* v2 C2 J
  52.         }4 D2 ?, Y' x8 E
  53. ( w) ~% y1 Q$ W5 s* K9 ?, R
  54.         tag_t tagInsCyl        = NULL_TAG;/ ^6 i8 @* V( w# ^! c; D
  55.         tag_t tagInsVBlk= NULL_TAG;: ~( S$ }9 d8 d$ x- g
  56.         tag_t tagOccCyl        = NULL_TAG;0 \1 }! Z1 O: j7 \6 m
  57.         tag_t tagOccVBlk= NULL_TAG;$ `; U3 h9 Q1 ?( C" ~' g  I+ `2 j+ q" j
  58.         UF_PART_load_status_t ErrorStatus;8 G8 Z3 b; \4 i' z& ?3 g4 f" v

  59. 7 S! ?- Q" \. v' w  C
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };
    8 O) c& u/ ?0 a0 ~7 x- o" o4 a" t
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };
    0 B; S- H9 K* I; |

  62. + q# J  c: j. I4 b+ n1 A
  63.         /* 装入部件GB2208_80_Vblock.prt */- `2 }3 L- }# P0 M5 \( p" N
  64.         UF_ASSEM_add_part_to_assembly(
    3 G7 g0 `7 q8 k) _& n* r' N+ @6 @
  65.                 UF_PART_ask_display_part(),
    3 F* z  X% L9 w$ i7 u( m( @
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",4 v9 o4 t! `1 W% H- e# k+ a
  67.                 NULL,
    9 }- ]5 `4 S8 j3 x: ?
  68.                 "VBLOCK",
    " i. e) ~4 }- B2 N* Y
  69.                 dblzOrigin,9 X& v# `, c1 c. ~
  70.                 dblzCsysMatrix,
    ' a# O0 Y2 C6 R" z: I9 |% E
  71.                 -1,
    $ `/ l" x( i; b% }, A* \- @3 h3 E
  72.                 &tagInsVBlk,
    3 i( X3 C( O. o- m8 `
  73.                 &ErrorStatus );
    , D9 \, `* F) q- i! s
  74.         /* 装入部件Cylinder.prt */2 N( g" i4 |% t! L5 h7 w
  75.         dblzOrigin[ 1 ] = 50;
    9 @0 z$ B# l3 Z% z, H, z' O+ f$ v; k
  76.         UF_ASSEM_add_part_to_assembly(
    " [, X+ k* L5 Y4 R6 _
  77.                 UF_PART_ask_display_part(),  L! O% x0 Y: J6 Y+ H$ a" C% w
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",
    0 F9 N) d1 _& g7 `
  79.                 NULL,1 ~5 j! o+ R, @# q4 c
  80.                 "CYLINDER",
    - @9 p: C5 B4 ~: l' o
  81.                 dblzOrigin,5 ~( J2 X7 e& w; Z7 M, d* E: b
  82.                 dblzCsysMatrix,
    6 H9 V; R$ O+ M) v% F
  83.                 -1,! n  Q5 G) J: B( ~! V) r
  84.                 &tagInsCyl,1 \- J% {% Y9 ]7 f
  85.                 &ErrorStatus );) {; A+ q# D$ H0 `
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );
    / L; I! S* [5 S+ L
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );2 _) |$ O5 e/ _3 z9 J5 |
  88. 7 y; `9 r" j. K. g' Y
  89.         /* 创建配合关系 */4 [) d; G; b3 z% L, A
  90.         UF_ASSEM_mating_condition_t McData;
    - B% V" y. p8 v7 W4 [
  91.         tag_t tagObjectFrom                = NULL_TAG;2 `8 [/ f. g7 L" l3 N2 d
  92.         tag_t tagObjectTo                = NULL_TAG;
    7 d3 C* s! Z6 m  H) ?  a8 h. p- m$ U
  93.         tag_t tagPrototypeFrom        = NULL_TAG;
    / z1 Z$ k- T' e) u5 Z
  94.         tag_t tagPrototypeTo        = NULL_TAG;3 k7 H) j5 ~1 Q5 B* L
  95.         , C6 u7 T. a2 O( J
  96.         /* 初始化约束*/  O3 y# D! ?& _/ R( y1 Y* ]% W* W
  97.         UF_ASSEM_init_mc( &McData );) v/ z: R, f, L, t' M: T2 k! D# h
  98. # q7 G. \  @) U
  99.     /* 定义约束,构造配合关系*/
    - o! _9 g2 C9 |0 |
  100.         McData.mated_object = tagInsCyl;5 _. \8 E- o: ^1 V6 P: l
  101.         & W8 n( G4 T% ~2 {
  102.         McData.num_constraints = 3;3 v. @: F% `; J8 m
  103.         McData.name = NULL;
    4 N9 F# M5 o% W5 g1 ?& @
  104.         McData.user_name = false;
    - c: s/ [* |8 l! D* a
  105.         McData.override = false;
    7 k; D7 e7 N' q. N8 Z1 \
  106.         McData.suppressed = false;
    ) ~" b5 H2 ^6 W/ d/ e: R9 E* g: l! f
  107.         McData.implicit = false;- c$ F. e8 l# I& s
  108. 6 Z& o$ l7 E1 S( s) W6 }
  109.         tagObjectFrom        = NULL_TAG;
    ! z, n5 A" Q% U; I; Z4 b. v/ f* m+ P
  110.         tagObjectTo                = NULL_TAG;) }7 P/ A( G2 ?  B: o
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
    5 _+ d* x  m( s; v: R
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );6 i" o& E$ A4 Z; n. H: X5 F
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    , |9 G' q5 y9 M; M/ ~0 B0 v
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    , a" {% n  w$ ^8 K! e4 T; N2 P$ n
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
    ' G$ G; l* {3 T8 b
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;* w; J/ D& o1 Y  D" H
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;2 V6 `+ l- G' A8 N
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;
    ( K+ ]% ^3 \2 M4 d, I
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;3 J, |& k  Q7 q
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;: z. _- H6 J; y8 k! C
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;& L3 V- T+ K5 I! K
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;; T; X+ H& p  n  K- f5 K
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;& i2 P) R! Q* v/ ^2 d1 ]9 l
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;, r3 K4 N, K" j
  125.         McData.constraints[ 0 ].name                        = NULL;" Q4 |" B( J3 n0 S* }8 m
  126.         McData.constraints[ 0 ].user_name                = false;
    7 H; N. _7 V6 w
  127.         McData.constraints[ 0 ].inherited                = false;0 M6 U+ p: `9 }7 d: j
  128.         McData.constraints[ 0 ].suppressed                = false;1 T; U8 Z6 ?- f5 B& f: Y
  129.         McData.constraints[ 0 ].has_help_point        = false;
    ' r+ t; ]" t0 n/ s+ c5 f( |
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );$ s3 k0 `# u5 q% E1 ?
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );
    / Z* {4 k) J* E
  132.         uc1601( "这两个面进行相切操作", 1 );
    2 ]: s0 V( V9 _+ K  t0 V4 b* z
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );+ R; ^0 r0 x/ F3 S3 s- ]
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );
    5 E& ~; ]7 r1 f9 u

  135. * L# K0 b5 u& f- h1 h$ C
  136.         tagObjectFrom        = NULL_TAG;
    0 K; C% o+ A4 t" w5 E9 l, W
  137.         tagObjectTo                = NULL_TAG;
    & f0 {, C1 @6 t
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
    : Y& l4 r4 t' m  _/ ?: X9 S# U
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );% C- h( X" n8 m/ |
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    4 `4 W& p# Z# t$ J! X5 @9 O" s8 h
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );4 f! \1 P* y0 C* g1 J) v
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;8 r) m: Z* R1 |) Q% W, h7 s
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;
    4 s4 h/ Y( Y" t+ d2 S
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;
    8 z2 u" \) q# e7 Q) b
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    8 h! g3 q- Z6 q: f: X4 e
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;$ |% r0 Y0 r" M# ]0 w" u+ x- h: o9 D
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    ! M  |- u( h' P. A' H$ E% |4 l
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;
    3 u- ]9 o( I$ g8 W( b) c
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;
    # T* j; g, Q* N) K- k
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;" [; |) t5 }3 V  M
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;- x; M$ ~4 u4 j& ]2 E6 X4 i
  152.         McData.constraints[ 1 ].name                        = NULL;
      J" ?( v3 B1 y$ Q. D  T
  153.         McData.constraints[ 1 ].user_name                = false;
    , |/ n- ~: A' d# O4 n+ [( e  {, |
  154.         McData.constraints[ 1 ].inherited                = false;
    ' K" x2 I3 s3 O* H% P  z# \
  155.         McData.constraints[ 1 ].suppressed                = false;
    ) D1 R4 D. {" b2 A
  156.         McData.constraints[ 1 ].has_help_point        = false;
    : K1 j+ T& ^; a+ n; u
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    ( D6 T( P- P% u: [2 L
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );9 c' _9 h5 v; t: x" B$ b( f
  159.         uc1601( "这两个面进行相切操作", 1 );1 \/ Q6 l2 a  d$ }6 Y
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );8 ^3 O/ c5 u: S* @5 P
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );( \4 Q( l8 e( D

  162.   l) t- U9 V$ A4 l$ O4 n
  163.         tagObjectFrom        = NULL_TAG;
    8 |2 N! ]  P: h% d) C
  164.         tagObjectTo                = NULL_TAG;
    + b6 J9 f+ \# B
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );# k  ~/ k& K: z! d
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );
    ; j7 w# }% h. b# y
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    6 X! {$ J, x- E
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    1 o" o( s' s4 z+ m2 w! I
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;
      j) E# W" n% [- u+ E/ v) T: R. X% T
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;
    3 p- I6 X# O/ C
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;
    1 ?# q) D0 g0 w, n+ q$ f( d
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;
    & `* b& v. F/ E2 X& [
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;- X1 g6 b& l( c7 J0 b
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;
    0 u) o& z  y) k1 g0 w
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;- f$ y1 ^% V( L! L& T; o- b: H! K
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;
    1 Y7 V7 N6 v6 W; p: b" P- c: L
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;
    4 ]+ _3 a$ z* A$ \3 B& q, |* [4 k7 n
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;
    6 K/ \& E: z6 j# I6 h7 B  D7 B
  179.         McData.constraints[ 2 ].name                        = NULL;
    : r/ g3 u: s# [9 F( B! r9 ~7 v) t
  180.         McData.constraints[ 2 ].user_name                = false;8 ]$ ^: ?6 ]5 g& v
  181.         McData.constraints[ 2 ].inherited                = false;% P8 A8 y7 k; o4 Z/ H# Y
  182.         McData.constraints[ 2 ].suppressed                = false;( O& R8 V; t, w& J- g
  183.         McData.constraints[ 2 ].has_help_point        = false;
    1 A% q1 r. J3 p# _* Y
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    8 f$ j8 D, p( D. h
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );$ @0 s- U1 h1 r( T
  186.         uc1601( "这两个面进行对齐操作", 1 );
    / H3 h1 |$ K' h' s
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );4 ]$ k: |) ?% e9 B  N8 b" H. |( D4 }
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );9 G# a7 C$ I" i- D" o  z

  189. 4 L9 W2 [* h2 O# C
  190.         double dblzTransform[ 4 ][ 4 ];. D2 J! S7 {0 ]8 O
  191.         UF_ASSEM_dof_t Dof;* E% q6 c$ a" n: Q  x
  192.         UF_ASSEM_mc_status_t Status;
    " D2 E8 C% l  \
  193. 3 l# T" |# p, H5 ~' S3 n- P

  194. ! j9 [3 K6 |. g
  195.         /* 求解约束*/
    * d- @, }2 G( o* U
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );5 k$ ]- ]; B* p, Q
  197.         if ( UF_ASSEM_mc_solved == Status )3 I& a6 F. C2 s: t6 _" |& H" W
  198.         {* g8 S8 E. E; s3 E9 y
  199.                 uc1601( "求解约束成功!", 1 );5 ]+ k1 _3 a. X  w/ ?& N5 h
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;9 F/ e4 x. t6 T. q$ b- t3 c1 P

  201.   _. h* r3 A" R: i* n- q" x* `
  202.                 /* 将约束应用到装配体上*/
    " v- U- V. u" ]
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );0 r3 p( Y0 r' H
  204.                 if ( UF_ASSEM_structure_ok == StructStatus )
    - Z  w% H3 N; O( s
  205.                 {
    ; i+ t2 u2 [" |! D
  206.                         uc1601( "应用装配成功!", 1 );  ~# ]2 n: z% p1 P+ i) w7 B5 d, i3 E) y
  207.                         ! B7 ]" T- _' S5 Y
  208.                         /* 更新模型*/
    6 u1 H5 A' R# B* Z. b. n8 d  A$ f6 l' O
  209.                         UF_MODL_update();
      r  |0 c+ Z7 p+ r5 y' J
  210.             UF_DISP_refresh();- A3 e  G/ |1 f
  211.                 }
    * D  k; ?$ c- |- {
  212.                 else uc1601( "应用装配失败!", 1 );) r+ e# k" x' E8 I
  213.         }
    $ x& C( {0 c4 o) D
  214.         else uc1601( "求解约束失败!", 1 );
    4 E' y# n) G9 W: e5 k2 f
  215.         }! u) E- w9 @0 K' j/ Q
  216. }7 O! Y! A) F* Q$ t% ], M
复制代码
* f3 T- K4 ]# a+ R/ g: ^

. s: z4 j" u5 z. S. A  G& p& Y- O8 p5 _2 e/ q

# W. C. N, p! i+ t- E0 t. L: r# ]9 r1 J( m
  l, Z! _% _& [
! N( z# s4 Y' l6 t8 y/ ?
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了