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

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

[复制链接]

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

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

admin 楼主

2019-9-15 08:32:35

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

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

x
8 C2 X+ `* R1 O' f  ]3 f
NX二次开发源码分享:报告装配加载状态,设置装配加载
1 i* k4 g  U" |; E; \0 I- w" `9 k' j' R! i
获取Load Options 并进行处理!
8 x- K$ a0 f: e* X& ?. \  I$ y* T$ `" w( U7 H& _$ j2 `2 {
[mw_shl_code=c,true]#include <stdio.h>
+ M# o( v) k6 t% z+ ]#include <string.h>
! d; x) ]8 j: c2 P#include <uf.h>
2 y' Y3 f4 P, \; X#include <uf_ui.h>
/ ?8 a6 b3 B& b9 O#include <uf_assem.h>
# g( a5 y: N( u2 \4 ]0 R) _3 A
. F2 B' D8 v7 _; b7 l5 S#include <stdarg.h>
  q1 G- P7 [0 X8 O" e/ k4 [# H4 e7 @$ X9 E4 t! z8 C; f3 |/ a4 y; u. \
static void ECHO(char *format, ...)
. h" y! W* @, @; t! A{
$ B% K4 y* P' o$ m  x4 N    char msg[UF_UI_MAX_STRING_LEN+1];
9 j7 a8 s" A# ?7 X6 p8 @7 x    va_list args;. S+ `, t. [, i# N
    va_start(args, format);* T2 o" s0 ?4 ~# `9 |# ]/ c2 L' v
    vsprintf(msg, format, args);
& G# o6 h( T, d, ?- b/ S    va_end(args);1 Z1 D. a2 J, |
    UF_UI_open_listing_window();9 ~1 e8 L! Z, Z* e2 }& Z/ u
    UF_UI_write_listing_window(msg);2 X" M/ L" m) Y$ X9 |2 \9 j
    UF_print_syslog(msg, FALSE);$ G* L' n2 Y1 Z( Q
}0 [% S* t% ^" U: |
6 h+ o8 c' x+ D0 I+ d  P" v- k' _
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
0 }+ p% F7 V$ O2 R: Q! s3 o9 G! S' g0 j) K. u/ V% r3 v; Q0 v
static int report_error( char *file, int line, char *call, int irc)2 Z+ U$ c2 S' c% s$ L1 ]
{
! M0 I' d0 U/ d9 z! {    if (irc)) T: P/ N0 [: p5 ?  R' t
    {
, {7 Z7 K0 N; r1 I0 j) {( a        char err[133];
' `$ o6 U& l* `5 m
  o: |8 a1 A) A* h5 B        UF_get_fail_message(irc, err);& J' d/ ], U4 _" I3 k! }; Q+ u
        ECHO("*** ERROR code %d at line %d in %s:\n",% N5 }" T% J6 p  `& ^6 ?0 j* M
            irc, line, file);
9 _3 l4 l: ?+ i; T$ V        ECHO("+++ %s\n", err);
5 Z& v& O) T5 F7 M- o3 N; x        ECHO("%s;\n", call);( y7 F/ J. M  q
    }
3 {5 Y( P! \. k& N) `1 O& T5 |# b
& y- Z0 w! f( t" h+ m4 L    return(irc);: c! B. U5 w  I4 T2 E( e0 j
}
  j2 r6 H% I# ~. q3 r. M5 e1 R0 ~3 l) R) r) _
static void report_assem_search_directories(void)
3 P; W  Q: x# D2 }{8 k/ I; {: T9 l, G. O6 Q
    char- a* e5 I8 J) a- @, _5 N
        **dir_list;8 \  Q& w% E" o1 v6 S0 c
    int
6 j) L, }. T; C        ii,
) U9 L/ o5 N9 c& i# s# ]# g% ]        num_dir = 0;
8 s7 V8 _, z0 M( Y2 A/ ^1 l9 x    logical
! i  C- B  e0 u8 B( U/ ?) k        *subs;
4 g1 S6 S: t( z7 P  }% e* {; j8 X$ d1 G2 E
    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));
& q' ~7 Q% V6 L9 X    for (ii = 0; ii < num_dir; ii++)
2 m8 ?, e$ B. y8 B" B    {% u  S6 F: v- V# R) D
        ECHO("%s", dir_list[ii]);
0 d: U1 t) S# ?/ D  @# I# O/ a6 g        if (subs[ii]) ECHO("...");: `: S) y9 V7 s" l
        ECHO("\n");, R, R) n% y+ [6 N; n$ u& _
    }
