PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

PLM之家NX 楼主

2014-2-22 13:47:37

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

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

x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤( R0 q& a* M3 F9 R: v. x

/ M& i$ T8 Y3 P7 V& a" V! `
$ h1 R; S! [$ q3 i. A) E/ e( a
1、装入部件. ^" S" v1 a7 C6 R. d
通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;% {- W8 A% @2 P" g) {( n
# b5 N( a2 g, Q- R* @
2、创建配合关系6 M/ S  x, S" B! K
a.通过函数UF_ASSEM_init_mc()初始化约束;
! ?6 S/ ^& s" k& M* g1 W3 k. `b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;* A+ h, n4 O. t$ o+ _- k- Q
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
0 i& i! ~: s" O' x4 S# e1 K7 yc.通过函数UF_ASSEM_solve_mc()求解约束;
, A- p2 a0 D3 ^3 E$ Td.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;6 Y  `. x  B# ?: p* ]* ^$ O1 V
e.通过函数UF_MODL_update更新模型。/ y0 P6 S2 |; J( C# N7 E: c

% i3 y& [$ E- G+ z7 a& o  `
  1. #include <stdio.h>
    + h4 D# k* s, j( P$ g
  2. 1 V  x& v* {' }
  3. #include <uf.h>& f( w! u; B9 H5 s/ j7 t
  4. #include <uf_ui.h>
    + s; b0 H$ ~* C
  5. #include <uf_obj.h>3 q! E  V) K3 i  Q1 r
  6. #include <uf_disp.h>4 i3 W+ U; l0 k' o' d% ~) T& W
  7. #include <uf_modl.h># D8 o8 D- J4 E/ O& d$ ~
  8. #include <uf_part.h>
    " G5 V, f1 O  O8 v, f
  9. #include <uf_assem.h>- ^$ V9 J0 z: B8 B/ S, W( ]
  10. - m0 j. W, g3 }7 z
  11. #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) ): t. t5 s' d  }
  12. ' _- r5 O# P, C' @0 T
  13. int report( char *file, int line, char *call, int irc );) f1 p6 J- U8 [8 {8 z
  14. void DoAssembly( void );
    ( z. z8 g& h/ R! R
  15. ! P  q  Y, p, u9 _8 ?
  16. int report( char *file, int line, char *call, int irc )9 J( H2 {$ u* N7 ]
  17. {
    3 V$ \0 W) e1 O
  18.     if ( irc )0 m) o# @# \0 y1 e
  19.     {! o% ?4 Q' r0 f& `
  20.         char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];' y* A7 ^" s- n4 d
  21.         char msg[ 133 ];
    ! W/ q7 e. u: z. ~7 G: {( \) \9 G
  22.         char fail_message[ 133 ];3 }: I# [$ t: ], `5 s# f
  23.         int  len;' y4 ~4 P( h8 E

  24. 4 t0 X; M' I6 [  m; G
  25.         UF_get_fail_message( irc, fail_message );' |+ u/ W, K$ Y9 R0 e! y) q

  26. 0 w  o8 s+ f$ P0 i
  27.         sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );. T$ c$ n2 c8 E& e/ }
  28. / S' T( s' D$ X
  29.         len = strlen( err_msg );
    7 G8 `2 f" U8 l: `: g) E: U
  30.         len = ( len < 131 ) ? len : 131;: X, e2 n, ]4 L7 V# t# }
  31.         strncpy ( msg, err_msg, len );# d0 K: O3 z% n- V6 Y/ c- T
  32.         msg[ len + 1 ] = '\000';
    + X, A4 X: z& H5 c
  33. 8 s7 K2 X! q5 n/ f8 g( v2 {
  34.         uc1601( err_msg, TRUE );
    , d; h" Y/ D6 C* r$ U
  35.     }
    . R2 f1 @( k  P: e3 [
  36.     return( irc );
    , R4 T  r6 t( Z3 l6 M
  37. }
    6 Z( q7 g' m' {. [

  38. # f$ ]" i4 a; {& z: K- ?
  39. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    2 L0 m2 Y: i- A# k
  40. {
    . o! u8 Q, f, o% f4 E
  41.     if ( UF_initialize() ) return;" d6 h0 @1 u- t4 t" _. m& d
  42.         DoAssembly();
    ! O& R- U' o* Y2 p' E0 g! J
  43.         UF_terminate();& [8 N- B4 v" r
  44. }: [! C& B& X' {1 y" n
  45. 3 j9 ?" k3 Y; V
  46. void DoAssembly( void )
    / v$ Y: j, o0 }  S" ~# b- A
  47. {
    - r+ l5 D$ q4 S( \
  48.         if ( NULL_TAG == UF_PART_ask_display_part() )/ k6 l/ \) Z. Y6 B7 t  N
  49.         {
    ' A2 r( p! S5 T: ^/ j0 N* d* S! v
  50.                 uc1601( "请新建一个文件再进行本操作!", 1 );
    ) ~  ?; w: S8 m$ T2 T
  51.                 return;
    1 Y. ]& N" Z* Y7 U. O( j- l
  52.         }
    & |9 X( g( a8 q
  53. 3 {+ C# Y5 Q$ R3 e9 g
  54.         tag_t tagInsCyl        = NULL_TAG;, F$ |& B+ r- L
  55.         tag_t tagInsVBlk= NULL_TAG;
    3 T; M3 o* T# z4 \5 Y
  56.         tag_t tagOccCyl        = NULL_TAG;
    & [; }% b7 A% B# t. l: P. C  B. Y
  57.         tag_t tagOccVBlk= NULL_TAG;0 [) ~  k- G0 s7 m# H
  58.         UF_PART_load_status_t ErrorStatus;- |: E, M* Z+ f$ H& A' S2 `

  59. - K  n6 J. Y* O+ q
  60.         double dblzOrigin[ 3 ] = { 0, 0, 0 };
    " f3 F) B6 z) b9 c# Q
  61.         double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };1 U; B4 G6 e& d' R

  62. ' [9 z  F# f2 @2 l" Z
  63.         /* 装入部件GB2208_80_Vblock.prt */) o8 M  P5 ~! M! H, k) \
  64.         UF_ASSEM_add_part_to_assembly(
    . {, M1 f/ K9 m6 a
  65.                 UF_PART_ask_display_part(),/ R& x$ {# g! t4 C& S. v
  66.                 "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt"," c) l4 I6 W2 U+ G8 a; K- |/ h
  67.                 NULL,2 I# g5 W$ E5 y* p- {) e
  68.                 "VBLOCK",
    / W: e% A7 j- _/ c1 Z
  69.                 dblzOrigin,* ?( j1 s! t! I# S+ o' O) E- [
  70.                 dblzCsysMatrix,
    + v3 V2 z) P, H# l" y2 Q$ t
  71.                 -1,
    $ b$ I3 \) @( u/ W+ M- R6 j
  72.                 &tagInsVBlk,
    ! v( n: K8 e7 d( s; s% a
  73.                 &ErrorStatus );; l- Y' u* l4 v; d) L+ T/ H, I/ r5 P: [
  74.         /* 装入部件Cylinder.prt */6 Z, U' @, E+ V' y  C! L; x1 \; L  O, o
  75.         dblzOrigin[ 1 ] = 50;
    - S7 y3 C, Q; n( ]
  76.         UF_ASSEM_add_part_to_assembly(; w; r0 s, c! |/ P8 L6 [9 H/ @
  77.                 UF_PART_ask_display_part(),9 y+ M% t& ?. l, m3 w0 C
  78.                 "f:\\ug\\chapter4_1\\Cylinder.prt",
    1 N& L7 x+ K( _# s. F* r
  79.                 NULL,: K8 I4 o5 K/ @4 G+ H
  80.                 "CYLINDER",
    ) e0 s* H0 g' v, K. _5 J$ ?
  81.                 dblzOrigin,
    % y2 ?( b+ w2 ^$ b3 q
  82.                 dblzCsysMatrix,6 w% e& E6 H9 ]  e3 h
  83.                 -1,
    , a7 ~$ V; U" d
  84.                 &tagInsCyl,4 l, s$ D2 L" l# |
  85.                 &ErrorStatus );
    * x" L) @5 X* b4 k1 T
  86.         tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );* j* Q0 Z) h* C
  87.         tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );% ~% V8 @0 L6 X" W) N* o

  88. + B6 ~" f2 u6 q! L
  89.         /* 创建配合关系 */
    ) H# X' k; T  p/ F
  90.         UF_ASSEM_mating_condition_t McData;6 }! T/ }9 P1 }( ^5 z( Z
  91.         tag_t tagObjectFrom                = NULL_TAG;
    4 s1 K; B; ?  d8 ]' n* W  H4 z) z: h3 i
  92.         tag_t tagObjectTo                = NULL_TAG;
    % K/ a- V. u: d. ~- F: G$ ~0 J) w
  93.         tag_t tagPrototypeFrom        = NULL_TAG;3 b" k( e% K. k9 i
  94.         tag_t tagPrototypeTo        = NULL_TAG;
    " E6 J/ Z" k# o; p
  95.        
    & `$ u0 Y! n) s' c. F' e- e
  96.         /* 初始化约束*/) I: H, o# I& K+ i( Y  o
  97.         UF_ASSEM_init_mc( &McData );8 F9 W# q- o6 N1 S. O

  98. ( _8 G3 z% g) ~! S8 b
  99.     /* 定义约束,构造配合关系*/9 [8 L; t' k& _% a9 e
  100.         McData.mated_object = tagInsCyl;+ S7 H  j- B2 r* j( u
  101.         4 n; U; r8 g* c- x# a
  102.         McData.num_constraints = 3;
    8 x4 L$ @" v, ?! g+ x( v* u. b
  103.         McData.name = NULL;$ I$ S% u: p+ I0 D8 P$ y5 V$ X
  104.         McData.user_name = false;
    ! a3 b# M" s3 r# R- }* c/ N. C  o
  105.         McData.override = false;
    ; a- ^" D  F# H" v
  106.         McData.suppressed = false;
    0 _$ r2 K0 t& ]  p$ |
  107.         McData.implicit = false;6 @# x5 Q3 ]8 N/ \( G- D
  108. 2 `# c; _/ \  }, Y
  109.         tagObjectFrom        = NULL_TAG;& m8 c0 [8 I3 V8 ]$ B
  110.         tagObjectTo                = NULL_TAG;
    # K7 M$ a; Y* U: s2 I" A9 o- h+ j  D
  111.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );
      \2 M# n/ a+ Q+ S  y0 T0 |8 o
  112.         UF_OBJ_cycle_by_name( "P1",                        &tagObjectTo );
    % ?2 W+ Y! Q7 }) j# J% V
  113.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    0 |. R( J+ q) ^9 v
  114.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );8 N& {5 g9 J  ~1 p
  115.         McData.constraints[ 0 ].from                        = tagPrototypeFrom;
    * w/ U5 x/ D2 a/ J) |/ W6 f
  116.         McData.constraints[ 0 ].from_part_occ        = tagOccCyl;3 P9 v% ?/ W6 i5 i. j" v- a
  117.         McData.constraints[ 0 ].from_status                = UF_ASSEM_ok;1 |4 g7 q/ F# s* i8 c
  118.         McData.constraints[ 0 ].from_type                = UF_ASSEM_cylindrical_face;
    8 Y9 C# U- _' @  v5 \3 h" K
  119.         McData.constraints[ 0 ].to                                = tagPrototypeTo;6 p( H( G* k% O6 p! _
  120.         McData.constraints[ 0 ].to_part_occ                = tagOccVBlk;; D+ r2 r; p/ R$ F2 _
  121.         McData.constraints[ 0 ].to_status                = UF_ASSEM_ok;
    ! U* `& s4 e/ o1 G9 B! [
  122.         McData.constraints[ 0 ].to_type                        = UF_ASSEM_planar_face;
    9 f' j7 s8 O+ H3 m) r/ Q
  123.         McData.constraints[ 0 ].mate_type                = UF_ASSEM_tangent;0 H* ~5 Q* ]& l+ y; O" K$ \
  124.         McData.constraints[ 0 ].offset                        = NULL_TAG;
    ; Y6 B9 ~' H/ v' {0 o5 }& ^
  125.         McData.constraints[ 0 ].name                        = NULL;: n* z. K$ d8 W8 ^6 j
  126.         McData.constraints[ 0 ].user_name                = false;$ X5 b& `) B, V1 m( P2 m9 z1 t! z
  127.         McData.constraints[ 0 ].inherited                = false;. O# M* B1 Q2 O0 d
  128.         McData.constraints[ 0 ].suppressed                = false;
    / |1 G4 F+ d: \4 _- V7 l: l; L, I
  129.         McData.constraints[ 0 ].has_help_point        = false;! G8 X' \; x1 D) R8 J/ I
  130.         UF_DISP_set_highlight( tagObjectFrom,        1 );
    * E% k! N' c5 N( Y* I- R
  131.         UF_DISP_set_highlight( tagObjectTo,                1 );# H) z3 w1 n) _' ?6 W! Z
  132.         uc1601( "这两个面进行相切操作", 1 );6 w3 i9 X9 F$ U8 R
  133.         UF_DISP_set_highlight( tagObjectFrom,        0 );/ q4 O% M' g6 t- m- D
  134.         UF_DISP_set_highlight( tagObjectTo,        0 );
    6 N- W( w$ p& Y. f! q- I8 D5 d) r
  135. + o  Q+ i' U/ Z) w
  136.         tagObjectFrom        = NULL_TAG;
    3 i& r1 c8 U9 _2 \. j
  137.         tagObjectTo                = NULL_TAG;1 Z+ j5 {. a7 n
  138.         UF_OBJ_cycle_by_name( "CYL_FACE_3",        &tagObjectFrom );: [4 ~* z: F. R- [0 q
  139.         UF_OBJ_cycle_by_name( "P2",                        &tagObjectTo );
    ' p# _" U0 W) M9 C6 C
  140.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    " G9 j$ w( a* e6 R) K
  141.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );  J- v* V: j& O* L. L) H
  142.         McData.constraints[ 1 ].from                        = tagPrototypeFrom;: _3 ^& E  c3 n' {. x& N
  143.         McData.constraints[ 1 ].from_part_occ        = tagOccCyl;3 K/ d  d- V* k
  144.         McData.constraints[ 1 ].from_status                = UF_ASSEM_ok;
    2 X/ B& R7 E) r1 f. r; h7 l( Y9 \8 H
  145.         McData.constraints[ 1 ].from_type                = UF_ASSEM_cylindrical_face;
    " g$ R1 _# T2 h5 m  r3 c+ h+ q9 F
  146.         McData.constraints[ 1 ].to                                = tagPrototypeTo;$ z6 V% W) R1 J( \; B0 {
  147.         McData.constraints[ 1 ].to_part_occ                = tagOccVBlk;
    + c- [. j4 m+ H9 t
  148.         McData.constraints[ 1 ].to_status                = UF_ASSEM_ok;
    ; |$ p9 m1 F' ]; N; [5 L: o2 E3 W
  149.         McData.constraints[ 1 ].to_type                        = UF_ASSEM_planar_face;
    5 B% M& D7 M8 h. q
  150.         McData.constraints[ 1 ].mate_type                = UF_ASSEM_tangent;
    4 M9 d8 s' P1 [, I! `
  151.         McData.constraints[ 1 ].offset                        = NULL_TAG;
    & f/ ]- T) F+ s9 A: E
  152.         McData.constraints[ 1 ].name                        = NULL;- [1 M: c1 C. g7 i0 j: |
  153.         McData.constraints[ 1 ].user_name                = false;
    9 R7 {8 f2 i5 `7 y9 T
  154.         McData.constraints[ 1 ].inherited                = false;# B. _" O; v( r2 G0 c
  155.         McData.constraints[ 1 ].suppressed                = false;
    4 O; ?; Y) ]: Q
  156.         McData.constraints[ 1 ].has_help_point        = false;
    7 J& Y* d& P5 u& ]
  157.         UF_DISP_set_highlight( tagObjectFrom,        1 );6 S5 Y; m5 H% Z
  158.         UF_DISP_set_highlight( tagObjectTo,                1 );
    6 H8 @! v- K1 ?$ ?' n& Q
  159.         uc1601( "这两个面进行相切操作", 1 );: D3 F% D: g9 z: k
  160.         UF_DISP_set_highlight( tagObjectFrom,        0 );
    4 H1 \1 p9 _! ]% q! [- h
  161.         UF_DISP_set_highlight( tagObjectTo,        0 );/ r3 N1 j3 r3 M# ]

  162. * r2 l; @' v& _' l, _$ y
  163.         tagObjectFrom        = NULL_TAG;
    / D$ a; b0 f! {& N: {' G7 Z+ L6 p
  164.         tagObjectTo                = NULL_TAG;
    + J0 K' c+ I2 `9 L/ }
  165.         UF_OBJ_cycle_by_name( "CYL_FACE_1",        &tagObjectFrom );# I$ O  t, z1 _0 ?% j, E4 `
  166.         UF_OBJ_cycle_by_name( "P3",                        &tagObjectTo );1 @# T2 n: I" c9 _  y- S* k
  167.         tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
    + c% d9 z& |: I8 z! Z
  168.         tagPrototypeTo        = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
    3 [/ V5 \: b7 O: @" q1 ^8 ^
  169.         McData.constraints[ 2 ].from                        = tagPrototypeFrom;4 }( ~/ T: Y! ~  K' B  o, u4 @, h
  170.         McData.constraints[ 2 ].from_part_occ        = tagOccCyl;) N+ s% S' Q- L$ G
  171.         McData.constraints[ 2 ].from_status                = UF_ASSEM_ok;7 U# E$ Z1 Z1 L7 ]' o/ i# n
  172.         McData.constraints[ 2 ].from_type                = UF_ASSEM_planar_face;5 f- C9 _: p* H! S8 N2 v0 e
  173.         McData.constraints[ 2 ].to                                = tagPrototypeTo;3 c, w5 Z5 _8 b; v7 Z$ z
  174.         McData.constraints[ 2 ].to_part_occ                = tagOccVBlk;
    * b( T+ q! E8 w' a+ J8 ?
  175.         McData.constraints[ 2 ].to_status                = UF_ASSEM_ok;
    0 K0 S+ U+ D* y& N
  176.         McData.constraints[ 2 ].to_type                        = UF_ASSEM_planar_face;& d6 u/ x- m- w: j7 x8 p1 d
  177.         McData.constraints[ 2 ].mate_type                = UF_ASSEM_align;
    # _4 u; h5 x5 x
  178.         McData.constraints[ 2 ].offset                        = NULL_TAG;( B# X! `( i( w. ]$ z0 Q; ]
  179.         McData.constraints[ 2 ].name                        = NULL;5 v( ~, u4 o" s* u- H8 x9 v) {' z' O
  180.         McData.constraints[ 2 ].user_name                = false;
    / B' |: ]0 d3 k
  181.         McData.constraints[ 2 ].inherited                = false;
    : Q4 Q6 U' _  |5 [8 m6 e
  182.         McData.constraints[ 2 ].suppressed                = false;
      p: c& A0 A6 @" |- C0 B9 o
  183.         McData.constraints[ 2 ].has_help_point        = false;& l6 N" ^8 r) W+ X7 J& x! T2 \
  184.         UF_DISP_set_highlight( tagObjectFrom,        1 );1 s% ?. X  `% |
  185.         UF_DISP_set_highlight( tagObjectTo,                1 );
    ( J+ `- B* l, _
  186.         uc1601( "这两个面进行对齐操作", 1 );
    ! S6 j, _; L3 ~) Q, G
  187.         UF_DISP_set_highlight( tagObjectFrom,        0 );" O& D: c* d; I9 ?
  188.         UF_DISP_set_highlight( tagObjectTo,        0 );$ o( ~3 q% c* e

  189. 8 N$ m7 e- X( f: s' c1 }/ ^
  190.         double dblzTransform[ 4 ][ 4 ];4 M" S+ h+ n+ {! h. V5 ]
  191.         UF_ASSEM_dof_t Dof;
    ; Z& `; U: w" @, V' s5 M
  192.         UF_ASSEM_mc_status_t Status;2 y( X$ \) n1 K0 e
  193. ; R) h5 T, `9 K& |

  194. $ n8 _! M6 E: A, T  u$ h$ R
  195.         /* 求解约束*/
    ) X4 ]  X  J$ ^2 J
  196.         UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );1 f2 R7 b& z0 |2 [* j2 p
  197.         if ( UF_ASSEM_mc_solved == Status )
    4 `3 y2 l; c+ G
  198.         {
    4 y8 O1 K/ c8 `! ^
  199.                 uc1601( "求解约束成功!", 1 );
    / C4 H/ m8 b( S4 b1 t9 r/ k
  200.                 UF_ASSEM_mc_structure_state_t StructStatus;% B6 X3 X' E; _

  201. ' S3 ?) r- l; l
  202.                 /* 将约束应用到装配体上*/
    5 I8 X% `% t* A) Z+ ]* D) b
  203.                 UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );
    : s* R  |! H1 N/ [6 _
  204.                 if ( UF_ASSEM_structure_ok == StructStatus ) % f* j! n( i& ~4 r# b- k6 N7 G
  205.                 {
    8 _; ]6 O4 z, ~: M4 ~: J  X2 l
  206.                         uc1601( "应用装配成功!", 1 );
    0 b5 I2 C3 T7 Z+ }
  207.                        
    5 I! y" W! U: P9 h) Y
  208.                         /* 更新模型*/
    8 M+ ^* B- i& U3 o. ]) p
  209.                         UF_MODL_update();
    ( [0 z5 x0 C* d! \* p$ Z
  210.             UF_DISP_refresh();1 u' ]7 D: h6 Q- P
  211.                 }8 O6 Z, l- y% ^
  212.                 else uc1601( "应用装配失败!", 1 );
    " ]: m& E9 J5 r' `" }1 J; U* _; F
  213.         }
    " M* O' U2 c' R  M
  214.         else uc1601( "求解约束失败!", 1 );' K5 B! i5 o9 t; P- f
  215.         }3 i! }& E1 y" |6 H% p5 b
  216. }
    $ y- M6 i0 Z$ _2 }7 L' V
复制代码
# {; }9 N9 G, X
/ R; b9 d. F4 u7 a

" _9 L# j- F* R' z
& b" V+ s, F* {8 L5 I4 a
' ~! W. D& T8 M) e: F- m
" q+ F% E6 b( c

. `2 e( X, [8 q! ^
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了