PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2019-9-15 08:32:35 | 显示全部楼层 |阅读模式

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

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

x
' M" `0 E5 P* Z
NX二次开发源码分享:报告装配加载状态,设置装配加载
: F: e8 E4 K- u
1 F, ?# Q8 K  |. b获取Load Options 并进行处理!
  o) W1 U  z" u+ o
  r. g# y2 U2 O2 X+ }* s[mw_shl_code=c,true]#include <stdio.h>
8 D: e: L5 f( j& Z. ], J: h#include <string.h>
/ R6 ?$ H3 {0 m9 N* Z7 {#include <uf.h>- ~" Y: V& ?  S" r1 C
#include <uf_ui.h>6 h/ _9 @1 U3 s6 C6 I7 J  N
#include <uf_assem.h>
1 S* k' x6 d: L; W" N: p  u+ Z
: \9 Q7 i7 q7 U1 k" L$ ?6 b#include <stdarg.h>
$ H/ m" F$ ~5 e- [2 c5 G; i2 c! T, s- x, @; {9 t
static void ECHO(char *format, ...)
* V+ d9 W2 [3 _% O' Q. I  K{
" [* M; Q, z; e" F8 Q/ C    char msg[UF_UI_MAX_STRING_LEN+1];
/ y5 a; W+ l0 _& r& f' k8 ~- z    va_list args;
( k  F% ]# q/ w/ _4 E: }    va_start(args, format);
2 ?: ]. @: Y3 X: K+ y2 J: N    vsprintf(msg, format, args);. ~- f' z9 G- v6 P/ i% a% n
    va_end(args);# C- H& N4 {- A% d
    UF_UI_open_listing_window();; L% {0 {. c, z6 E
    UF_UI_write_listing_window(msg);
% n, p0 M" w5 J) c3 \$ V    UF_print_syslog(msg, FALSE);6 g7 o  M' |+ [. N/ r' g
}
9 X! W) X. T; L1 q' k1 h- W  q, Z  y- M/ q& Z7 l) C
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
! k1 d  }% o( W# g2 G# f  M/ R# U0 `) t- S9 R" S$ \% R
static int report_error( char *file, int line, char *call, int irc)
# X( p5 C. C* W5 T{) A# [6 R$ I5 I# @5 ]2 X
    if (irc)
+ ~9 |1 G& J; v# Y. I7 t    {6 c  o2 Y1 f- j3 T2 q
        char err[133];
! X# V" [' x5 }* ?* [
/ T9 \# ?. ~; V- }8 B3 Y        UF_get_fail_message(irc, err);
0 ~' q4 z. f3 G% L2 u4 i8 ^' Q6 {, P        ECHO("*** ERROR code %d at line %d in %s:\n",( f+ L1 m( F/ t2 e$ ]/ J& J) R1 |
            irc, line, file);( N: C* y7 o" N3 G  ^
        ECHO("+++ %s\n", err);
, _' r* J* _3 e) W        ECHO("%s;\n", call);
8 X( u! r3 ^% v! ^4 `# S    }. \- V! I- k0 g, w2 ~9 [- Z
1 e% T; }/ ?5 E3 i! D4 B7 E! V! L
    return(irc);
) r2 d! p) W3 G8 f* s8 Q1 U& T}, s. p! A: Q% Q, e
6 O7 M3 G8 j3 E3 ]
static void report_assem_search_directories(void)
7 O/ t1 N# I: B{: F! [0 C5 X( f9 I0 x. Z7 C
    char
) E3 W: h/ A0 E* g        **dir_list;
  O$ a& I5 Z% r9 w+ P    int2 |  `6 C' G5 R5 Q) S" q% w- ~
        ii,# m! ]) D& u2 ^/ v9 P: G* d8 f+ i
        num_dir = 0;
& D* Q4 A  E# M3 P7 B    logical
( l8 Z9 p% w- o' |" Z. k6 Z        *subs;) Y* P2 \$ Y! [$ G, M8 O; Y/ s
8 H9 W* M% V/ o' k
    UF_CALL(UF_ASSEM_ask_search_directories(&num_dir, &dir_list, &subs));+ p1 L# `6 \* z+ ]
    for (ii = 0; ii < num_dir; ii++)6 D- d/ g4 x- o5 U
    {3 W& L0 ?& X+ C* X+ j5 c( D
        ECHO("%s", dir_list[ii]);
) f- X" Z, o- D( E4 w        if (subs[ii]) ECHO("...");
" a+ \/ s$ c, j4 m, J5 \0 _        ECHO("\n");
% {( m- y" H+ y& F    }% R) c/ V; p0 a- q$ Y6 ?9 L
    UF_free_string_array(num_dir, dir_list);
8 g" q: Z9 C# e    UF_free(subs);
2 i: h( p  L: y% O) B. w}" J  g$ u6 V( |2 s; H. f

! o' {2 A/ I1 M$ S4 W* z+ Fstatic void report_assem_options(void)! A( n8 R; g( W
{, j9 n3 h' D' d; A3 D
    UF_ASSEM_options_t
3 b+ N9 H. o) v' U& m( F        assem_opts;
% q* t! N9 }* [: M
4 Q: G3 \$ c) o. F, R, K    UF_CALL(UF_ASSEM_ask_assem_options(&assem_opts));0 R+ S3 V6 q6 S2 O

8 I  w+ ^1 K3 o    ECHO("Part Versions\n");) X+ o3 V! J7 p; S$ Q- y4 g$ i2 u
    swiTCh (assem_opts.load_options)
# \: P8 b: Q4 m    {
9 t6 g+ I8 ]  b! |& e        case UF_ASSEM_load_from_directory:* F! g& w+ k. F1 q/ b! y7 B$ w
            ECHO(" Load = From Folder\n");) {( E9 l/ g' g5 x/ k
            break;
, Y& h0 F3 o6 l. a# g# ?        case UF_ASSEM_load_from_search_dirs:
( n) c9 q# V! R+ D            ECHO(" Load = From Search Folders\n");
9 d! b& Q  s& i0 ~4 }$ @6 i- K- G            break;
9 L: ~, G0 s1 p$ f; T        case UF_ASSEM_load_as_saved:
& O- H* B- d. H            ECHO(" Load = As Saved\n");
& d0 ?  F0 i$ B* o7 }3 e            break;
0 ]4 Z: y% C% g        default:) [; ]" ~& [+ O, J% |. L/ \
            ECHO(" assem_opts.load_options = unknown value (%d)",
2 P. G0 k! P* C- o! d; G1 w) T                assem_opts.load_options);2 V, i. u& j$ M1 ?
            break;' R" h- {3 |1 f) N6 i/ ]% P9 M
    }( y" d& X$ B* ~; @, ^7 K3 A5 N: f
' W  N8 _( k  k* T. ^7 i/ v
    switch (assem_opts.load_latest)
2 q5 V! i% W$ _* e2 O3 k    {6 ~! e% c1 Y( i6 M3 F, [
        case UF_ASSEM_load_exact_version:' D7 v4 j0 ]) [' l8 @
            ECHO(" Load Latest = Off\n");
( n( ^" ]/ C6 A1 ~* Q            break;
# a" K$ @9 P! L        case UF_ASSEM_load_latest_version:
6 f: t; z* D5 q  X/ H            ECHO(" Load Latest = On\n");
! m, G: c) b4 \2 C% @- |            break;
4 i) L' h/ g; ~9 D, H        default:
8 L" O% N! l4 s8 L            ECHO(" assem_opts.load_latest = unknown value (%d)",
# S* e# }- n7 Z1 V+ Q                assem_opts.load_latest);
/ e! G% |5 ?" [# S) E$ m, _            break;
. m: _% |( ^- c! {) J5 X; K$ C+ L    }) R9 h0 Q6 f7 ^9 Z. H& a2 N

6 m: }. C2 o9 k3 d1 B8 V8 Q    if (assem_opts.load_options == UF_ASSEM_load_from_search_dirs)
) x5 a! n1 ]; x; q$ E* y        report_assem_search_directories();8 }. V; e6 C- V, Y& R