0 V. q& E& z, o& n8 S    UF_free_string_array(num_dir, dir_list);% L* w* `2 x/ J, L4 A% y& Q
    UF_free(subs);& Q5 d  [" h4 R" ~6 W4 O
}
( K/ @' Z" {+ X) ?& g" W2 N, r
5 R% A1 Q6 D5 ostatic void report_assem_options(void)* s" K" c, R8 ^/ L! D& [' S
{. g5 a) C( k) R+ B( B
    UF_ASSEM_options_t, q$ R, O0 I. L5 f* m5 {* T( d
        assem_opts;% h9 e- l' G+ A6 c. Z; w8 y' @' o6 a* I

6 `& D. p  {4 C4 ]    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));6 R4 Z9 ^2 [% }8 j: _
. t, b$ u1 q0 v
    ECHO("Part Versions\n");
5 F6 F3 G8 \1 n) G' ~- V# Q1 O    swiTCh (assem_opts.load_options)
/ e' l! F% _( f) [    {* u1 r/ e/ F. H" d
        case UF_ASSEM_load_from_directory:
/ a% D2 i9 ]+ P            ECHO(" Load = From Folder\n");2 ~# @  x3 ]: ?, ^! A
            break;4 s) f; [4 H& y# k* G( z
        case UF_ASSEM_load_from_search_dirs:
9 X; h  r$ S* |, V: H1 k( u            ECHO(" Load = From Search Folders\n");
0 i* A; i0 f7 m5 O& m            break;% u8 D9 [6 Z# \8 F4 g7 {
        case UF_ASSEM_load_as_saved:* {* U) Q) M6 w
            ECHO(" Load = As Saved\n");8 m3 I" E) z$ M' s
            break;: H0 i3 t9 L+ }3 A# X
        default:
) Q. J# Q, {* q* E6 S            ECHO(" assem_opts.load_options = unknown value (%d)",
" \- w. g8 A* W! ^( Q                assem_opts.load_options);' D8 ?! [# W2 [% `0 t2 ?
            break;9 L3 C2 {: B8 X; f& ~
    }
) J, S; k. k/ F9 M  u" n  z! @4 @" }& A' h& U7 H4 H# H% c( b8 I1 z
    switch (assem_opts.load_latest)' x' P( n( {  G, J# }1 v
    {
* y4 A& o! U; o# D" j2 q5 n' A" {        case UF_ASSEM_load_exact_version:+ G7 V$ y; I. Y5 N8 K* t" T
            ECHO(" Load Latest = Off\n");0 v0 G2 b& ~; \' ~
            break;
5 M' K, M$ F- h& k* T        case UF_ASSEM_load_latest_version:9 A1 D+ Y: X6 F% ~. O5 `
            ECHO(" Load Latest = On\n");
! M9 I0 w/ Y' D1 m9 t- c            break;' T, H% K9 |7 j# k. d3 N- O
        default:: k- o. y( _! t4 _) }2 l# j  c3 p
            ECHO(" assem_opts.load_latest = unknown value (%d)",% Y! r: I# F1 P: ]' R1 L
                assem_opts.load_latest);
' C+ G7 k& @5 U  y2 U2 c8 i            break;. N& [7 d/ Z; ?6 L1 S& z) ]
    }. S8 ~  K; B6 {. e6 b6 C, Z
8 W5 j7 C+ i1 A, x& W* a% b6 ]
    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs), f) V% H. X6 H% u3 q
        report_assem_search_directories();2 m. G/ `4 c& c5 e& }9 @

0 ^; o: L2 |$ n% \    ECHO("Scope\n");
4 S0 J6 z3 C/ R    switch(assem_opts.load_components)
: t' y5 b8 v& M0 W7 F    {1 c" \6 \8 Y+ ~4 l5 w+ \7 ^& g
        case UF_ASSEM_dont_load_components:
5 w- I0 O8 b2 P4 [0 |6 ?9 t* r, O            ECHO(" Load = Structure Only\n");/ I* c% R, t/ N- a: J3 N
            break;
7 L4 H! I. B5 Q        case UF_ASSEM_do_load_components:
$ ^/ M/ C+ `" `, z# V            ECHO(" Load = All Components\n");- {% S7 M3 p7 {- t
            break;
