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

[二次开发源码] NX二次开发源码分享:报告装配加载状态,设置装配加载

[复制链接]

2019-9-15 08:32:35 1796 0

admin 发表于 2019-9-15 08:32:35 |阅读模式

admin 楼主

2019-9-15 08:32:35

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

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

x

0 k" X; f6 k0 B) B3 C* B( F- ~9 k+ RNX二次开发源码分享:报告装配加载状态,设置装配加载! n! k+ c7 _  P6 A) E* y, ?

2 r+ G& ?) |* R! B" v& e  i$ |获取Load Options 并进行处理!4 _9 R5 n1 }; M3 D8 \6 w" Z
; E8 u2 }& R& J4 ^' g
[mw_shl_code=c,true]#include <stdio.h>
2 R+ {8 a" N4 l* g#include <string.h>
' X2 T# X, y# l$ F#include <uf.h>
8 M' d! W! [4 |' i0 ^2 }#include <uf_ui.h>7 @4 J& v7 [. E* y' g, Z
#include <uf_assem.h>
5 N0 v" E3 T$ q1 U
3 i: W6 W6 ]' b; Y4 W#include <stdarg.h>
1 I: i% m2 W7 P- o" n9 H( R2 B$ L9 s/ k" d6 y
static void ECHO(char *format, ...)
( v9 W# ~6 V5 R{
) k6 I/ G* m% ^! j    char msg[UF_UI_MAX_STRING_LEN+1];
: h  B+ }1 y3 K% a    va_list args;
+ u  y1 Z# Q) z0 @6 @  V" @    va_start(args, format);) N0 n$ `! s4 z- e
    vsprintf(msg, format, args);# e! q2 q" b  a3 g
    va_end(args);4 E7 }  g, Q$ }2 {" T, {
    UF_UI_open_listing_window();
" r8 d% e2 ~6 k. B! L) q8 V% h    UF_UI_write_listing_window(msg);
9 _+ q/ a  b/ c0 u    UF_print_syslog(msg, FALSE);+ i0 `5 ?$ [! ]/ x; L& O
}
0 y& u# a" I% {( \- P
4 C- t. C: m  e#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
" z* _( O, I( w: M% I7 O' @/ N4 ?# F( x3 n& P$ F: a
static int report_error( char *file, int line, char *call, int irc)* r0 q5 Y& z; }
{
# H/ w6 [/ v4 t0 W- M: `    if (irc)
* _- h, Q- }) }    {. A+ X0 a# L* w8 J& P. c& D
        char err[133];
. T9 i5 L6 i: X6 p. m" u1 N, o
3 x; @" L! a  r3 y! A        UF_get_fail_message(irc, err);
" ~3 O; ?  N: k$ u# t& H0 L/ `8 B        ECHO("*** ERROR code %d at line %d in %s:\n",: _. h6 x! _4 Q
            irc, line, file);( Y0 E3 G5 f9 P4 m3 I7 o5 z
        ECHO("+++ %s\n", err);# `4 d: o* h8 V6 W8 I" w+ ?/ ^
        ECHO("%s;\n", call);) [  {$ u, o. ^: r2 d
    }
2 l6 O' X. ]# B$ c7 g  b. A
+ c: h  Z( Q8 U    return(irc);9 }( u& ^0 C! P# X% G; T6 L
}, R& b/ L/ q0 l  I6 a- p
4 f+ N% v: R* v4 a+ s; A
static void report_assem_search_directories(void)% z2 p3 a4 m- B6 S" ^8 E+ H0 ?
{
* M& }+ i9 S& J5 b* e( W. I    char* H3 t1 m! ^6 v3 R) a1 u6 j
        **dir_list;0 R( o7 G9 S- R% f* r& t$ ?7 c
    int
5 c. r; ~$ z% X        ii,6 h9 K3 Y0 {: o6 P
        num_dir = 0;4 h1 u$ q) h( f. f4 U0 F
    logical
. Y6 r1 A, g7 z& s; I2 j        *subs;
4 S$ O& |  i1 H4 ~, o# t& ^/ O8 {1 a- ?8 E5 ^1 _3 F; r
    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));2 o  t) B+ S- W$ {% u$ e. W
    for (ii = 0; ii < num_dir; ii++), c) E# q; a$ _" d. G
    {' z$ J6 [4 r4 E% w" F
        ECHO("%s", dir_list[ii]);
" J7 x6 ]/ y3 o" X# T        if (subs[ii]) ECHO("...");
# y5 ]8 a6 @: m        ECHO("\n");) Q& f) o  C3 b8 v9 ^
    }