6 l5 Z% ^6 k7 o$ V) W' S    ECHO("Scope\n");
/ ^3 m, J; ^9 w( y- L+ n) B9 {    switch(assem_opts.load_components)
9 f. O- U* ?6 E1 ?" K    {
' Q) D  D7 |0 x0 c* v% o        case UF_ASSEM_dont_load_components:
! V* Y  s, F6 Y- H+ S' @            ECHO(" Load = Structure Only\n");
% P) F$ z, F( P5 ?            break;
$ _( n2 ]+ q; F4 W% W; Y        case UF_ASSEM_do_load_components:
7 b  |( a0 `+ d- ~6 D            ECHO(" Load = All Components\n");
+ A& w% X7 G, f1 ]' w            break;: x7 y3 J2 V( K& g
        case UF_ASSEM_use_last_component_set:
% x, W7 {, Y+ I) i            ECHO(" Load = As Saved\n");
" Y- C; e: U& \6 X' M. Q" {; C            break;
1 E! Y' r4 A* w        case UF_ASSEM_use_last_filter:
" X0 l7 t. D$ q5 ^- K            ECHO(" Load = Re-evaluate Last Component Group\n");
" V- u2 ]! T, ~7 r            break;
- J2 m) c& g- b) }        case UF_ASSEM_specify_filter:4 X$ u! y: L6 |9 R0 O6 }
            ECHO(" Load = Specify Component Group\n");
$ h! A: W9 D5 q3 B2 ^8 r3 ^/ L1 N            break;
$ l) |0 K8 \2 A: X0 l) v" [        default:
  |. a! {. ^, R1 o$ D) Z            ECHO(" assem_opts.load_components = unknown value (%d)",
# o! G% m  c7 f9 u- p                assem_opts.load_components);. A) T; B5 S" n: U3 F
            break;
) s' K. Z; a0 x5 A2 L* L; Y' L- q0 y    }
% G$ M/ i: K: }1 S( k9 A
/ u- Z' K! \* S" }2 K9 f    switch(assem_opts.load_fully)# A7 N' b+ y2 }; g7 G
    {
* ]0 t1 m7 f, ?: u: W/ O        case UF_ASSEM_load_components_partially:
, g, W# }$ v! `: q1 K% A. b( Z6 {9 ?            ECHO(" Use Partial Loading = On\n");; Y; p, I7 y1 U
            break;
' T* \& x2 r1 d        case UF_ASSEM_load_components_fully:
* |+ _+ @# {* n% I0 z7 q            ECHO(" Use Partial Loading = Off\n");
- [  e# X; g; x1 n0 q            break;. B3 y$ i! M( T5 m: e2 P) ]# }* E
        default:1 z9 m8 _0 z0 |$ B6 \/ b
            ECHO(" assem_opts.load_fully = unknown value (%d)",
* f# e& @! k2 H- p% Y! u/ z* p7 Z  E                assem_opts.load_fully);! j) |" o0 V. l
            break;
' _3 V. n/ x) U* t# v, b    }. c2 j; B/ Z1 n; v, t

/ m. a6 Y. \- e# Z0 y+ Y; {    switch (assem_opts.load_wave_data)+ o& G9 A, s  m( ?4 O7 @3 D1 N
    {% C' C) F- d( f+ Q, U' i) Z4 @
        case UF_ASSEM_load_wave_data:; X$ S+ s$ l  q% s9 s
            ECHO(" Load Interpart Data = On\n");
) w( d! x3 W0 C" m/ L            break;2 {& u' a- t4 Z9 B" P  p% z
        case UF_ASSEM_default_load_behaviour:
: ?( S1 U5 [# L$ D            ECHO(" Load Interpart Data = Off\n");/ o" t( G$ y2 u; [. R' d
            break;
) Z8 Q6 q2 L7 O# a7 h1 |" x' I        default:
' q% F2 y& p, w- I- {1 B; j            ECHO(" assem_opts.load_wave_data = unknown value (%d)",
& F7 ?) \9 J( b                assem_opts.load_wave_data);8 N* M; y$ R2 l5 k: k: b( p0 S# L  ?
            break;+ q" e" t& [2 v- u
    }
, U  A" i7 D1 P+ p2 B) ?/ D. x# x! v. h' Y9 Y
    switch (assem_opts.load_wave_parents)
: y/ J/ j% c% Y: N6 K  \    {
% J1 B# f' N( r6 H        case UF_ASSEM_none:
7 P" x. w, W* D6 u4 Z9 W            ECHO(" Load Parents = None\n");
. a) s, ]; g% G8 e            break;
: `# h9 a, X" X( T. s- s4 W" o        case UF_ASSEM_immediate:8 T) c  P0 j. u' d( g. R
            ECHO(" Load Parents = Immediate Level Only\n");0 B$ C- S! Z! u& ^2 [+ P+ j7 X
            break;2 y0 _$ H% \+ [6 D0 K, Y0 w6 ]
        case UF_ASSEM_all:. F2 X; i3 p. O. x4 q6 g
            ECHO(" Load Parents = All Levels\n");
$ V! F3 q' B; w+ X0 p! S* x            break;
% C4 g' }3 X; U) S9 _        default:
; v1 F3 A. _7 v2 `            ECHO(" assem_opts.load_wave_parents = unknown value (%d)",  _5 v  G. d2 K  Q6 E0 ?
                assem_opts.load_wave_parents);" {* g7 I% R. G% s' q
            break;5 w6 Z. y. l* A1 y' w
    }1 [+ d  F3 V) W

+ z8 t, ]/ U" w& O    ECHO("Load Behavior\n");
% _( [9 R4 W) M0 E! e1 {$ [    switch (assem_opts.load_substitution)2 F0 e6 o! l3 ?: p- D$ S
    {  U- `2 I; J9 U
        case UF_ASSEM_do_allow_substitution:9 K! \3 F7 Z, ^5 M
            ECHO(" Allow Replacement = On\n");
, E0 V$ y0 I9 |, p            break;, X) v) I+ x( W  \; E  M% p4 Y/ g. J
        case UF_ASSEM_dont_allow_substitution:
( i8 {* M: C8 g6 H0 o            ECHO(" Allow Replacement = Off\n");# h7 L* U; J# `& j
            break;
! }# T; _6 _) s5 h        default:, V5 x  r  [3 [  o5 K
            ECHO(" assem_opts.load_substitution = unknown value (%d)",3 @, k" e: e5 b; L
                assem_opts.load_substitution);
; P" o" w* N+ U" m) o6 M2 M3 J            break;2 M/ q! j$ Z' m0 v
    }
( K4 B+ V4 F5 L0 ~
4 l: W. R8 W2 K+ }: @4 n    switch (assem_opts.auto_regen_pfm_option)
0 v1 r5 c5 l. e  Q: G$ [2 X    {
' U. |" h4 ?2 u  x, Z+ N# b  X% U        case UF_ASSEM_auto_generate_pfm:3 q" X1 U7 e! _; f: a) J4 N
            ECHO(" Generate Missing Part Family Members = On\n");
$ N9 ]3 K/ s5 g* F! q) K            break;
/ r8 n% v2 i# X        case UF_ASSEM_dont_auto_generate_pfm:# R" U- R% N  N! U; C5 ?* L
            ECHO(" Generate Missing Part Family Members = Off\n");6 _8 w# F7 @; i4 N$ U
            break;
- t: M3 Z& s" F+ u5 y        default:9 T9 p' s% y6 }9 h8 ^
            ECHO(" assem_opts.auto_regen_pfm_option = unknown value (%d)",
. O4 U; _# L6 u; m                assem_opts.auto_regen_pfm_option);, R, m8 ~* v% T/ A3 M+ o0 |$ l+ Z
            break;
8 e: [( O1 s0 {. O8 y# ~$ ?    }
. |3 P9 i- s8 A0 w1 a$ I5 n- s7 Y( |' J! w
    switch (assem_opts.failure_action). j  Q# A/ V+ x; }
    {- A! u. f: ^+ U9 F* q
        case UF_ASSEM_do_abort_on_failure:
7 \  @3 j! t, ?: }; c            ECHO(" Cancel Load on Failure = On\n");( t1 m3 Y1 E5 S
            break;: f9 ]* z% S5 f* Q+ W6 z, k; [
        case UF_ASSEM_dont_abort_on_failure:6 v) v+ D- a' R* T8 d; Y% V, e; j% s
            ECHO(" Cancel Load on Failure = Off\n");& L% }1 ~& y, r1 p( b% A3 q: L
            break;
7 d5 R( w# `. K0 w% i" K9 Q, E- y        default:1 C& }5 T2 E- U, Y
            ECHO(" assem_opts.failure_action = unknown value (%d)",9 |- ^) E3 I$ X- i
                assem_opts.failure_action);/ R& f$ R, H% H' `& P
            break;
; j2 O! I- z0 x6 n* P2 E    }
- P) k8 M. y% ?% f  h- g! z, E, U  m# `+ w; a, F- v4 a
    ECHO("Reference Sets\n");
* s! E# Y; A4 o  B  m    switch (assem_opts.apply_to_all_levels)
" {  F6 E2 e/ ~" f$ x. @    {
; x' ^) N1 p+ K5 J4 Z7 {6 u! S) w2 Q        case UF_ASSEM_do_apply_to_all_levels:' I3 n. t% w5 p7 T
            ECHO(" Apply to All Assembly Levels = On\n");# |7 L+ B% R( \: s; M
            break;
' h2 N* S2 t8 u+ B        case UF_ASSEM_dont_apply_to_all_levels:: t5 u: o  i, E6 e5 N
            ECHO(" Apply to All Assembly Levels = Off\n");3 T. E- O8 |" P: w3 A9 W
            break;. H4 @& R8 T1 T' y: ^6 j9 p9 [
        default:1 k2 {% X! m# {$ O: g, Q
            ECHO(" assem_opts.apply_to_all_levels = unknown value (%d)",
( D# U2 R2 E' T& A                assem_opts.apply_to_all_levels);: t9 Y; R% ]( D6 N7 O
            break;3 m4 W- ~  U! a( P  I
    }9 b/ T; a5 Q, \$ z

$ G: F: O5 u1 t! M! t    ECHO("Preferences-> Assembly (misc)\n");
( G( ^# B: q3 ^: p5 d    switch(assem_opts.emphasize)- a  j9 [# ^6 h1 N8 o" z, C
    {$ Q% V* X" H' a  I# c
        case UF_ASSEM_do_not_emphasize_wp:7 X+ t- H$ A0 Q" d) W; t% V
            ECHO(" Work Part-> Emphasize = Off\n");8 S4 |" Y3 ^: k5 [: e4 `* e1 i) }4 s
            break;
* ]" v6 A0 D. w* @& l, q& V        case UF_ASSEM_emphasize_wp:
' V' Z7 \! Z$ Z6 m            ECHO(" Work Part-> Emphasize = On\n");! r- c) P$ {; W
            break;
3 Z5 I* }" N' X        default:3 [" L8 z8 X2 N+ {! G
            ECHO(" assem_opts.emphasize = unknown value (%d)",
9 n: T$ _: w! A! P) E8 z                assem_opts.emphasize);1 F" F. d  S- b: _0 `
            break;
* p# b6 l$ d, R/ z' c8 p    }
' ^$ o# u2 ?* ]6 ~$ ~" y# j1 H7 U5 n4 r7 E. ]  d+ U5 A- q2 W; Q
    switch(assem_opts.maintain_work_part)
  H, T, y$ _; A) O    {9 s# t/ [, r+ G1 ]( u" m
        case UF_ASSEM_do_maintain_work_part:( G3 F0 f% T6 l) F% E* a
            ECHO(" Work Part-> Maintain = On\n");1 M: O8 c3 B# y/ r7 Q
            break;
. O, {' D; X4 F6 m9 @7 u0 R. M        case UF_ASSEM_dont_maintain_work_part:! \; U, w& B1 E; D" ]
            ECHO(" Work Part-> Maintain = Off\n");
) U) ?9 a# J$ H3 ^6 k9 x5 H            break;
0 L: ^: `6 w8 k% R. M: e. ^        default:% s0 g/ j0 K. e- b) V4 A' f, U
            ECHO("assem_opts.maintain_work_part = unknown value (%d)",
: b0 d3 b, T2 p5 n                assem_opts.maintain_work_part);) P6 X. M. K3 f
            break;
6 Y! A% X5 r# Z& J- f9 b& T    }+ R" ?( W! K# Z4 ]" h" j
    switch(assem_opts.update)  K- ~# C1 B) }1 m1 [& q
    {
. P9 c3 F6 w3 R: `! S* _, N        case UF_ASSEM_no_update_report:% o2 i0 R' |- h! L7 J( Y" L! z
            ECHO(" Display Update Report = Off\n");
. C6 s; M9 b8 \: B8 E, d            break;& T' h+ V; I7 _4 F
        case UF_ASSEM_update_report:! ?' Q& T9 k- @5 t
            ECHO(" Do Not Display Update Report = On\n");2 w: X9 R$ R" }  J
            break;
( @  u+ E0 u3 c" `1 ?        default:' C5 z8 |( L8 j& C
            ECHO(" assem_opts.update = unknown value (%d)",# ?% x+ S4 w( [+ K( D
                assem_opts.update);
% z6 b( x' t/ ]  m$ @            break;
- @! ~. V5 f, {& O+ x( ^    }
# d  J+ W- k7 w' g}
' r" B) c2 E) D- ^9 |1 s+ g* n9 `1 \
/ r7 J2 D8 p  ^; V, l9 x/ Qstatic void load_specified_load_options_def_file(void), i- e9 D/ i) }# F- `9 N
{
8 Q3 o4 l9 E: T5 y) G! W    int, Y2 v; b& u8 `1 I
        resp;
, ~" u  E- v' q/ |- v! @    char- t0 ~+ I. L0 a' p" C9 C
        filter[MAX_FSPEC_SIZE+1] = { "*.def" },
, g* k2 ^" a/ W# s/ e4 z% m' J        fspec[MAX_FSPEC_SIZE+1] = { "" };+ `) }2 B; F8 B: h" X& D+ t( G
9 Q1 a# C% S" Z9 S& y+ @: T
    if (!UF_CALL(UF_UI_create_filebox("Enter load options file to restore",% A+ S, E0 T# r7 r  L* N+ K
        "Restore Load Options File", filter, "", fspec, &resp)) &&! \" @# e3 e2 c( p7 O6 }& Q, T
        (resp == UF_UI_OK))7 L, Y; r' d+ y1 \! c7 B
        UF_CALL(UF_ASSEM_restore_load_options(fspec));
% ^  X( Y3 @8 J# e) n}
+ T6 @* G  ~4 R
7 V) V! ^$ f, T$ f. kstatic void do_it(void)9 k: s( @  {# R3 ^+ v
{
% h! r- e9 P! g1 N    ECHO("Current load options:\n");
) \! Z  c* j# f% Y    report_assem_options();6 j! l0 y& W5 J0 M% M) j

) p  P# B4 V* A, Z    load_specified_load_options_def_file();; m; ^+ H& x6 r. A& g+ l" t9 E3 E" h* E
/ I* G* g% }- ^3 W) {! O4 j* L
    ECHO("\nNewly restored load options:\n");" U" A! V* ~: |; q0 {  U
    report_assem_options();2 h* ]# ~; R" V, T- z
}
6 m% u3 M! f# B: X0 e( s
* _7 C; ^  N: B. l+ r/*ARGSUSED*/3 [$ @$ B& W7 P5 H  q
void ufusr(char *param, int *retcode, int paramLen)
7 F4 \; i" H0 v* l{# m; Z  D, C2 S  `3 f
    if (UF_CALL(UF_initialize())) return;
- a+ n; e5 x" _; D8 g    do_it();
; O# @6 `4 J- x    UF_terminate();" {+ I, z9 i4 M* j- x" ~% @
}$ f- a( Y  u2 A/ h2 T

4 H# {: Q1 l+ ^' D% a6 Vint ufusr_ask_unload(void)
% S5 `5 D9 s9 L1 l) Z{
: J$ _! p! F& {  s4 @# f1 e    return (UF_UNLOAD_IMMEDIATELY);
( Y% T$ Y9 m& ?7 R- \}[/mw_shl_code]% ^9 F3 ~( R) ~
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了