9 j+ v. K; ?9 M9 p& }: ^! W        case UF_ASSEM_use_last_component_set:. e6 v9 g9 ~7 B0 j' I
            ECHO(" Load = As Saved\n");
+ M1 z1 G5 x; L& W: k9 M            break;
6 D% a/ ^+ d  d2 k% W        case UF_ASSEM_use_last_filter:
& j  X  B3 a  ~/ e            ECHO(" Load = Re-evaluate Last Component Group\n");
5 ?/ p( f# U+ W5 e6 `, o. A- n            break;
/ T, a7 X( H% R9 z% e& e        case UF_ASSEM_specify_filter:
- W8 F+ \9 ^  H' W& X& E  F            ECHO(" Load = Specify Component Group\n");6 v4 u1 N  y+ B  c3 b6 L
            break;: A9 I1 `( d+ T9 R
        default:$ G; P/ h/ ], q" y6 w0 U! H
            ECHO(" assem_opts.load_components = unknown value (%d)",/ E5 j8 n  Y3 ~, h0 J
                assem_opts.load_components);- `; _0 N: e+ E/ ~! |
            break;: X' ^1 H" C. `' x  [- ~
    }
4 N, \4 @' z" r9 A
# O4 l5 \% J/ f3 k7 @* [    switch(assem_opts.load_fully)0 v0 c: n/ ]8 j& i
    {$ e0 P% s1 M7 D. J
        case UF_ASSEM_load_components_partially:
3 [3 I, ~" p; L: y            ECHO(" Use Partial Loading = On\n");3 Y7 s) |# n4 F  ~& O1 _1 u
            break;) N- n6 N- S" u* N
        case UF_ASSEM_load_components_fully:
1 e& p: M0 I/ `; S- [, a            ECHO(" Use Partial Loading = Off\n");
% N: B) D4 R7 b5 a; u) ]            break;9 p. w0 R  D7 E2 o6 y; a& G4 ?7 z
        default:9 r6 D% _% H) F/ B: x
            ECHO(" assem_opts.load_fully = unknown value (%d)",# C* V7 u5 ^  S# H
                assem_opts.load_fully);
0 {( d( [+ c0 M( l            break;
8 ~" K0 g/ d& F; [" G& u4 D  ~    }
% t( b5 O' U9 m7 n
4 y" v9 d$ l4 n( ?2 M! V    switch (assem_opts.load_wave_data)) P: Y/ \* ?- y0 z, |% [
    {( A& s7 Z" M# k2 b8 I, V9 ~! Q$ E( y
        case UF_ASSEM_load_wave_data:
0 ?* _  N% |  l  d) h5 _9 N            ECHO(" Load Interpart Data = On\n");
- U" L8 n7 D& R7 `% V            break;/ ~* a: m& l0 H: J0 p( u
        case UF_ASSEM_default_load_behaviour:
' w! }: C) z+ B6 S* d- W            ECHO(" Load Interpart Data = Off\n");' B' b1 ]) |5 @5 ~
            break;
, w2 n! ~/ N/ s: v        default:
0 i) {: o, j4 y( s/ U) T4 u            ECHO(" assem_opts.load_wave_data = unknown value (%d)",
+ P" x( n7 G+ i  D7 U                assem_opts.load_wave_data);
2 A2 \. x: ]3 Z; {            break;
7 ~9 r' o7 c+ g1 I# k; S* p- F    }9 B" ]6 i7 g' A2 U4 o4 B
6 T! f, R  J) Y5 R% @
    switch (assem_opts.load_wave_parents)- D. D) i' a5 T9 L
    {
! n/ n" h4 D- F+ J, t# |: x3 a& D        case UF_ASSEM_none:
8 I- O( z9 ^' ]4 H            ECHO(" Load Parents = None\n");7 j* Y/ H, q! |0 C
            break;4 D% `& T" F; q; ^
        case UF_ASSEM_immediate:  R7 M; a4 Q! U3 k# t
            ECHO(" Load Parents = Immediate Level Only\n");3 m6 d! n* i7 H# F: S8 x4 P
            break;5 ]: G3 w" d# D3 v, K
        case UF_ASSEM_all:
( S. s5 `0 r& E5 ]7 Z. v) k: Z            ECHO(" Load Parents = All Levels\n");$ E5 }% S2 W  q) X  ]
            break;