3 Z4 ], t" F0 c( I2 y  m    UF_free_string_array(num_dir, dir_list);
# c' Q2 x  W; {    UF_free(subs);; S: d, r9 ~! L5 _
}. h- y3 Z+ s. t  v
8 x# ]% v  b' k
static void report_assem_options(void), d& h/ {3 H0 `' u# l; E1 t  Y4 ~
{
8 y3 n& H& n8 r$ J6 Q) @+ X+ K& G, ^6 e& k    UF_ASSEM_options_t6 `0 z6 ^% n8 M4 X
        assem_opts;* a* {9 a, ]* ]! d7 `) T
4 W1 {# o; x. v- q: f. h0 t
    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));* z7 p( K1 o. P; _% u
5 a! F* ]6 q4 U
    ECHO("Part Versions\n");
. _; s9 `5 m* F    swiTCh (assem_opts.load_options)
, Z+ z( p6 s) k0 I. p8 F) D    {; O8 u; x& W5 o5 Z' x& H
        case UF_ASSEM_load_from_directory:2 r) S0 v. r& I! D
            ECHO(" Load = From Folder\n");
/ p! `" s( l' E  p8 g. ], k            break;; D2 [& g" K1 ?8 ~
        case UF_ASSEM_load_from_search_dirs:
9 D" b- @% y, s. m4 G            ECHO(" Load = From Search Folders\n");
1 b$ s4 z& [+ z1 ?- Y6 v1 _2 R            break;$ ]! v; h$ ~4 `$ T$ A
        case UF_ASSEM_load_as_saved:9 [* u4 g% Y8 |8 t2 p1 {8 E$ ^6 v
            ECHO(" Load = As Saved\n");% f, y$ R( ~0 l) e  Q2 s: [; M
            break;
. s- q5 {& T2 X6 w) k0 N( l        default:  `. c- }. X" Q; R0 ?" F! w' E
            ECHO(" assem_opts.load_options = unknown value (%d)"," I8 g. S% t! B! I' t' v
                assem_opts.load_options);
1 g4 k2 p" M/ Z2 o0 Q9 E            break;1 C* x0 z4 }1 S' n" M( V! [
    }8 H% N7 C# \4 t

. `# U" d! U- A1 Y) f    switch (assem_opts.load_latest)8 X& j; Z# b, g' D
    {$ l) R' G( B5 v" c& e. T3 C! z
        case UF_ASSEM_load_exact_version:( M$ P, A  F6 N, n+ U: J
            ECHO(" Load Latest = Off\n");7 N. l: D9 k2 Y/ e9 w) v5 x
            break;$ ?2 W# c% N2 u3 r% m
        case UF_ASSEM_load_latest_version:. {# \3 F! g8 O' I
            ECHO(" Load Latest = On\n");% k, s2 B1 u0 L  n( z8 ?. f
            break;4 k& r2 s- W+ `% K) l
        default:8 @$ Q8 w' S! |& a: x/ `
            ECHO(" assem_opts.load_latest = unknown value (%d)",3 u7 a( a" W$ m
                assem_opts.load_latest);
2 G5 M0 h; t7 E1 n            break;9 F' E- [* q1 M; ^
    }; ~8 g# g* T8 z8 b

. H9 c( [8 v+ J. e    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs)
! N. {# n7 f% `: w8 {) F' q        report_assem_search_directories();
: L) m# T6 O1 Q7 y1 X" O
' a% f, B9 m1 j) l, ~/ {! L7 b    ECHO("Scope\n");  P+ r4 }9 _& M  |
    switch(assem_opts.load_components)
$ \  H# p5 ~7 z/ U# n" q1 |    {
) K# k5 w. v) M7 X        case UF_ASSEM_dont_load_components:
7 `( ~% _0 q5 ?& x            ECHO(" Load = Structure Only\n");" c" E; s9 ?2 h# o% f
            break;) ]$ V9 ~+ ~/ o% _) Y( `( I& o
        case UF_ASSEM_do_load_components:
9 U, ?! |' p: Q- j, Q1 w0 t  g            ECHO(" Load = All Components\n");
% J7 Z' h( N& d: W0 f& }( l% ]6 D            break;
, T4 Q2 M% L& z+ ^. r1 X2 F4 Z' V        case UF_ASSEM_use_last_component_set:
: V* H* A7 \* a! r            ECHO(" Load = As Saved\n");' }/ Z# k( q4 |9 V: _2 i5 y7 q1 ~: y
            break;
# `* H# `9 `% F$ E; P        case UF_ASSEM_use_last_filter:$ m. t. r2 ]3 A/ B8 O; L# x# A
            ECHO(" Load = Re-evaluate Last Component Group\n");
  @% k5 O. o# [) [            break;
  W, Q1 u) a, `. w/ K6 N        case UF_ASSEM_specify_filter:
1 l' |! ~6 q6 p% y/ _7 e1 L/ b8 F            ECHO(" Load = Specify Component Group\n");3 w5 s0 J- w2 T- m1 D6 ]/ N
            break;
; h' \" l: c- u, G8 K        default:! l: y# S+ O* s+ o2 w1 i# e. r
            ECHO(" assem_opts.load_components = unknown value (%d)",2 m# O8 J( J/ J" A4 t2 {) k
                assem_opts.load_components);( m2 R: u- x! a* l5 j
            break;
1 t1 T: B9 @. ^; |9 N    }& s3 v2 f3 ?! \5 u2 Y1 D) W+ F0 z
5 L, r1 u! A/ S0 u$ n  m" ^
    switch(assem_opts.load_fully)6 K" o7 U  E0 x3 W/ L. l/ `
    {
- p: S" L' n! E' c0 h" H. T        case UF_ASSEM_load_components_partially:
. K! O7 l) A0 h            ECHO(" Use Partial Loading = On\n");
' s% Z0 {2 X7 _9 k$ [4 q            break;  i! v# F# V. v) j5 L
        case UF_ASSEM_load_components_fully:
/ m/ k3 I  `+ o3 A/ J            ECHO(" Use Partial Loading = Off\n");
& p8 e0 w" f: C/ O            break;6 y/ c: n5 G. h, n2 Z
        default:% y' ^) X7 Y- m% `  o& ?' x
            ECHO(" assem_opts.load_fully = unknown value (%d)",3 G0 U% ?# I; |  _
                assem_opts.load_fully);* U  N2 K7 c4 B! y
            break;
2 N/ H5 M3 M6 M' c- s% J    }
& d1 \% v( E& x, I/ ^- l. i
; ^" \& W; F# S' u! W7 S( }    switch (assem_opts.load_wave_data)3 c" C% Q$ U1 \/ t+ y
    {- ~! ], a! O  g' \' Y! u( I( D
        case UF_ASSEM_load_wave_data:
) F- n9 j7 b( x9 @) w            ECHO(" Load Interpart Data = On\n");
- l$ k' F, F' D, |- ~& e; U            break;" Y& W2 I* H) @2 @* T# F
        case UF_ASSEM_default_load_behaviour:6 N' u; \" E+ G" t0 I( V4 F3 ?% _
            ECHO(" Load Interpart Data = Off\n");
& h: U( J5 B# X2 A            break;) M9 E# f0 t7 p) g  j2 l; a! P' Z, p
        default:* t( U5 l2 A; u4 S
            ECHO(" assem_opts.load_wave_data = unknown value (%d)",
& e5 d$ T8 W' N6 H' ]                assem_opts.load_wave_data);5 Y9 \* S% U7 K( T4 t: T6 R" _7 h
            break;7 b0 }' F& j  f  v
    }2 R" }  _* R( O. k5 j* C1 A2 m6 x
9 J! Q+ n+ z9 ~
    switch (assem_opts.load_wave_parents)4 C* f: q4 |. y" L
    {
: u( a4 y$ \& ]/ W+ J( c        case UF_ASSEM_none:" ?) ^4 M+ g( U% i
            ECHO(" Load Parents = None\n");
. y& ]7 a8 N+ a% Z( k            break;
; a" y6 a; V; X        case UF_ASSEM_immediate:! A! w' l% {) O# q6 p! s/ R
            ECHO(" Load Parents = Immediate Level Only\n");) m$ r/ r9 L  d4 a6 ~! N: d
            break;
' N1 K5 G& [: `2 S" ?4 g        case UF_ASSEM_all:/ U; \2 @: ~! Q- ]0 `
            ECHO(" Load Parents = All Levels\n");
0 ~( J0 i4 o/ c8 C( q  Y% p            break;- f4 [1 j; z6 G! T$ ^% F1 [
        default:9 p2 G7 ^% K- H/ S; U4 }
            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",
( n- n4 T9 |3 E7 |1 p+ s6 g                assem_opts.load_wave_parents);9 g# @. r, D. R, U
            break;2 ?& \3 u8 s9 [+ [* D4 ~8 W/ L
    }* O& |1 J8 F2 p4 U, H. Z6 _
. y* N% A; v- [6 Q" {4 w) l- r$ }! ^
    ECHO("Load Behavior\n");9 Z  d, W0 A3 G$ `7 M
    switch (assem_opts.load_substitution)
' T0 n+ m- Q+ T* i/ c3 i    {4 D% @- z" V/ [6 e4 p  t9 C
        case UF_ASSEM_do_allow_substitution:
9 H; h, M' d1 Z. V+ D0 z% c& x            ECHO(" Allow Replacement = On\n");
$ j8 G0 S, Z9 X; E( ~# G$ K            break;, P; D2 U6 y7 K! \
        case UF_ASSEM_dont_allow_substitution:% A, X  J/ \; k, a! `
            ECHO(" Allow Replacement = Off\n");
+ L, d9 _5 Z6 ?' k7 o6 N) ?            break;
+ X+ z3 |- d6 G& A* |3 K8 E( D7 g        default:& V( X+ k/ W1 ]9 ?0 o& I
            ECHO(" assem_opts.load_substitution = unknown value (%d)",4 J  Y! Q$ v% W9 z1 h
                assem_opts.load_substitution);
0 W2 h3 k* J4 \) G; g            break;% [  c9 V2 M5 M; v3 \  y
    }
! Q. m3 O; V4 E0 W* D! O  Y4 X! B7 ^) j' s
    switch (assem_opts.auto_regen_pfm_option)
# W2 I* D6 l6 ^    {8 }) l( O5 G3 x# R7 o
        case UF_ASSEM_auto_generate_pfm:
* [+ _% G* q* i# H% R5 ]& o. F* Q            ECHO(" Generate Missing Part Family Members = On\n");
4 n5 N' v0 S6 _1 R; H1 d5 V            break;1 M+ g7 X) H: C, w2 B
        case UF_ASSEM_dont_auto_generate_pfm:
8 H5 o2 `6 y# G. K5 i            ECHO(" Generate Missing Part Family Members = Off\n");
9 h3 f1 {( x4 c            break;0 v! w7 S0 }9 \
        default:% R0 I% R  w9 e- m: U7 C, i
            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",* c1 y/ I1 q! w" |( q
                assem_opts.auto_regen_pfm_option);! j" `2 y% |# q7 N6 w0 J
            break;
& k' t4 Q" M+ W: O& l    }) T. I4 ~8 B3 b1 D% X. @+ s5 x  V

: s' m3 W+ b( `( k    switch (assem_opts.failure_action)' ]' I5 J5 C4 Q1 J1 |  J, @8 \
    {" e+ e2 L9 x5 ?% F
        case UF_ASSEM_do_abort_on_failure:
5 t& _& k9 i, ?* R            ECHO(" Cancel Load on Failure = On\n");1 C  [  [/ {0 [# S
            break;+ d' Y& c2 ~* p/ ^0 E
        case UF_ASSEM_dont_abort_on_failure:
# m' E. H1 X# A) E9 g6 S( T$ ]) D            ECHO(" Cancel Load on Failure = Off\n");: W" h7 y* E# c' Y
            break;; D! l6 t9 s& m0 Z4 J0 r: B
        default:
* u: n7 L* B. Z! i, E$ j, [2 T0 j            ECHO(" assem_opts.failure_action = unknown value (%d)",
( Y' D6 p# i7 |                assem_opts.failure_action);
6 b* X# y  t9 J3 H            break;
$ Z: q! F, [4 k! n; N. I3 v, C+ O    }
/ R6 t/ C  \1 I0 {5 ^, q$ P0 g0 i/ R6 B5 F" u/ m3 |
    ECHO("Reference Sets\n");5 D$ ?+ y9 C7 N7 v" s& m. L
    switch (assem_opts.apply_to_all_levels)1 j8 k" _# z9 g3 q+ Y" v& H$ g
    {6 V+ N2 i) o0 v/ }; k4 I6 u
        case UF_ASSEM_do_apply_to_all_levels:
4 c$ K9 q/ C, D& r& ^. L0 b3 ^            ECHO(" Apply to All Assembly Levels = On\n");) \* W/ {0 p# j+ [5 E
            break;1 x' y' h/ e8 x5 S' f
        case UF_ASSEM_dont_apply_to_all_levels:
: Y, w3 O8 C6 d            ECHO(" Apply to All Assembly Levels = Off\n");
0 {. @, T! x" s4 W, `6 C! ~7 I7 V            break;
+ c8 T7 t5 j! ^9 ?1 V  C$ c0 w        default:, |: R, G6 V! }! _  z: V0 u5 @
            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",3 P% y6 e1 Z8 U  @& t& z; L2 S
                assem_opts.apply_to_all_levels);6 S/ s/ q, j* K( u
            break;; W- ~5 I% a6 f( P! K
    }  R) ?- _* K$ e4 a3 O

' e1 C1 F* [, s; s+ Q    ECHO("Preferences-> Assembly (misc)\n");
/ O" k0 i* t3 l6 Q    switch(assem_opts.emphasize)
, k" y+ T% u: p# P/ c  v    {( i" i: Y- N/ D6 |  }) {. F
        case UF_ASSEM_do_not_emphasize_wp:
& @' Q# C0 o- ]8 L/ Z7 g5 k            ECHO(" Work Part-> Emphasize = Off\n");
" }' u! w2 ?% `- b) h            break;: G' u, U: ?3 @/ `( t, p+ `
        case UF_ASSEM_emphasize_wp:
9 p# e* h% z8 A/ _4 V' Q            ECHO(" Work Part-> Emphasize = On\n");
5 _  L0 L% f% x/ m. P- L4 S$ X            break;
' ^6 J6 \, S( X/ m        default:
) `3 B/ D. Q: l! M) P5 @3 X) j! T. `            ECHO(" assem_opts.emphasize = unknown value (%d)",7 D2 B- z) Q. @+ J1 c/ G5 m, |
                assem_opts.emphasize);
% x0 w* Y0 a7 ^: @  \            break;+ ^& [1 f! y7 c6 s! B
    }
4 m. H7 P6 [( q7 ]  z1 ^$ `
: P$ z9 h6 k1 V) e  [: F: [1 Y    switch(assem_opts.maintain_work_part)
7 a3 R/ Z- D% f7 T" _& n/ |    {0 D8 m$ d2 R# T/ H
        case UF_ASSEM_do_maintain_work_part:2 f+ m% k0 V' }: B
            ECHO(" Work Part-> Maintain = On\n");
8 N7 f& d* y: K* S# V            break;
8 G2 K* j$ O0 i        case UF_ASSEM_dont_maintain_work_part:  o1 R) i' C: ?9 D
            ECHO(" Work Part-> Maintain = Off\n");/ r7 C) q" s- X/ t2 q: w2 w' O4 |" {
            break;
  c3 E- X0 ^; D# O% j1 q* X% r$ D* M        default:, p4 B# Y3 e, ^5 U' G) P
            ECHO("assem_opts.maintain_work_part = unknown value (%d)",
7 O6 w6 D, ?& {, K& W                assem_opts.maintain_work_part);* i; u9 e, w9 r6 R2 r1 q
            break;4 h9 N6 y0 b2 o+ k, x
    }
9 V# z# t( {6 ?( b" O    switch(assem_opts.update)( P5 U( `8 W5 L; P, J0 q2 n% f6 k
    {8 ^0 N" T2 Y5 J4 ]+ H+ {7 |, F6 q% X
        case UF_ASSEM_no_update_report:
; O5 D! j! ?& u' Y! R' g  a( |            ECHO(" Display Update Report = Off\n");
4 d9 p5 _  U7 s. t% o! i' s* d' c            break;* {. C8 _1 ~0 p* K* t
        case UF_ASSEM_update_report:
& O/ L( m, S+ U            ECHO(" Do Not Display Update Report = On\n");
* `+ S1 C& T* t9 I8 I9 K            break;9 y/ G; g; o3 P& e
        default:
. E  I2 o2 S6 |0 N            ECHO(" assem_opts.update = unknown value (%d)",+ w  E, s/ @9 g9 H0 s; Y
                assem_opts.update);
2 d  A* F$ D( j' A8 L            break;% k, d- F" x: k5 a( x) T
    }
' B: D: p* A& `; v8 J}
; {3 x, F; ?% W& {- Q
0 ^3 u8 ]1 \7 }# Pstatic void load_specified_load_options_def_file(void)
& o1 R6 P$ ]2 w3 b- w9 O8 I. [% R1 e{' J$ f! S/ \# E
    int
! Z4 B" t7 ^1 H1 H, d        resp;
( x- f1 J8 P- y- w/ O+ Q    char
2 ~3 s$ ~$ F! L" j( m        filter[MAX_FSPEC_SIZE+1] = { "*.def" },4 Z% Q2 b& ]( A4 l' D( P
        fspec[MAX_FSPEC_SIZE+1] = { "" };% a& H2 t+ j7 _
, x; A' W/ A+ b" u
    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",
2 E! L1 ~7 Z" F7 {6 F' B. U        "Restore Load Options File", filter, "", fspec, &resp)) &&" U; Q6 e+ I6 N9 Z3 \
        (resp == UF_UI_OK))+ ]5 \, q: s) S
        UF_CALL(UF_ASSEM_restore_load_options(fspec));
; K, d4 o7 \$ V0 e- p3 _4 \}
; S- W8 E( y$ o$ s/ d- C
  Y% h7 d! s& S- H+ Mstatic void do_it(void)3 F5 f3 \3 y* \0 w! v" @
{
3 ?3 n& S% c& o    ECHO("Current load options:\n");+ ?  @. L% ~3 y6 C; X
    report_assem_options();8 x6 i# [9 I3 `+ A% h; P0 d

! z) i( ]5 P7 \2 ~; q4 l5 d) I    load_specified_load_options_def_file();
. v# E2 \' k. g0 L  I& l4 K1 }3 N( W- K& n& B
    ECHO("\nNewly restored load options:\n");8 m2 i# A1 w* z9 S
    report_assem_options();
7 B# v9 O) B' n. u4 B}9 h. H& B/ x3 |! Q. _/ }6 T
* {) d9 c2 D  L
/*ARGSUSED*/' h+ q4 N4 m7 k4 |) o
void ufusr(char *param, int *retcode, int paramLen)
/ O! o: z0 _8 c! @( t4 N7 ^{
4 n5 k3 |6 a/ X) K2 p$ w    if (UF_CALL(UF_initialize())) return;: v2 I5 w0 Z: w, q1 y
    do_it();1 K% y$ S& a. M
    UF_terminate();& L4 X% ]9 `4 d3 F
}) O3 j! v3 |/ V) ^

% _4 [1 c1 i% b; k) Oint ufusr_ask_unload(void)
) f' s9 [; v' p$ J9 p{
4 C" G$ F+ g! I    return (UF_UNLOAD_IMMEDIATELY);
# q+ W" g0 t/ ]1 |/ c/ q: g8 J: L}[/mw_shl_code]
- w8 \/ j0 p* I' ~# v+ Y# U
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了