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

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤& I, G1 x0 X) l8 i
/ @3 }% D; p+ X3 W' k
3 A: r5 ?' }* v; n% r! }- f
1、装入部件4 i! N* o$ v% O1 i
通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;
( \8 M0 f0 w/ o0 H* H* K
( R% U* N$ V: w2、创建配合关系
) Q2 b; I1 B/ U2 ]a.通过函数UF_ASSEM_init_mc()初始化约束;
6 u; E& D  \6 ~3 Jb.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;; T9 V$ C- U2 p5 ^' x
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
, |- y/ d. G7 b, G; k9 y) zc.通过函数UF_ASSEM_solve_mc()求解约束;0 z/ A, J4 u) d6 e% X) U" {
d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;
1 D) \3 w9 m- O$ m8 F& K) V5 {e.通过函数UF_MODL_update更新模型。; N; P) v# M( Z3 o  n9 Q; x
- ?1 \0 V' C# Q+ P8 z
  1. #include <stdio.h>$ P; o1 c0 n& |4 s! l

  2.   U6 c1 m  N. ^0 @8 r' b8 N( J& X* N
  3. #include <uf.h>+ }" A3 F( w9 A8 v2 t
  4. #include <uf_ui.h>
    & I2 n3 X) x* B5 l# @& z
  5. #include <uf_obj.h>
    ; ?2 O4 A9 m; S
  6. #include <uf_disp.h>
    * M' }* m) k) S
  7. #include <uf_modl.h>5 Z8 ]% g; w! Q) i7 c5 P" y3 S: M1 j
  8. #include <uf_part.h>
    4 u4 j5 _0 [5 {1 [( t
  9. #include <uf_assem.h>1 s" _* ~" ]$ L6 @. @6 H' H
  10. 8 C" ]' a/ q& c6 k" D/ m- \& S
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )9 [: ^6 \0 A* ?* N3 [3 _

  12. " G" z2 d3 ^& G- n3 S
  13. int report( char *file, int line, char *call, int irc );" [1 i4 |; l; ~8 R
  14. void DoAssembly( void );
    9 D* t1 c% W3 ?3 l5 w( w

  15. 3 d$ Q% ^1 h# S3 k
  16. int report( char *file, int line, char *call, int irc )5 `& q3 `0 i# G1 m* }. s
  17. {9 y7 ?1 r1 k+ U
  18.     if ( irc )
      t! Y' Z' ~! f6 g8 |7 U
  19.     {% B: y; H) e; k8 J3 u9 g
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];- a- ^  H1 p% z8 L: B
  21.         char msg[ 133 ];
    - G2 Y* P8 h# e* O. ?; u- O" l# m
  22.         char fail_message[ 133 ];$ T0 F) t/ [$ ?% T6 U4 F# P
  23.         int  len;* G# S. H: v; J* p7 D& ]

  24. . O4 q4 b2 o$ N* L
  25.         UF_get_fail_message( irc, fail_message );4 Z1 D8 \' b# [) |% }" B( D9 P, x
  26. 5 |$ u( i& p" E" E- }; w& F! B3 w
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );
    1 S0 L& N: D; f* ]! f! Z
  28. 4 c& z( b' v5 U  C) p$ q9 F  T! T* Y
  29.         len = strlen( err_msg );
    ! `7 ~- w) k. r
  30.         len = ( len < 131 ) ? len : 131;
    ( F0 M) }1 T/ J" t5 b( d- b1 @
  31.         strncpy ( msg, err_msg, len );/ j$ P* c9 K( {8 ?5 ^. M. W+ G( b
  32.         msg[ len + 1 ] = '\000';' O4 Q% v" T* j4 B& W: Z
  33. % s/ F+ G& }& Z
  34.         uc1601( err_msg, TRUE );
    & M" G  g: R* h& h4 s$ B3 q
  35.     }# x4 n8 U( [, A3 D9 b
  36.     return( irc );* k) ^; |3 E( o; _
  37. }- a9 v- X8 Y& y8 h) i3 f

  38. + C5 p/ p9 O4 x. j: z6 B6 P
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )/ q) ^5 a1 a% F, E5 l2 L! K0 p
  40. {$ }3 g+ d) `/ `+ E
  41.     if ( UF_initialize() ) return;( A! d9 t8 B! z" ?
  42.         DoAssembly();! ~* Z' H: [3 w5 {% c: F7 W
  43.         UF_terminate();: s3 Y  p6 q! \) L5 ]$ C6 A
  44. }2 x# Y* @3 N! T
  45. 0 G2 ?! t. D; ]+ J& J
  46. void DoAssembly( void )
    5 S! ~" I% w$ A+ |4 w
  47. {% W9 Q! L, r+ d, N
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )
    3 w8 N0 e) W' Q# Q+ _
  49.         {) P' m7 y" L) h* [. N8 e, h
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );
    / L8 T& r! j' P6 P0 t3 {4 x& d& l
  51.                 return;+ v" w, c+ g6 s, W- ^& D8 m( \: W
  52.         }
    5 l1 H; v5 r# o  C- [
  53. ) t2 V' Z/ r! j: B. T6 |! {
  54.         tag_t tagInsCyl        = NULL_TAG;
    ! M( m& Z+ _. {% @* P4 h+ A$ W
  55.         tag_t tagInsVBlk= NULL_TAG;
    % z3 j% ]  L$ e/ x( }) y3 E
  56.         tag_t tagOccCyl        = NULL_TAG;
    4 Y- r9 j( O% [
  57.         tag_t tagOccVBlk= NULL_TAG;
    5 Z. _! t2 m6 j
  58.         UF_PART_load_status_t ErrorStatus;% s2 L; B" ~: C) N, o) C1 J+ r2 S
  59. 7 A! L) Y2 M. K
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };# @' \$ i5 A% z7 l# v4 O
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };# _6 F; j; L0 {! u; P
  62. ! ~" k1 Z' n1 }9 ^
  63.         /* 装入部件GB2208_80_Vblock.prt */9 X* n' I, k3 o) R" b5 i4 c* _3 J
  64.         UF_ASSEM_add_part_to_assembly(# T8 v+ J8 D( L. R! A
  65.                 UF_PART_ask_display_part(),
    ! p( s+ w3 |7 a9 L
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",' H: H  S* m& a
  67.                 NULL,7 K3 c/ K! u# s: T
  68.                 "VBLOCK",6 Z% s! M' g  D8 a7 o, |! s
  69.                 dblzOrigin,7 x$ x. V7 k  K. {
  70.                 dblzCsysMatrix,
    2 ~' j" F9 e  `3 J
  71.                 -1,3 n4 m  H/ Q/ T& d6 G
  72.                 &tagInsVBlk,
    ! r0 Z1 b; e9 f7 {" Y0 r- B
  73.                 &ErrorStatus );
    3 n6 z- X% `- e8 U& h: h; \
  74.         /* 装入部件Cylinder.prt */" _2 G! X0 J; I- t, u
  75.         dblzOrigin[ 1 ] = 50;3 R, z7 d0 m% ]- J. {
  76.         UF_ASSEM_add_part_to_assembly(
    / |) s6 V/ t8 f& P1 B2 T* a
  77.                 UF_PART_ask_display_part(),
    ) e/ j6 H7 Q; Z. |* `8 C7 c
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",
    ; Y* v, B. R$ [( P) v
  79.                 NULL,
    + F8 b7 G  r# u* s' ?: r% I. Q4 O
  80.                 "CYLINDER",0 Q' q2 Q, J5 [8 d+ b* w
  81.                 dblzOrigin,
    " f! H+ ^: n" S. E( j% e& R( V( J
  82.                 dblzCsysMatrix,# o5 c) f0 Y4 I# h, b3 z/ w
  83.                 -1,
    . j" V+ }: u. A
  84.                 &tagInsCyl,. D; `" R. y4 E( y4 A) Y9 e
  85.                 &ErrorStatus );
    + k  T5 j$ X  w  |% y
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );
    3 k6 A2 Y5 j3 r" e
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );5 w" Y5 j' c5 V

  88. 2 t, N1 a' ^, n* ~7 I
  89.         /* 创建配合关系 */
    3 ]) g0 w. y* o
  90.         UF_ASSEM_mating_condition_t McData;# X9 U* l: l& P* I* R# @' G3 u& L" x
  91.         tag_t tagObjectFrom                = NULL_TAG;
    " @: c9 b) [  k) U0 Z
  92.         tag_t tagObjectTo                = NULL_TAG;
    # S8 D2 [% K6 Q" f5 z2 y
  93.         tag_t tagPrototypeFrom        = NULL_TAG;2 G* |2 F; X& o+ f% E  ^, _
  94.         tag_t tagPrototypeTo        = NULL_TAG;
    ; X3 y+ \5 p; Q: j
  95.        
    ) P8 B- E: R0 P" x
  96.         /* 初始化约束*/& _! w) F5 m3 M. M: Y
  97.         UF_ASSEM_init_mc( &McData );
    3 S$ R* N' O+ m8 m

  98. 6 e9 n9 T2 |( g6 H7 W
  99.     /* 定义约束,构造配合关系*/4 z' u' P7 z: q+ o4 G% g
  100.         McData.mated_object = tagInsCyl;, e* X6 ?; _5 ~( i
  101.         # {; H3 Z# \) ^5 S. @8 e  x, _; n
  102.         McData.num_constraints = 3;: Z( B5 S' o+ z7 }1 b! S/ H
  103.         McData.name = NULL;
    ; b# x: [- J8 I2 E
  104.         McData.user_name = false;6 n$ R2 C  l6 y
  105.         McData.override = false;
    ) a  j- P  D/ D- G9 v" g  t" |
  106.         McData.suppressed = false;
    & C; y: }1 N4 u2 C2 u
  107.         McData.implicit = false;
    * W9 H& b5 U% f9 c

  108. 9 E( b3 Z3 o0 j# A. T5 ~
  109.         tagObjectFrom        = NULL_TAG;6 R0 h7 T* N/ d2 Q& s- d2 W9 \
  110.         tagObjectTo                = NULL_TAG;
    - e$ j$ u& }$ C
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
    3 Y2 @6 I+ K; R# ~1 M
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );
    2 j6 O  u# |1 t8 q
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );. V# K: B, M/ M( c" [
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );7 }& Y9 k2 @+ X% ]
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
    . I4 a  b/ ?4 G# T- e2 F6 [
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;$ U8 J' W$ `8 N+ [& Q3 f. `7 J" H
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;5 M7 H2 |6 S% [
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;* M/ X7 Q. h3 l
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;
    - _0 B9 G2 J- y2 [2 [' v
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;. I0 y* F# R! p% d* H: n6 d
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;! ], E" v9 l& ~# M( p4 }! B' l
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;
    2 L# ^0 R( c( y4 {8 ^
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;( b" Z4 Z6 Z3 K0 v# W1 [7 k9 d3 ]
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;" [1 n- h# W8 S7 @  C1 f% M: V2 W
  125.         McData.constraints[ 0 ].name                        = NULL;9 F0 O+ A, ?; o' j& u" T
  126.         McData.constraints[ 0 ].user_name                = false;( `; k: B! [2 j6 H9 Y  z4 z# R
  127.         McData.constraints[ 0 ].inherited                = false;9 i- x( T4 S/ S
  128.         McData.constraints[ 0 ].suppressed                = false;
    , H+ q, g" ^" }
  129.         McData.constraints[ 0 ].has_help_point        = false;. W! I$ k# r0 C! `
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    8 H2 I& T, R) Q2 k/ l8 x
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );1 E% A/ i* `) e0 ^9 y$ Q. m/ ^
  132.         uc1601( "这两个面进行相切操作", 1 );
    * q$ r" L% |3 K! e5 P4 v7 D
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );0 C3 c+ J) t0 R/ b
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );9 z, Q9 G# z1 X( d2 `" w6 D6 Z2 m
  135. 8 m' x( n, E/ S1 s
  136.         tagObjectFrom        = NULL_TAG;4 ]+ Y7 l3 n3 ~
  137.         tagObjectTo                = NULL_TAG;
    6 a2 u" d4 W* D- s$ \: \3 z* B
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );! \5 ?/ z" ]% w! Q) W
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );$ a3 e) Q% G0 r9 [- R: T
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    8 l' t) O/ f& j3 u' d$ P
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );5 G$ R; r% @4 ^! X
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;
    % e$ L( F& ]+ z9 v  T3 R: G
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;$ n! |  G( P) y' s% S& h* r# p
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;! h' I/ B: R: y' R- T' E1 l
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    - U% V, j4 }) h) ?; k
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;; d6 q3 A2 O/ {: g# B
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    + W3 G/ P+ ~2 A$ @
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;6 I7 G2 l+ }8 W1 g8 I+ l2 ]8 V( j
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;5 R2 d% z, w2 @: R. P
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;, M- ?9 U; @  b' y( n: G
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;
    7 y4 E1 \8 _. G5 Z8 E7 {6 I
  152.         McData.constraints[ 1 ].name                        = NULL;1 a& R1 G% e7 g
  153.         McData.constraints[ 1 ].user_name                = false;
    5 I! N! S. L$ a3 B
  154.         McData.constraints[ 1 ].inherited                = false;( h% e, |7 {% [* Z6 ~$ _' n
  155.         McData.constraints[ 1 ].suppressed                = false;
    $ @& w! r% i& v
  156.         McData.constraints[ 1 ].has_help_point        = false;& C. a/ @+ J5 g2 O
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );& T, j- A; I2 _( h. R, e1 `
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );
    5 ^! i+ ^0 U/ A$ u
  159.         uc1601( "这两个面进行相切操作", 1 );5 ~# R4 b) }0 @( [6 I
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    6 y: a, T( m; P1 j" S1 b
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );
    * F/ R$ h9 j5 B6 g
  162. 3 j6 H) N+ c% t7 L- j5 B
  163.         tagObjectFrom        = NULL_TAG;
      t# e( z4 ~. |" y8 }) c2 @8 M8 z
  164.         tagObjectTo                = NULL_TAG;
    , D$ I9 S& p9 ?3 {& n/ e
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );
    ( K" J5 b2 f' U6 K# G0 L' G; G
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );# e" p: l+ O" o7 y5 f
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );  K$ G0 x4 x( U$ [2 n( r7 n. |. [
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );3 ]: u& w# B+ g5 o; l
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;: p0 |) j3 D/ s9 o
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;% }  R& Q2 _. `8 |8 m* ]
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;% e8 W) y6 _1 o0 [5 k
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;
    , U1 i2 F, V& e* x4 @, i' p
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;
    + x% x4 @4 A# K. n$ A. z
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;3 D/ J: v7 q, T# e' b: j1 w
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;! p" u: v, Q5 f8 i0 c
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;' N5 t' h! f% F" s& ?3 t9 l4 }5 [! P
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;5 i* ^% V6 }9 p2 h
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;' N! t8 c# r* o4 D1 G& f7 I
  179.         McData.constraints[ 2 ].name                        = NULL;9 {* H* X4 F' ?) r! s
  180.         McData.constraints[ 2 ].user_name                = false;
    9 \# V1 q- W4 v( m7 V( m. l- [
  181.         McData.constraints[ 2 ].inherited                = false;
    ; S) y# ]+ L+ R( b. g: ^
  182.         McData.constraints[ 2 ].suppressed                = false;) |! K- z, i/ b; T* d* o4 i  p
  183.         McData.constraints[ 2 ].has_help_point        = false;0 v2 G6 N- U- J
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    5 _/ Q) \3 T8 a
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );
    . n& h% |( J/ ~8 z6 g
  186.         uc1601( "这两个面进行对齐操作", 1 );
    6 ?  i) m$ q& Y5 D, m* g* j0 b' F
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    ( D/ v, F( N  _$ A
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );
    2 l+ m& O  l% V1 o4 m

  189. 9 g/ c/ V: O. c2 q
  190.         double dblzTransform[ 4 ][ 4 ];
    ) X' `7 Q! ~- j7 u
  191.         UF_ASSEM_dof_t Dof;
    ! ]: R) d' S' b
  192.         UF_ASSEM_mc_status_t Status;
    1 f/ Z; Z3 }8 Z
  193. . V3 z/ \4 q) z: r1 i& P. |7 r

  194. # W6 i' P0 K" L. u0 u
  195.         /* 求解约束*/
    # T% g* s) T' J. b$ w# r' y( O
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
    1 f6 y% N6 G7 t, k% s/ ]
  197.         if ( UF_ASSEM_mc_solved == Status )' r& W! x; C! j* d
  198.         {+ e& n) K3 m) w4 x$ Q7 h; {# U
  199.                 uc1601( "求解约束成功!", 1 );
    + p2 g: H  h- y: R
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;
    : m1 \) P  g; W$ h) g8 L
  201. 4 `+ ]% o! c$ Y+ P; b
  202.                 /* 将约束应用到装配体上*/
    $ H6 b3 J, |+ w; w
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );8 C$ R! ]* A: v8 y* A8 C8 |0 h
  204.                 if ( UF_ASSEM_structure_ok == StructStatus )
    ; K3 _5 ]- h% h" ]
  205.                 {
    & y% u( v+ {; b) ~5 ]: c0 z
  206.                         uc1601( "应用装配成功!", 1 );
    / E# |  V# ^. `2 I: D
  207.                         3 P3 J" a2 ?; b) a. p" T+ |0 l7 M- k. v
  208.                         /* 更新模型*/
    + X- J2 x5 |# M
  209.                         UF_MODL_update();+ x6 @, {4 c* U5 L5 J* {+ s$ T
  210.             UF_DISP_refresh();3 }& P/ e4 ^8 @: J7 ^
  211.                 }1 W2 O" T3 A# [/ B. C( w* y3 Q
  212.                 else uc1601( "应用装配失败!", 1 );+ {  Z% p# a: g: m2 g  b
  213.         }4 j4 ]5 g0 F+ E2 M" p
  214.         else uc1601( "求解约束失败!", 1 );% C! w; W% M1 G* C, T# o
  215.         }3 w$ l! u- r8 b! V
  216. }
    7 x0 X' V6 g3 t- e! t3 l
复制代码
% z4 t. f9 O# R. a* [
4 z! d4 R( X: M4 P9 T; v* B/ W4 h
) a% Y& p8 k8 w  O) b* l5 C

8 R) l3 y, X& o/ |( [6 q) Z6 Q& c& m  b+ o6 T
9 ^+ w* ~# J$ j2 N9 n0 E
2 J, g7 N$ `  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二次开发专题模块培训报名开始啦

    我知道了