+ l6 z& ?* N  o( g8 N2 C        default:
' N1 v. A1 r4 k& N: j; j            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",
* R( d) [- M1 X, r, m# a( ~5 [# C- s                assem_opts.load_wave_parents);; ~0 |% \& Q# R( t2 N
            break;
1 L/ R( }) R; K+ ~5 S3 s    }5 E* C' \" P* F; _2 D

. P  Q; b; J4 [: D# s    ECHO("Load Behavior\n");
& ~7 Z. l' b+ P0 H* q1 Q  R    switch (assem_opts.load_substitution)
1 I2 J! c# X. i/ P    {/ o2 i) X- M& ?) T1 E  i5 T4 b1 l
        case UF_ASSEM_do_allow_substitution:4 u+ [' ]2 y  Q2 Y$ P- k$ ^% Q
            ECHO(" Allow Replacement = On\n");" j$ g2 \; C/ x/ c" f. Z2 V/ q
            break;
( p( `  }9 \; [: h        case UF_ASSEM_dont_allow_substitution:
0 X" {% W6 U: i! b5 \0 z8 ^# L            ECHO(" Allow Replacement = Off\n");
4 D: f) E' ^/ s( v/ @            break;
" z* Q( r1 I$ `9 k3 q' R4 _        default:
; Z: |- b7 q! Q0 y) C3 I, R; k            ECHO(" assem_opts.load_substitution = unknown value (%d)",2 ]/ b1 [$ o$ `$ b) H( B
                assem_opts.load_substitution);; [* L5 f% J* v3 q6 s& [% n& L& n
            break;; F* r. O2 v% p% z" w5 ?+ x# D2 J
    }) W, r4 F& J; f# }% S* d( }
! V0 ~8 d; }3 P) T
    switch (assem_opts.auto_regen_pfm_option)
9 D6 f( H& t0 `5 v4 b( @; M. h    {
8 o# i, p' f" m' G- k        case UF_ASSEM_auto_generate_pfm:
7 i$ R& J0 X( V" i2 s            ECHO(" Generate Missing Part Family Members = On\n");
7 n1 b. }3 G6 m# R& @& n- a            break;% W1 E% Y& P  n+ k3 _
        case UF_ASSEM_dont_auto_generate_pfm:" i' I# z3 R% n) \
            ECHO(" Generate Missing Part Family Members = Off\n");
$ R, J0 @# ~1 B' q3 D4 d; J! p            break;
! h# I) s# @# M! {) [+ w        default:
+ Y6 P' S1 K6 d# Z) k" r% ?4 H4 e            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",
, d0 M$ m7 b0 y; a, p                assem_opts.auto_regen_pfm_option);
$ t" }. f5 K, s  d9 ^6 j  O            break;% {. Z8 e+ Y, j
    }
- i. Z% y5 s- i
; y, ?3 l  `+ J5 \; d) J    switch (assem_opts.failure_action)
7 Y# K4 U3 `4 z9 v! U    {+ e3 Y5 ~. T* t, ?- V3 K) u
        case UF_ASSEM_do_abort_on_failure:, Z" `& I6 J5 c+ p
            ECHO(" Cancel Load on Failure = On\n");
. I! {' Q$ I. a  R/ r& l            break;
- P! k, s2 Y6 F( s        case UF_ASSEM_dont_abort_on_failure:
+ h, V9 {) W+ b& x* `" P            ECHO(" Cancel Load on Failure = Off\n");
( S% H) B7 }4 q: Y: d" j3 d            break;
( q$ {$ M, r, T+ ]- ?5 N; {0 L% ]        default:0 ?; K! h  [, I$ @, E+ H) b. j
            ECHO(" assem_opts.failure_action = unknown value (%d)",$ w8 h* o9 J, q5 @6 T7 e
                assem_opts.failure_action);2 _8 G2 ^6 @+ i+ E# Y
            break;
9 L3 ]3 Q) E5 \) r" U    }
& h9 c9 e1 C0 z! r* n: D+ X2 `, f' C
    ECHO("Reference Sets\n");
! |2 _8 w. j# [5 o# ~% U8 J    switch (assem_opts.apply_to_all_levels)/ \, ~! A2 R. X1 d9 i; T4 N* b1 W
    {6 D- a9 M4 o& z# C9 l4 [
        case UF_ASSEM_do_apply_to_all_levels:. a" o, N: S1 s8 [2 G
            ECHO(" Apply to All Assembly Levels = On\n");. Z$ l& d& I/ `, w4 d
            break;7 T+ B' o# A/ T1 A
        case UF_ASSEM_dont_apply_to_all_levels:
  }0 R7 e$ H0 x+ v            ECHO(" Apply to All Assembly Levels = Off\n");6 @* g# J7 {, s: Y& f1 e
            break;' R) D# o+ @) I3 n! q
        default:
# g1 J9 k$ o+ j. q) I            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",
" _. d) J) \& X% S; Q                assem_opts.apply_to_all_levels);
1 _  K) s8 `# _+ ]  R# g            break;
) j, q# q* @; Q2 E  k4 E    }! b( z7 e& c, E# {; a

, o: b* i9 i. T    ECHO("Preferences-> Assembly (misc)\n");
7 a2 v  w/ w! i$ \  Q    switch(assem_opts.emphasize)7 m6 I* x  V1 d( [! z# Y+ l0 R! M
    {
6 H- Q5 ]  n0 n& `" f        case UF_ASSEM_do_not_emphasize_wp:
. b# Z8 d. {, T% t            ECHO(" Work Part-> Emphasize = Off\n");: M0 w) M( y& k/ G
            break;
7 c; e0 }0 W5 x( v% D7 q        case UF_ASSEM_emphasize_wp:
" X9 m; R. k* \9 N            ECHO(" Work Part-> Emphasize = On\n");
' p6 s9 D, x" L4 S7 [( |; m            break;
) f2 z3 s  ]) D& A; Q# V$ ~        default:& L( S9 |/ @4 V  g+ J9 }' t
            ECHO(" assem_opts.emphasize = unknown value (%d)",
7 c& t  u/ J" S0 Y. ]                assem_opts.emphasize);2 ]7 L; Q4 V5 ^; V
            break;
$ G# {' E7 d  a: Q$ E    }9 W* [! i4 B/ G/ s$ V
, U, w0 m# c3 O& c: a7 \
    switch(assem_opts.maintain_work_part)( q) A7 K5 W" C6 B: ^
    {
  i+ N8 U9 F& }, I        case UF_ASSEM_do_maintain_work_part:9 X) ^! ~3 z: V2 @
            ECHO(" Work Part-> Maintain = On\n");6 u/ y* Y  H% z" W3 {6 V
            break;8 W* w1 X2 Q. N- s: c
        case UF_ASSEM_dont_maintain_work_part:/ k6 Z' u; t/ B) w2 A' ~1 r4 I
            ECHO(" Work Part-> Maintain = Off\n");! v5 \9 {* w" T( g# Z
            break;) L( u5 B7 j; Q2 O+ }" a6 [9 {
        default:. p1 R/ ^3 F- m9 f) r
            ECHO("assem_opts.maintain_work_part = unknown value (%d)",
0 W' p4 m2 V/ w                assem_opts.maintain_work_part);9 }8 G2 p. Q7 o" {% {" @" w2 t7 K1 p
            break;
0 @) P; s( F7 N7 O, Z. D    }! v4 w4 P! x: a1 U$ y, `
    switch(assem_opts.update)
7 |5 I3 B$ @8 A" H: M5 ]    {7 P& B9 {0 U: [2 H; B7 R
        case UF_ASSEM_no_update_report:# y7 z; Z2 n) h7 w: q- U. u2 r9 X
            ECHO(" Display Update Report = Off\n");  O# E+ A  C% e/ C0 d. k# b& Y
            break;7 K# A# K, w: p
        case UF_ASSEM_update_report:9 ]5 P7 h( x: B3 K
            ECHO(" Do Not Display Update Report = On\n");$ A. z( L7 s: J9 r
            break;0 B" l8 [; z9 C& A; a/ e
        default:
6 a' C8 _$ x; J2 F) }$ K1 m0 H            ECHO(" assem_opts.update = unknown value (%d)",
# H9 Z, k# _9 }( P                assem_opts.update);* F4 z& [; P& N
            break;
: O' Q' A" S# A, X' `    }7 S& Z# u/ ]4 o
}: h3 M: A' D4 {% ~, H( l' R
4 C- A: p" B4 \1 {
static void load_specified_load_options_def_file(void): S5 ]! n9 a9 R% m4 G' d
{( _9 D( O" w4 _) y7 N. C
    int
* ~- B$ _: l7 Q! s! L        resp;$ X( o; H& `4 p3 Z0 Y8 d% g
    char8 }! ?6 t, \# q) u9 `$ T. m
        filter[MAX_FSPEC_SIZE+1] = { "*.def" },
% m6 D( V; i2 ]1 K& A        fspec[MAX_FSPEC_SIZE+1] = { "" };4 t' u  s( ^- b. z, o- ~; C
) {* }# w9 j# R( C# ?& K
    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",' h  U% L. _5 q7 [1 X
        "Restore Load Options File", filter, "", fspec, &resp)) &&
/ I" s' ?% W; Q* r# j8 j        (resp == UF_UI_OK))* b; w6 S1 p0 z5 X1 i/ I3 x
        UF_CALL(UF_ASSEM_restore_load_options(fspec));+ x$ x8 y$ [& w' b& t
}  P) `0 w; }1 _8 G2 S
. ?- o$ m$ H; b3 A$ G' V- B+ r7 U
static void do_it(void). r& z1 L" d" v9 \7 f
{" G$ j* F# B1 x
    ECHO("Current load options:\n");$ w: W9 |9 n7 t2 n4 A
    report_assem_options();
9 Z, j$ p( l/ q- i' B
: t9 p7 o1 p. I1 I    load_specified_load_options_def_file();# A% W  C( g' I6 c" z% c
2 S! A# [4 b6 A+ g7 m0 L! o
    ECHO("\nNewly restored load options:\n");
, v- R" W. B8 }; |, h3 }    report_assem_options();
/ ~" x  y) K7 I& d- B}8 N" c+ Z0 _# ]- a7 M! V7 V& C$ j
: u0 z6 B$ Z+ O1 ^
/*ARGSUSED*/7 _: S2 D8 q' h9 ]  @( J
void ufusr(char *param, int *retcode, int paramLen)' M' M5 \' D( |0 g' f: a
{
9 C0 I# B" O8 ^" A- e  }/ B    if (UF_CALL(UF_initialize())) return;  W) d6 P% [, j5 i1 N
    do_it();
- S) P7 H4 ^! c1 b4 [    UF_terminate();2 y& d2 n2 H& D5 H
}0 U4 [3 t3 V4 l. |/ l( `) @$ |# s) l
) v! S, L; x2 t! V% u+ o3 D. S
int ufusr_ask_unload(void)
2 o: h6 I* s4 L( W7 t{/ l- `9 ^$ ?1 @- M: I) Y) y- v
    return (UF_UNLOAD_IMMEDIATELY);
% F# a, t9 t% z) T+ D6 S}[/mw_shl_code]
1 \: C+ W+ R; q: L  O( x8 n  Y: M
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了